diff options
Diffstat (limited to 'sys/fs/smbfs/smbfs_io.c')
-rw-r--r-- | sys/fs/smbfs/smbfs_io.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/fs/smbfs/smbfs_io.c b/sys/fs/smbfs/smbfs_io.c index 6a2877b..ebb0934 100644 --- a/sys/fs/smbfs/smbfs_io.c +++ b/sys/fs/smbfs/smbfs_io.c @@ -455,10 +455,12 @@ smbfs_getpages(ap) if (m->valid != 0) { /* handled by vm_fault now */ /* vm_page_zero_invalid(m, TRUE); */ + vm_page_lock_queues(); for (i = 0; i < npages; ++i) { if (i != reqpage) vm_page_free(pages[i]); } + vm_page_unlock_queues(); return 0; } @@ -488,15 +490,18 @@ smbfs_getpages(ap) 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) vm_page_free(pages[i]); } + vm_page_unlock_queues(); return VM_PAGER_ERROR; } size = count - uio.uio_resid; + vm_page_lock_queues(); for (i = 0, toff = 0; i < npages; i++, toff = nextoff) { vm_page_t m; nextoff = toff + PAGE_SIZE; @@ -551,6 +556,7 @@ smbfs_getpages(ap) } } } + vm_page_unlock_queues(); return 0; #endif /* SMBFS_RWGENERIC */ } @@ -639,10 +645,12 @@ smbfs_putpages(ap) if (!error) { int nwritten = round_page(count - uio.uio_resid) / PAGE_SIZE; + vm_page_lock_queues(); for (i = 0; i < nwritten; i++) { rtvals[i] = VM_PAGER_OK; vm_page_undirty(pages[i]); } + vm_page_unlock_queues(); } return rtvals[0]; #endif /* SMBFS_RWGENERIC */ |