X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_vfs_multi.c;h=a08e0716124291602ea99316f51c78bea2a19adc;hp=e4edb2cb357e328f8c906c7b01cf02ba9dd13a5a;hb=5758b7a95a391ac8e4d631fbea9fd409d1130a62;hpb=27f18203551940abf35826a66978daf1b8124c6b diff --git a/yaffs_vfs_multi.c b/yaffs_vfs_multi.c index e4edb2c..a08e071 100644 --- a/yaffs_vfs_multi.c +++ b/yaffs_vfs_multi.c @@ -1832,10 +1832,8 @@ static int yaffs_iterate(struct file *f, struct dir_context *dc) goto out; } - if (!dir_emit_dots(f, dc)) { - yaffs_gross_unlock(dev); - return 0; - } + if (!dir_emit_dots(f, dc)) + goto out; curoffs = 1; @@ -2049,11 +2047,11 @@ static void yaffs_fill_inode_from_obj(struct inode *inode, #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0)) inode->i_rdev = old_decode_dev(obj->yst_rdev); - inode->i_atime.tv_sec = (time_t) (obj->yst_atime); + inode->i_atime.tv_sec = (YTIME_T) (obj->yst_atime); inode->i_atime.tv_nsec = 0; - inode->i_mtime.tv_sec = (time_t) obj->yst_mtime; + inode->i_mtime.tv_sec = (YTIME_T) obj->yst_mtime; inode->i_mtime.tv_nsec = 0; - inode->i_ctime.tv_sec = (time_t) obj->yst_ctime; + inode->i_ctime.tv_sec = (YTIME_T) obj->yst_ctime; inode->i_ctime.tv_nsec = 0; #else inode->i_rdev = obj->yst_rdev; @@ -2718,6 +2716,7 @@ static int yaffs_sync_fs(struct super_block *sb) static int yaffs_remount_fs(struct super_block *sb, int *flags, char *data) { int read_only = 0; + int was_read_only = 0; struct mtd_info *mtd; struct yaffs_dev *dev = 0; @@ -2747,8 +2746,18 @@ static int yaffs_remount_fs(struct super_block *sb, int *flags, char *data) } dev = sb->s_fs_info; + was_read_only = dev->read_only; dev->read_only = read_only; + if (was_read_only && !read_only) { + yaffs_gross_lock(dev); + yaffs_guts_cleanup(dev); + yaffs_gross_unlock(dev); + yaffs_bg_start(dev); + } else if (!was_read_only && read_only) { + yaffs_bg_stop(dev); + } + return 0; }