aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/md
diff options
context:
space:
mode:
authorAlan Cox <alc@FreeBSD.org>2005-01-05 05:32:52 +0000
committerAlan Cox <alc@FreeBSD.org>2005-01-05 05:32:52 +0000
commitc935314fae8e61effb8346e3a5dec1d0f04e01da (patch)
tree8d3dfc8fd488b834d09d0d8bbb5a423c3a5118a4 /sys/dev/md
parent6f4e528a8e69c5ee939d2346dfd536b1c84b58a7 (diff)
downloadsrc-c935314fae8e61effb8346e3a5dec1d0f04e01da.tar.gz
src-c935314fae8e61effb8346e3a5dec1d0f04e01da.zip
Add needed synchronization to the error handling code that was introduced
in revision 1.141. Lock assertion failures reported by: Kris Kennaway
Notes
Notes: svn path=/head/; revision=139700
Diffstat (limited to 'sys/dev/md')
-rw-r--r--sys/dev/md/md.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c
index 550fd5fffb16..f9c72b2917fa 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);