Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 8 Sep 2012 00:48:03 +0100
From:      Attilio Rao <attilio@freebsd.org>
To:        Harald Schmalzbauer <h.schmalzbauer@omnilan.de>
Cc:        stable@freebsd.org, daichi@freebsd.org, Pavel Polyakov <bsd@kobyla.org>
Subject:   Re: lock violation in unionfs (9.0-STABLE r230270)
Message-ID:  <CAJ-FndAjQ-w9vLFziQKpkauyRkQnAEeYOh6nXzTR6w1gx7hsEg@mail.gmail.com>
In-Reply-To: <5048C6D1.8020007@omnilan.de>
References:  <op.v9l1byf89gyv16@pp> <CAJ-FndAFMV2iHcMKvMruCP%2BHRzwQuY1Jcd_o6ZEnTCiPV8_8oA@mail.gmail.com> <op.waqux6rr9gyv16@cel.home> <5022840B.3060708@omnilan.de> <CAJ-FndDkuXksyFD2Nd-S7Ty3N8boSk37=a2nYagMkguRYd1r%2Bg@mail.gmail.com> <5048C6D1.8020007@omnilan.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Sep 6, 2012 at 4:52 PM, Harald Schmalzbauer
<h.schmalzbauer@omnilan.de> wrote:
>  schrieb Attilio Rao am 09.08.2012 20:26 (localtime):
>> On 8/8/12, Harald Schmalzbauer <h.schmalzbauer@omnilan.de> wrote:
>>>  schrieb Pavel Polyakov am 06.03.2012 11:20 (localtime):
>>>>>> mount -t unionfs -o noatime /usr /mnt
>>>>>>
>>>>>> insmntque: mp-safe fs and non-locked vp: 0xfffffe01d96704f0 is not
>>>>>> exclusive locked but should be
>>>>>> KDB: enter: lock violation
>>>>> Pavel,
>>>>> can you give a spin to this patch?:
>>>>> http://www.freebsd.org/~attilio/unionfs_missing_insmntque_lock.patch
>>>>>
>>>>> I think that the unlocking is due at that point as the vnode lock can
>>>>> be switch later on.
>>>>>
>>>>> Let me know what you think about it and what the test does.
>>>> Thanks!
>>>> This patch fixes the problem with lock violation. Sorry I've tested it so
>>>> late.
>>> Hello,
>>>
>>> this patch still applies cleanly to RELENG_9_1. Was there another fix
>>> for the issue or has it just not been PR-sent and thus forgotten?
>> Can you and Pavel try the attached patch? Unfortunately I had no time
>> to test it, I just made in 5 free mins from a non-FreeBSD workstation,
>
> Sorry, couldn't test earlier, but now I did:
> With this patch applied the machine hangs without debug kernel and the
> latter gives the following panic:
> System call nmount returning with the following locks held:
> exclusive lockmgr ufs (ufs) r = 0 (0xc5438278) locked @
> src/sys/fs/unionfs/union_vnops.c:1938
> panic: witness_warn
> cpuid = 0
> KDB: stack backtrace:
> db_trace_self_wrapper(c0a04f7f,c0c112c4,d1de3bb4,c097aa8c,fc,...) at
> db_trace_self_wrapper+0x26
> kdb_backtrace(c0a4965f,0,c09c2ede3c1c,0,...) at kdb_backtrace+0x2a
> witness_warn(2,0,c0a4ac34,c0a0990a,286,...) at witness_warn+0x1e4
> syscall(d1de3d08) ar syscall+0x415
> Xint0x80_syscall() at Xint0x80_syscall+0x21
> --- syscall (0, FreeBSD ELF32, nosys), eip = 0x280b883f,esp =
> 0xbfbfe46c, ebp = 0xbfbfede8 ---
> KDB: enter: panic
> [ thread pid 86 tid 100054 ]
> Stopped ad    kdb_enter+0x3a: movl $0,kdb_why
> db> bt
> Tracing pid 86 tid 100054 td 0xc541b000
> kdb_enter(c0a00d16,c0a09130,0,0,0,...) at panix+0x190
> witness_warn(2,0,x0a4ac34,c0a0990a,286,...) at witness_warn+0x1e4
> syscall(d1de3d08) at syscall+0x415
> Xint0x80_syscall() at Xint0x80_syscall+0x21
>
> Hmm, I guess I forgot to install kernel debug symbols...
> Coming back if I have more

Unfortunately unionfs does very wrong things with the insmntque() locking.
It basically expects the vnode to return locked in the same way
requested by the precedent namei() (when that happens) but when you do
insmntque() you can only have an LK_EXCLUSIVE lock on the vnode.

I still need some time to fix this but my bandwidth is basically 0 at
the moment, I'll try to get back to you with a patch as soon as
possible.

Thanks,
Attilio


-- 
Peace can only be achieved by understanding - A. Einstein



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-FndAjQ-w9vLFziQKpkauyRkQnAEeYOh6nXzTR6w1gx7hsEg>