Re: sleeping thread panic?

From: Michael Butler <imb_at_protected-networks.net>
Date: Sun, 08 Jul 2012 11:18:00 -0400
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

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
> _at__at_ -1030,7 +1030,6 _at__at_ rescan0:
>  					++pageout_lock_miss;
>  					if (object->flags & OBJ_MIGHTBEDIRTY)
>  						vnodes_skipped++;
> -					vm_page_lock_queues();
>  					goto unlock_and_continue;
>  				}
>  				KASSERT(mp != NULL,
> _at__at_ -1041,7 +1040,6 _at__at_ rescan0:
>  				if (vget(vp, LK_EXCLUSIVE | LK_TIMELOCK,
>  				    curthread)) {
>  					VM_OBJECT_LOCK(object);
> -					vm_page_lock_queues();
>  					++pageout_lock_miss;
>  					if (object->flags & OBJ_MIGHTBEDIRTY)
>  						vnodes_skipped++;
> _at__at_ -1082,15 +1080,17 _at__at_ rescan0:
>  				 * If the page has become held it might
>  				 * be undergoing I/O, so skip it
>  				 */
> +				KASSERT(queues_locked, ("unlocked queues 2"));
> +				mtx_assert(&vm_page_queue_mtx, MA_OWNED);
>  				if (m->hold_count) {
> -					vm_page_lock_queues();
> -					queues_locked = TRUE;
>  					vm_page_unlock(m);
>  					vm_page_requeue(m);
>  					if (object->flags & OBJ_MIGHTBEDIRTY)
>  						vnodes_skipped++;
>  					goto unlock_and_continue;
>  				}
> +				vm_page_unlock_queues();
> +				queues_locked = FALSE;
>  			}
>  
>  			/*
> 

Just waiting for the second of two attached RAID arrays to finish
rebuilding and I'll give this a shot - thanks!

	imb

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (FreeBSD)

iEYEARECAAYFAk/5pKgACgkQQv9rrgRC1JKXAgCdEJhZIKRmLbAzIROKmN2WuZCU
mb4AnR3Z+BrN7uqwYnXwubBEBx/QlWf8
=Ne6G
-----END PGP SIGNATURE-----
Received on Sun Jul 08 2012 - 13:18:03 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:28 UTC