From: Vladimir Saveliev When CONFIG_QUOTA is defined reiserfs's finish_unfinished sets and clears MS_ACTIVE bit in s_flags field of super block. If that bit was set already it should not be set. Signed-off-by: Andrew Morton --- 25-akpm/fs/reiserfs/super.c | 13 ++++++++++--- 1 files changed, 10 insertions(+), 3 deletions(-) diff -puN fs/reiserfs/super.c~reiserfs-bug-fix-do-not-clear-ms_active-mount-flag fs/reiserfs/super.c --- 25/fs/reiserfs/super.c~reiserfs-bug-fix-do-not-clear-ms_active-mount-flag 2005-01-02 02:22:14.749114136 -0800 +++ 25-akpm/fs/reiserfs/super.c 2005-01-02 02:22:14.755113224 -0800 @@ -158,6 +158,7 @@ static int finish_unfinished (struct sup int truncate; #ifdef CONFIG_QUOTA int i; + int ms_active_set; #endif @@ -168,7 +169,12 @@ static int finish_unfinished (struct sup #ifdef CONFIG_QUOTA /* Needed for iput() to work correctly and not trash data */ - s->s_flags |= MS_ACTIVE; + if (s->s_flags & MS_ACTIVE) { + ms_active_set = 0; + } else { + ms_active_set = 1; + s->s_flags |= MS_ACTIVE; + } /* Turn on quotas so that they are updated correctly */ for (i = 0; i < MAXQUOTAS; i++) { if (REISERFS_SB(s)->s_qf_names[i]) { @@ -276,8 +282,9 @@ static int finish_unfinished (struct sup if (sb_dqopt(s)->files[i]) vfs_quota_off_mount(s, i); } - /* Restore the flag back */ - s->s_flags &= ~MS_ACTIVE; + if (ms_active_set) + /* Restore the flag back */ + s->s_flags &= ~MS_ACTIVE; #endif pathrelse (&path); if (done) _