Re: kernel BUG at fs/inode.c:1116 with 2.6.10-rc{2-mm4,3-mm1}[repost]

Andrew Morton
2004-12-24T18:45:57Z

Vladimir Saveliev <vs@namesys.com> wrote:
>
> Hello
>
> On Fri, 2004-12-24 at 18:31, tabris wrote:
> > On Friday 24 December 2004 3:09 am, Andrew Morton wrote:
> > > tabris <tabris@tabris.net> wrote:
> > > > Attached are the BUG reports for 2.6.10-rc2-mm4 (multiple BUG
> > > > reports) and one from 2.6.10-rc3-mm1, plus dmesg from
> > > > 2.6.10-rc3-mm1.
> > >
> > > Are you using quotas?
> > Yes, I am using quotas.
> > >

I'd be suspecting a quota bug, purely based on the small number of people
reporting a problem and on the size of the quota changes..

> > > What filesystem types are in use?
> > I'm using reiserFS and XFS mostly, with one ext2 partition (/boot,
> > mounted -o sync)
>
> Would you please try to reproduce this problem with:
> http://marc.theaimsgroup.com/?l=reiserfs&m=110381606727976&q=p3

Reproduced below. If this doesn't help I'll roll you a kernel without the
quota changes, thanks.

--- 25/fs/reiserfs/super.c~reiserfs-bug-fix-do-not-clear-ms_active-mount-flag Thu Dec 23 15:08:12 2004
+++ 25-akpm/fs/reiserfs/super.c Thu Dec 23 15:08:12 2004
@@ -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)
_