Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 08 Jul 2012 12:39:14 -0500
From:      Alan Cox <alc@rice.edu>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        alc@freebsd.org, Michael Butler <imb@protected-networks.net>, current@freebsd.org
Subject:   Re: sleeping thread panic?
Message-ID:  <4FF9C5C2.80509@rice.edu>
In-Reply-To: <20120708165922.GE2338@deviant.kiev.zoral.com.ua>
References:  <4FF98128.6050607@protected-networks.net> <20120708133455.GX2338@deviant.kiev.zoral.com.ua> <4FF98F21.9060003@protected-networks.net> <20120708143113.GZ2338@deviant.kiev.zoral.com.ua> <4FF9A4A8.5050903@protected-networks.net> <4FF9BC03.1040008@protected-networks.net> <20120708165922.GE2338@deviant.kiev.zoral.com.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On 07/08/2012 11:59, Konstantin Belousov wrote:
> On Sun, Jul 08, 2012 at 12:57:39PM -0400, Michael Butler wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> On 07/08/12 11:18, Michael Butler wrote:
>>> On 07/08/12 10:31, Konstantin Belousov wrote:
>>>> Catch it next time ? This should be quite reproducable, if real.
>>>> Actually, try this.
>>>> diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c
>>>> index 9485fdd..de33afc 100644
>>>> --- a/sys/vm/vm_pageout.c
>>>> +++ b/sys/vm/vm_pageout.c
>>>> @@ -1030,7 +1030,6 @@ rescan0:
>>>>   					++pageout_lock_miss;
>>>>   					if (object->flags&  OBJ_MIGHTBEDIRTY)
>>>>   						vnodes_skipped++;
>>>> -					vm_page_lock_queues();
>>>>   					goto unlock_and_continue;
>>   [ .. snip .. ]
>>
>>> Just waiting for the second of two attached RAID arrays to finish
>>> rebuilding and I'll give this a shot - thanks!
>> I repeated the dumps from last night over NFS with this patch installed
>> and no more panics :-)
> But, are panics reproducable without the patch ?

The patch looks correct.  I'm sorry that I didn't catch this problem 
when I reviewed the original patch yesterday.  :-(

I don't think that you really need these assertions:

+                               KASSERT(queues_locked, ("unlocked queues 
2"));
+                               mtx_assert(&vm_page_queue_mtx, MA_OWNED);

The control flow from the preceding acquire is straightforward and 
vm_page_requeue() itself asserts that the page queues lock is held.

Alan




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4FF9C5C2.80509>