summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/fs/tmpfs/tmpfs_subr.c3
-rw-r--r--sys/fs/tmpfs/tmpfs_vnops.c4
2 files changed, 7 insertions, 0 deletions
diff --git a/sys/fs/tmpfs/tmpfs_subr.c b/sys/fs/tmpfs/tmpfs_subr.c
index b8e9a32..ff740ca 100644
--- a/sys/fs/tmpfs/tmpfs_subr.c
+++ b/sys/fs/tmpfs/tmpfs_subr.c
@@ -898,7 +898,10 @@ tmpfs_reg_resize(struct vnode *vp, off_t newsize)
node->tn_reg.tn_aobj_pages = newpages;
+ TMPFS_LOCK(tmp);
tmp->tm_pages_used += (newpages - oldpages);
+ TMPFS_UNLOCK(tmp);
+
node->tn_size = newsize;
vnode_pager_setsize(vp, newsize);
if (newsize < oldsize) {
diff --git a/sys/fs/tmpfs/tmpfs_vnops.c b/sys/fs/tmpfs/tmpfs_vnops.c
index a3711b6..d7aea01 100644
--- a/sys/fs/tmpfs/tmpfs_vnops.c
+++ b/sys/fs/tmpfs/tmpfs_vnops.c
@@ -505,6 +505,9 @@ tmpfs_uio_xfer(struct tmpfs_mount *tmp, struct tmpfs_node *node,
if (uio->uio_rw == UIO_READ && m->valid != VM_PAGE_BITS_ALL)
if (vm_pager_get_pages(uobj, &m, 1, 0) != VM_PAGER_OK)
vm_page_zero_invalid(m, TRUE);
+ vm_page_lock_queues();
+ vm_page_hold(m);
+ vm_page_unlock_queues();
VM_OBJECT_UNLOCK(uobj);
sched_pin();
sf = sf_buf_alloc(m, SFB_CPUPRIVATE);
@@ -518,6 +521,7 @@ tmpfs_uio_xfer(struct tmpfs_mount *tmp, struct tmpfs_node *node,
vm_page_zero_invalid(m, TRUE);
vm_page_dirty(m);
}
+ vm_page_unhold(m);
vm_page_activate(m);
vm_page_wakeup(m);
vm_page_unlock_queues();
OpenPOWER on IntegriCloud