diff options
-rw-r--r-- | sys/fs/tmpfs/tmpfs_subr.c | 3 | ||||
-rw-r--r-- | sys/fs/tmpfs/tmpfs_vnops.c | 4 |
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(); |