summaryrefslogtreecommitdiffstats
path: root/sys/fs/smbfs/smbfs_io.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/fs/smbfs/smbfs_io.c')
-rw-r--r--sys/fs/smbfs/smbfs_io.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/sys/fs/smbfs/smbfs_io.c b/sys/fs/smbfs/smbfs_io.c
index 7e021c1..c47fb1b 100644
--- a/sys/fs/smbfs/smbfs_io.c
+++ b/sys/fs/smbfs/smbfs_io.c
@@ -440,12 +440,15 @@ smbfs_getpages(ap)
VM_OBJECT_LOCK(object);
if (m->valid != 0) {
- vm_page_lock_queues();
for (i = 0; i < npages; ++i) {
- if (i != reqpage)
+ if (i != reqpage) {
+ vm_page_lock(pages[i]);
+ vm_page_lock_queues();
vm_page_free(pages[i]);
+ vm_page_unlock_queues();
+ vm_page_unlock(pages[i]);
+ }
}
- vm_page_unlock_queues();
VM_OBJECT_UNLOCK(object);
return 0;
}
@@ -478,12 +481,15 @@ smbfs_getpages(ap)
VM_OBJECT_LOCK(object);
if (error && (uio.uio_resid == count)) {
printf("smbfs_getpages: error %d\n",error);
- vm_page_lock_queues();
for (i = 0; i < npages; i++) {
- if (reqpage != i)
+ if (reqpage != i) {
+ vm_page_lock(pages[i]);
+ vm_page_lock_queues();
vm_page_free(pages[i]);
+ vm_page_unlock_queues();
+ vm_page_unlock(pages[i]);
+ }
}
- vm_page_unlock_queues();
VM_OBJECT_UNLOCK(object);
return VM_PAGER_ERROR;
}
OpenPOWER on IntegriCloud