X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=yaffs_fs.c;h=c3f57d7723bc2757030bdd3ef993fc47e9fd37b7;hb=11b48ba07062b2975286d468b9a75f7d06293d78;hp=de71211a985bd43d4c61ce7abaeeae511326bfa3;hpb=47e27ba76801d146d5b2ae8edc88a98aab8cc1e8;p=yaffs%2F.git diff --git a/yaffs_fs.c b/yaffs_fs.c index de71211..c3f57d7 100644 --- a/yaffs_fs.c +++ b/yaffs_fs.c @@ -60,6 +60,8 @@ +static void yaffs_put_super(struct super_block *sb); + static ssize_t yaffs_file_read(struct file *f, char *buf, size_t n, loff_t *pos); static ssize_t yaffs_file_write(struct file *f, const char *buf, size_t n, loff_t *pos); @@ -128,6 +130,7 @@ static struct super_operations yaffs_super_ops = { statfs: yaffs_statfs, read_inode: yaffs_read_inode, put_inode: yaffs_put_inode, + put_super: yaffs_put_super, // read_inode: // remount_fs: // clear_inode: @@ -177,6 +180,9 @@ static struct dentry * yaffs_lookup(struct inode *dir, struct dentry *dentry) static void yaffs_put_inode(struct inode *inode) { T(("yaffs_put_inode: ino %d, count %d\n",(int)inode->i_ino, atomic_read(&inode->i_count))); + + yaffs_FlushFile(yaffs_InodeToObject(inode)); + } #ifdef YAFFS_ADDRESS_OPS @@ -626,6 +632,34 @@ static void yaffs_read_inode (struct inode *inode) } +static void yaffs_put_super(struct super_block *sb) +{ + yaffs_Device *dev = yaffs_SuperToDevice(sb); + + if(dev->putSuperFunc) + { + dev->putSuperFunc(sb); + } +} + + +#ifdef YAFFS_MTD_ENABLED + +static void yaffs_MTDPutSuper(struct super_block *sb) +{ + + struct mtd_info *mtd = yaffs_SuperToDevice(sb)->genericDevice; + + if(mtd->sync) + { + mtd->sync(mtd); + } + + put_mtd_device(mtd); +} + +#endif + static struct super_block *yaffs_internal_read_super(int useRam, struct super_block * sb, void * data, int silent) { struct inode * inode; @@ -653,7 +687,7 @@ static struct super_block *yaffs_internal_read_super(int useRam, struct super_bl if(useRam) { -#if YAFFS_RAM_ENABLED +#ifdef YAFFS_RAM_ENABLED // Set the yaffs_Device up for ram emulation sb->u.generic_sbp = dev = kmalloc(sizeof(yaffs_Device),GFP_KERNEL); @@ -675,6 +709,7 @@ static struct super_block *yaffs_internal_read_super(int useRam, struct super_bl dev->readChunkFromNAND = nandemul_ReadChunkFromNAND; dev->eraseBlockInNAND = nandemul_EraseBlockInNAND; dev->initialiseNAND = nandemul_InitialiseNAND; + #endif } @@ -755,6 +790,7 @@ static struct super_block *yaffs_internal_read_super(int useRam, struct super_bl dev->eraseBlockInNAND = nandmtd_EraseBlockInNAND; dev->initialiseNAND = nandmtd_InitialiseNAND; + dev->putSuperFunc = yaffs_MTDPutSuper; #endif }