svn commit: r327406 - stable/11/sys/fs/tmpfs
Mateusz Guzik
mjg at FreeBSD.org
Sun Dec 31 03:15:47 UTC 2017
Author: mjg
Date: Sun Dec 31 03:15:45 2017
New Revision: 327406
URL: https://svnweb.freebsd.org/changeset/base/327406
Log:
MFC r324127:
tmpfs: skip zero-sized page count updates
Such updates consisted of vast majority of modificiations, especially
in tmpfs_reg_resize.
For the case where page count did no change and the size grew we only
need to update tn_size. Use this fact to avoid vm object lock/relock.
Modified:
stable/11/sys/fs/tmpfs/tmpfs_subr.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/fs/tmpfs/tmpfs_subr.c
==============================================================================
--- stable/11/sys/fs/tmpfs/tmpfs_subr.c Sun Dec 31 03:13:45 2017 (r327405)
+++ stable/11/sys/fs/tmpfs/tmpfs_subr.c Sun Dec 31 03:15:45 2017 (r327406)
@@ -350,7 +350,8 @@ tmpfs_free_node_locked(struct tmpfs_mount *tmp, struct
case VREG:
uobj = node->tn_reg.tn_aobj;
if (uobj != NULL) {
- atomic_subtract_long(&tmp->tm_pages_used, uobj->size);
+ if (uobj->size != 0)
+ atomic_subtract_long(&tmp->tm_pages_used, uobj->size);
KASSERT((uobj->flags & OBJ_TMPFS) == 0,
("leaked OBJ_TMPFS node %p vm_obj %p", node, uobj));
vm_object_deallocate(uobj);
@@ -1375,6 +1376,12 @@ tmpfs_reg_resize(struct vnode *vp, off_t newsize, bool
oldpages = OFF_TO_IDX(oldsize + PAGE_MASK);
MPASS(oldpages == uobj->size);
newpages = OFF_TO_IDX(newsize + PAGE_MASK);
+
+ if (__predict_true(newpages == oldpages && newsize >= oldsize)) {
+ node->tn_size = newsize;
+ return (0);
+ }
+
if (newpages > oldpages &&
tmpfs_pages_check_avail(tmp, newpages - oldpages) == 0)
return (ENOSPC);
More information about the svn-src-stable
mailing list