sleeping thread panic?

Michael Butler imb at protected-networks.net
Sun Jul 8 15:18:03 UTC 2012


-----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
> @@ -1030,7 +1030,6 @@ rescan0:
>  					++pageout_lock_miss;
>  					if (object->flags & OBJ_MIGHTBEDIRTY)
>  						vnodes_skipped++;
> -					vm_page_lock_queues();
>  					goto unlock_and_continue;
>  				}
>  				KASSERT(mp != NULL,
> @@ -1041,7 +1040,6 @@ 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++;
> @@ -1082,15 +1080,17 @@ 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-----


More information about the freebsd-current mailing list