*/
const char *yaffs_fs_c_version =
- "$Id: yaffs_fs.c,v 1.72 2009-02-04 21:40:27 charles Exp $";
+ "$Id: yaffs_fs.c,v 1.73 2009-03-01 23:52:28 charles Exp $";
extern const char *yaffs_guts_c_version;
#include <linux/version.h>
#define YAFFS_USE_WRITE_BEGIN_END 0
#endif
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28))
+static uint32_t YCALCBLOCKS(uint64_t partition_size, uint32_t block_size)
+{
+ uint64_t result = partition_size;
+ do_div(result,block_size);
+ return (uint32_t)result;
+}
+#else
+#define YCALCBLOCKS(s,b) ((s)/(b))
+#endif
#include <asm/uaccess.h>
static void yaffs_GrossLock(yaffs_Device * dev)
{
- T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs locking\n"));
+ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs locking %p\n",current));
down(&dev->grossLock);
+ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs locked %p\n",current));
+
}
static void yaffs_GrossUnlock(yaffs_Device * dev)
{
- T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs unlocking\n"));
+ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs unlocking %p\n",current));
up(&dev->grossLock);
}
T(YAFFS_TRACE_OS, (KERN_DEBUG "start yaffs_write_begin\n"));
/* Get a page */
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28)
+ pg = grab_cache_page_write_begin(mapping,index,flags);
+#else
pg = __grab_cache_page(mapping,index);
+#endif
+
*pagep = pg;
if(!pg){
ret = -ENOMEM;
/*
* File creation. Allocate an inode, and we're done..
*/
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
+#define YCRED(x) x
+#else
+#define YCRED(x) x->cred
+#endif
+
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
dev_t rdev)
yaffs_Object *parent = yaffs_InodeToObject(dir);
int error = -ENOSPC;
- uid_t uid = current->fsuid;
- gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
+ uid_t uid = YCRED(current)->fsuid;
+ gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : YCRED(current)->fsgid;
if((dir->i_mode & S_ISGID) && S_ISDIR(mode))
mode |= S_ISGID;
uid, gid);
break;
case S_IFLNK: /* symlink */
- T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_mknod: making file\n"));
+ T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_mknod: making symlink\n"));
obj = NULL; /* Do we ever get here? */
break;
}
{
yaffs_Object *obj;
yaffs_Device *dev;
- uid_t uid = current->fsuid;
- gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
+ uid_t uid = YCRED(current)->fsuid;
+ gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : YCRED(current)->fsgid;
T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_symlink\n"));
T(YAFFS_TRACE_OS, (" %s %d\n", WRITE_SIZE_STR, WRITE_SIZE(mtd)));
T(YAFFS_TRACE_OS, (" oobsize %d\n", mtd->oobsize));
T(YAFFS_TRACE_OS, (" erasesize %d\n", mtd->erasesize));
- T(YAFFS_TRACE_OS, (" size %d\n", mtd->size));
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29)
+ T(YAFFS_TRACE_OS, (" size %u\n", mtd->size));
+#else
+ T(YAFFS_TRACE_OS, (" size %lld\n", mtd->size));
+#endif
#ifdef CONFIG_YAFFS_AUTO_YAFFS2
/* Set up the memory size parameters.... */
- nBlocks = mtd->size / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
+ nBlocks = YCALCBLOCKS(mtd->size ,(YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK));
+
dev->startBlock = 0;
dev->endBlock = nBlocks - 1;
dev->nChunksPerBlock = YAFFS_CHUNKS_PER_BLOCK;
dev->totalBytesPerChunk = mtd->oobblock;
dev->nChunksPerBlock = mtd->erasesize / mtd->oobblock;
#endif
- nBlocks = mtd->size / mtd->erasesize;
+ nBlocks = YCALCBLOCKS(mtd->size,mtd->erasesize);
dev->startBlock = 0;
dev->endBlock = nBlocks - 1;