From b8019c0361d2feb0e6aacc03445babaf786d8226 Mon Sep 17 00:00:00 2001 From: Jan Kara Date: Tue, 12 Jul 2005 13:58:29 -0700 Subject: [PATCH] --- yaml --- r: 4680 b: refs/heads/master c: 50a5223428bbe77bc0f312100c950b6f4520ba34 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/ext2/ext2.h | 9 +++++++++ trunk/fs/ext2/super.c | 24 +++++++++++++++++++++--- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index a61bcd8df5eb..1d263e287b17 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 08c6a96fd77836856c090ebb39beadc81cb8484d +refs/heads/master: 50a5223428bbe77bc0f312100c950b6f4520ba34 diff --git a/trunk/fs/ext2/ext2.h b/trunk/fs/ext2/ext2.h index eed521d22cf0..e977f8566d14 100644 --- a/trunk/fs/ext2/ext2.h +++ b/trunk/fs/ext2/ext2.h @@ -1,6 +1,15 @@ #include #include +/* + * ext2 mount options + */ +struct ext2_mount_options { + unsigned long s_mount_opt; + uid_t s_resuid; + gid_t s_resgid; +}; + /* * second extended file system inode data in memory */ diff --git a/trunk/fs/ext2/super.c b/trunk/fs/ext2/super.c index 876e391f2871..dcfe331dc4c4 100644 --- a/trunk/fs/ext2/super.c +++ b/trunk/fs/ext2/super.c @@ -936,12 +936,23 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data) struct ext2_sb_info * sbi = EXT2_SB(sb); struct ext2_super_block * es; unsigned long old_mount_opt = sbi->s_mount_opt; + struct ext2_mount_options old_opts; + unsigned long old_sb_flags; + int err; + + /* Store the old options */ + old_sb_flags = sb->s_flags; + old_opts.s_mount_opt = sbi->s_mount_opt; + old_opts.s_resuid = sbi->s_resuid; + old_opts.s_resgid = sbi->s_resgid; /* * Allow the "check" option to be passed as a remount option. */ - if (!parse_options (data, sbi)) - return -EINVAL; + if (!parse_options (data, sbi)) { + err = -EINVAL; + goto restore_opts; + } sb->s_flags = (sb->s_flags & ~MS_POSIXACL) | ((sbi->s_mount_opt & EXT2_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0); @@ -971,7 +982,8 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data) printk("EXT2-fs: %s: couldn't remount RDWR because of " "unsupported optional features (%x).\n", sb->s_id, le32_to_cpu(ret)); - return -EROFS; + err = -EROFS; + goto restore_opts; } /* * Mounting a RDONLY partition read-write, so reread and @@ -984,6 +996,12 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data) } ext2_sync_super(sb, es); return 0; +restore_opts: + sbi->s_mount_opt = old_opts.s_mount_opt; + sbi->s_resuid = old_opts.s_resuid; + sbi->s_resgid = old_opts.s_resgid; + sb->s_flags = old_sb_flags; + return err; } static int ext2_statfs (struct super_block * sb, struct kstatfs * buf)