2005-01-27 07:26:39

by Sergey S. Kostyliov

[permalink] [raw]
Subject: [2.6.11-rc2] kernel BUG at fs/reiserfs/prints.c:362

Hello all,

Here is a BUG() I've just hited on quota enabled reiserfs disk.

rathamahata@dev rathamahata $ mount | grep /dev/sdb2
/dev/sdb2 on /var/www type reiserfs (rw,noatime,nodiratime,data=writeback,grpquota,usrquota)
rathamahata@dev rathamahata $

REISERFS: panic (device sdb2): journal_begin called without kernel lock held
------------[ cut here ]------------
kernel BUG at fs/reiserfs/prints.c:362!
invalid operand: 0000 [#1]
PREEMPT SMP
Modules linked in:
CPU: 0
EIP: 0060:[<c019e9fb>] Not tainted VLI
EFLAGS: 00010296 (2.6.11-rc2)
EIP is at reiserfs_panic+0x4b/0x80
eax: 00000050 ebx: c02b75b2 ecx: f7fe4270 edx: f1034e38
esi: f7543600 edi: f7543770 ebp: 000000f2 esp: f1034e34
ds: 007b es: 007b ss: 0068
Process qmail-local (pid: 10803, threadinfo=f1034000 task=cc440a60)
Stack: c02bbb00 f7543770 c03b89c0 f7543600 f1034ecc f89af000 c01a8a0e f7543600
c02bcf20 c02b7db8 c01ac186 f74b66c0 000000f2 f1034ecc c0167403 f74b6900
c02f2740 fffffff4 f74b6960 00295e98 c01679dc 00295e98 f74b6090 f74b66c0
Call Trace:
[<c01a8a0e>] reiserfs_check_lock_depth+0x2e/0x30
[<c01ac186>] do_journal_begin_r+0x26/0x2d0
[<c0167403>] d_alloc+0x133/0x180
[<c01679dc>] __d_lookup+0x11c/0x130
[<c01ac641>] journal_begin+0x61/0xf0
[<c019d445>] reiserfs_dquot_initialize+0x25/0x60
[<c015db2d>] link_path_walk+0x48d/0xd20
[<c015d1c6>] permission+0x76/0xa0
[<c015ea98>] vfs_create+0xc8/0x110
[<c015f2cf>] open_namei+0x57f/0x5d0
[<c014fcfd>] filp_open+0x2d/0x60
[<c0150014>] get_unused_fd+0x94/0xc0
[<c015cff7>] getname+0x67/0xb0
[<c015012c>] sys_open+0x3c/0x80
[<c01026b1>] sysenter_past_esp+0x52/0x75
Code: 8d be 70 01 00 00 e8 a5 fd ff ff c7 04 24 00 bb 2b c0 85 f6 89 d8 0f 45 c7 ba c0 893b c0 89 54 24 08 89 44 24 04 e8 25 9d f7 ff <0f> 0b 6a 01 1a 7b 2b c0 c7 04 24 40 bb 2b c0 85 f6 be c0 89 3b
<0>REISERFS: panic (device sdb2): journal_begin called without kernel lock held
------------[ cut here ]------------

--
Sergey S. Kostyliov <[email protected]>
Jabber ID: [email protected]


2005-01-27 10:39:44

by Vladimir V. Saveliev

[permalink] [raw]
Subject: Re: [2.6.11-rc2] kernel BUG at fs/reiserfs/prints.c:362

Hello

On Thu, 2005-01-27 at 10:24, Sergey S. Kostyliov wrote:
> Hello all,
>
> Here is a BUG() I've just hited on quota enabled reiserfs disk.
>
> rathamahata@dev rathamahata $ mount | grep /dev/sdb2
> /dev/sdb2 on /var/www type reiserfs (rw,noatime,nodiratime,data=writeback,grpquota,usrquota)
> rathamahata@dev rathamahata $
>
> REISERFS: panic (device sdb2): journal_begin called without kernel lock held

Would you check whether this patch helps, please?


> ------------[ cut here ]------------
> kernel BUG at fs/reiserfs/prints.c:362!
> invalid operand: 0000 [#1]
> PREEMPT SMP
> Modules linked in:
> CPU: 0
> EIP: 0060:[<c019e9fb>] Not tainted VLI
> EFLAGS: 00010296 (2.6.11-rc2)
> EIP is at reiserfs_panic+0x4b/0x80
> eax: 00000050 ebx: c02b75b2 ecx: f7fe4270 edx: f1034e38
> esi: f7543600 edi: f7543770 ebp: 000000f2 esp: f1034e34
> ds: 007b es: 007b ss: 0068
> Process qmail-local (pid: 10803, threadinfo=f1034000 task=cc440a60)
> Stack: c02bbb00 f7543770 c03b89c0 f7543600 f1034ecc f89af000 c01a8a0e f7543600
> c02bcf20 c02b7db8 c01ac186 f74b66c0 000000f2 f1034ecc c0167403 f74b6900
> c02f2740 fffffff4 f74b6960 00295e98 c01679dc 00295e98 f74b6090 f74b66c0
> Call Trace:
> [<c01a8a0e>] reiserfs_check_lock_depth+0x2e/0x30
> [<c01ac186>] do_journal_begin_r+0x26/0x2d0
> [<c0167403>] d_alloc+0x133/0x180
> [<c01679dc>] __d_lookup+0x11c/0x130
> [<c01ac641>] journal_begin+0x61/0xf0
> [<c019d445>] reiserfs_dquot_initialize+0x25/0x60
> [<c015db2d>] link_path_walk+0x48d/0xd20
> [<c015d1c6>] permission+0x76/0xa0
> [<c015ea98>] vfs_create+0xc8/0x110
> [<c015f2cf>] open_namei+0x57f/0x5d0
> [<c014fcfd>] filp_open+0x2d/0x60
> [<c0150014>] get_unused_fd+0x94/0xc0
> [<c015cff7>] getname+0x67/0xb0
> [<c015012c>] sys_open+0x3c/0x80
> [<c01026b1>] sysenter_past_esp+0x52/0x75
> Code: 8d be 70 01 00 00 e8 a5 fd ff ff c7 04 24 00 bb 2b c0 85 f6 89 d8 0f 45 c7 ba c0 893b c0 89 54 24 08 89 44 24 04 e8 25 9d f7 ff <0f> 0b 6a 01 1a 7b 2b c0 c7 04 24 40 bb 2b c0 85 f6 be c0 89 3b
> <0>REISERFS: panic (device sdb2): journal_begin called without kernel lock held
> ------------[ cut here ]------------


Attachments:
reiserfs-quota-add-missing-lock_kernel.patch (2.64 kB)

2005-01-27 11:27:09

by Jan Kara

[permalink] [raw]
Subject: Re: [2.6.11-rc2] kernel BUG at fs/reiserfs/prints.c:362

Hello,

> On Thu, 2005-01-27 at 10:24, Sergey S. Kostyliov wrote:
> > Hello all,
> >
> > Here is a BUG() I've just hited on quota enabled reiserfs disk.
> >
> > rathamahata@dev rathamahata $ mount | grep /dev/sdb2
> > /dev/sdb2 on /var/www type reiserfs (rw,noatime,nodiratime,data=writeback,grpquota,usrquota)
> > rathamahata@dev rathamahata $
> >
> > REISERFS: panic (device sdb2): journal_begin called without kernel lock held
>
> Would you check whether this patch helps, please?
BTW: What are the exact rules where lock_kernel() should be held for
reiserfs? Is there a doc somewhere? I suspect we might need the lock
also for reiserfs_quota_read() (reiserfs_quota_write() should be
already protected by your fix).
Hmm, I should also check ext2/ext3 whether it needs the lock...

Honza

--
Jan Kara <[email protected]>
SuSE CR Labs

2005-01-27 12:53:02

by Sergey S. Kostyliov

[permalink] [raw]
Subject: Re: [2.6.11-rc2] kernel BUG at fs/reiserfs/prints.c:362

On Thursday 27 January 2005 13:17, Vladimir Saveliev wrote:
> Hello
>
> On Thu, 2005-01-27 at 10:24, Sergey S. Kostyliov wrote:
> > Hello all,
> >
> > Here is a BUG() I've just hited on quota enabled reiserfs disk.
> >
> > rathamahata@dev rathamahata $ mount | grep /dev/sdb2
> > /dev/sdb2 on /var/www type reiserfs (rw,noatime,nodiratime,data=writeback,grpquota,usrquota)
> > rathamahata@dev rathamahata $
> >
> > REISERFS: panic (device sdb2): journal_begin called without kernel lock held
>
> Would you check whether this patch helps, please?
That fixes it. Thank you!

--
Sergey S. Kostyliov <[email protected]>
Jabber ID: [email protected]

2005-01-27 14:16:00

by Vladimir V. Saveliev

[permalink] [raw]
Subject: Re: [2.6.11-rc2] kernel BUG at fs/reiserfs/prints.c:362

Hello

On Thu, 2005-01-27 at 14:26, Jan Kara wrote:
> Hello,
>
> > On Thu, 2005-01-27 at 10:24, Sergey S. Kostyliov wrote:
> > > Hello all,
> > >
> > > Here is a BUG() I've just hited on quota enabled reiserfs disk.
> > >
> > > rathamahata@dev rathamahata $ mount | grep /dev/sdb2
> > > /dev/sdb2 on /var/www type reiserfs (rw,noatime,nodiratime,data=writeback,grpquota,usrquota)
> > > rathamahata@dev rathamahata $
> > >
> > > REISERFS: panic (device sdb2): journal_begin called without kernel lock held
> >
> > Would you check whether this patch helps, please?
> BTW: What are the exact rules where lock_kernel() should be held for
> reiserfs? Is there a doc somewhere?
I do not think so.
Earlier reiserfs used to lock_kernel on entering and unlock on exit. The
reason is that reiserfs has no fine grain locking protecting access to
its data structures.
Since that time there could be introduced some minor improvements,
though.

> I suspect we might need the lock
> also for reiserfs_quota_read() (reiserfs_quota_write() should be
> already protected by your fix).
> Hmm, I should also check ext2/ext3 whether it needs the lock...
>
> Honza

2005-01-27 15:06:46

by Jan Kara

[permalink] [raw]
Subject: Re: [2.6.11-rc2] kernel BUG at fs/reiserfs/prints.c:362

Hi!

> On Thu, 2005-01-27 at 14:26, Jan Kara wrote:
> > Hello,
> >
> > > On Thu, 2005-01-27 at 10:24, Sergey S. Kostyliov wrote:
> > > > Hello all,
> > > >
> > > > Here is a BUG() I've just hited on quota enabled reiserfs disk.
> > > >
> > > > rathamahata@dev rathamahata $ mount | grep /dev/sdb2
> > > > /dev/sdb2 on /var/www type reiserfs (rw,noatime,nodiratime,data=writeback,grpquota,usrquota)
> > > > rathamahata@dev rathamahata $
> > > >
> > > > REISERFS: panic (device sdb2): journal_begin called without kernel lock held
> > >
> > > Would you check whether this patch helps, please?
> > BTW: What are the exact rules where lock_kernel() should be held for
> > reiserfs? Is there a doc somewhere?
> I do not think so.
> Earlier reiserfs used to lock_kernel on entering and unlock on exit. The
> reason is that reiserfs has no fine grain locking protecting access to
> its data structures.
> Since that time there could be introduced some minor improvements,
> though.
So in that case reiserfs_quota_read() also needs a BKL
because it can be called from the quota code without any lock
guarantees (e.g. quota_on() and quotactl() can call reading routine
without BKL).
Attached patch adds this BKL locking and adds also missing
lock_buffer() I found.
If you agree with the patch then you can forward it to Andrew/Linus.

Honza
--
Jan Kara <[email protected]>
SuSE CR Labs


Attachments:
(No filename) (1.37 kB)
reiser-lock-fix.diff (1.01 kB)
Download all attachments

2005-01-28 21:53:37

by Lee Revell

[permalink] [raw]
Subject: Re: [2.6.11-rc2] kernel BUG at fs/reiserfs/prints.c:362

On Thu, 2005-01-27 at 17:15 +0300, Vladimir Saveliev wrote:
> Earlier reiserfs used to lock_kernel on entering and unlock on exit. The
> reason is that reiserfs has no fine grain locking protecting access to
> its data structures.
> Since that time there could be introduced some minor improvements,
> though.

No, reiser3 still does not have proper locking. It uses the BKL for
everything. This will not be fixed as reiser3 is in maintenance mode.
According to Hans "the fix is reiser4".

This came up early in the voluntary preemption development process, we
found reiser3 to be unusable for low latency audio due to the excessive
BKL use disabling preemption all over the place.

It would be interesting to test reiser3 with the preemptible BKL
enabled.

Lee