aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext2
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@infradead.org>2010-05-19 07:16:40 -0400
committerJan Kara <jack@suse.cz>2010-05-24 08:06:39 -0400
commitc79d967de3741ceb60c5bbbf1b6f97eab9a89838 (patch)
tree5494e7b504cffb0ddc6942d1542c2b4a472207ed /fs/ext2
parenteea7feb072f5914ecafa95b3d83be0c229244d90 (diff)
quota: move remount handling into the filesystem
Currently do_remount_sb calls into the dquot code to tell it about going from rw to ro and ro to rw. Move this code into the filesystem to not depend on the dquot code in the VFS - note ocfs2 already ignores these calls and handles remount by itself. This gets rid of overloading the quotactl calls and allows to unify the VFS and XFS codepaths in that area later. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/ext2')
-rw-r--r--fs/ext2/super.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/fs/ext2/super.c b/fs/ext2/super.c
index 71e9eb1fa696..73346de9af5c 100644
--- a/fs/ext2/super.c
+++ b/fs/ext2/super.c
@@ -1241,6 +1241,7 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
1241 spin_unlock(&sbi->s_lock); 1241 spin_unlock(&sbi->s_lock);
1242 return 0; 1242 return 0;
1243 } 1243 }
1244
1244 /* 1245 /*
1245 * OK, we are remounting a valid rw partition rdonly, so set 1246 * OK, we are remounting a valid rw partition rdonly, so set
1246 * the rdonly flag and then mark the partition as valid again. 1247 * the rdonly flag and then mark the partition as valid again.
@@ -1248,6 +1249,14 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
1248 es->s_state = cpu_to_le16(sbi->s_mount_state); 1249 es->s_state = cpu_to_le16(sbi->s_mount_state);
1249 es->s_mtime = cpu_to_le32(get_seconds()); 1250 es->s_mtime = cpu_to_le32(get_seconds());
1250 spin_unlock(&sbi->s_lock); 1251 spin_unlock(&sbi->s_lock);
1252
1253 err = vfs_dq_off(sb, 1);
1254 if (err < 0 && err != -ENOSYS) {
1255 err = -EBUSY;
1256 spin_lock(&sbi->s_lock);
1257 goto restore_opts;
1258 }
1259
1251 ext2_sync_super(sb, es, 1); 1260 ext2_sync_super(sb, es, 1);
1252 } else { 1261 } else {
1253 __le32 ret = EXT2_HAS_RO_COMPAT_FEATURE(sb, 1262 __le32 ret = EXT2_HAS_RO_COMPAT_FEATURE(sb,
@@ -1269,8 +1278,12 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
1269 if (!ext2_setup_super (sb, es, 0)) 1278 if (!ext2_setup_super (sb, es, 0))
1270 sb->s_flags &= ~MS_RDONLY; 1279 sb->s_flags &= ~MS_RDONLY;
1271 spin_unlock(&sbi->s_lock); 1280 spin_unlock(&sbi->s_lock);
1281
1272 ext2_write_super(sb); 1282 ext2_write_super(sb);
1283
1284 vfs_dq_quota_on_remount(sb);
1273 } 1285 }
1286
1274 return 0; 1287 return 0;
1275restore_opts: 1288restore_opts:
1276 sbi->s_mount_opt = old_opts.s_mount_opt; 1289 sbi->s_mount_opt = old_opts.s_mount_opt;