diff options
author | alc <alc@FreeBSD.org> | 2005-01-05 05:32:52 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2005-01-05 05:32:52 +0000 |
commit | ca27c2900694c4e9183b25f2da7e8b5fdb9ef3ee (patch) | |
tree | 8d3dfc8fd488b834d09d0d8bbb5a423c3a5118a4 /sys/dev | |
parent | c3f39e52f96d75d147e172fed4a765f8665e9404 (diff) | |
download | FreeBSD-src-ca27c2900694c4e9183b25f2da7e8b5fdb9ef3ee.zip FreeBSD-src-ca27c2900694c4e9183b25f2da7e8b5fdb9ef3ee.tar.gz |
Add needed synchronization to the error handling code that was introduced
in revision 1.141.
Lock assertion failures reported by: Kris Kennaway
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/md/md.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c index 550fd5f..f9c72b2 100644 --- a/sys/dev/md/md.c +++ b/sys/dev/md/md.c @@ -559,7 +559,9 @@ mdstart_swap(struct md_s *sc, struct bio *bp) rv = vm_pager_get_pages(sc->object, &m, 1, 0); if (rv == VM_PAGER_ERROR) { sf_buf_free(sf); + vm_page_lock_queues(); vm_page_wakeup(m); + vm_page_unlock_queues(); break; } bcopy((void *)(sf_buf_kva(sf) + offs), p, len); @@ -568,7 +570,9 @@ mdstart_swap(struct md_s *sc, struct bio *bp) rv = vm_pager_get_pages(sc->object, &m, 1, 0); if (rv == VM_PAGER_ERROR) { sf_buf_free(sf); + vm_page_lock_queues(); vm_page_wakeup(m); + vm_page_unlock_queues(); break; } bcopy(p, (void *)(sf_buf_kva(sf) + offs), len); @@ -579,7 +583,9 @@ mdstart_swap(struct md_s *sc, struct bio *bp) rv = vm_pager_get_pages(sc->object, &m, 1, 0); if (rv == VM_PAGER_ERROR) { sf_buf_free(sf); + vm_page_lock_queues(); vm_page_wakeup(m); + vm_page_unlock_queues(); break; } bzero((void *)(sf_buf_kva(sf) + offs), len); |