Author: kib
Date: Mon Jul 14 09:30:37 2014
New Revision: 268615
URL: http://svnweb.freebsd.org/changeset/base/268615

Log:
  The OBJ_TMPFS flag of vm_object means that there is unreclaimed tmpfs
  vnode for the tmpfs node owning this object.  The flag is currently
  used for two purposes.  First, it allows to correctly handle VV_TEXT
  for tmpfs vnode when the ref count on the object is decremented to 1,
  similar to vnode_pager_dealloc() for regular filesystems.  Second, it
  prevents some operations, which are done on OBJT_SWAP vm objects
  backing user anonymous memory, but are incorrect for the object owned
  by tmpfs node.
  
  The second kind of use of the OBJ_TMPFS flag is incorrect, since the
  vnode might be reclaimed, which clears the flag, but vm object
  operations must still be disallowed.
  
  Introduce one more flag, OBJ_TMPFS_NODE, which is permanently set on
  the object for VREG tmpfs node, and used instead of OBJ_TMPFS to test
  whether vm object collapse and similar actions should be disabled.
  
  Tested by:    pho
  Sponsored by: The FreeBSD Foundation
  MFC after:    2 weeks

Modified:
  head/sys/vm/vm_object.c
  head/sys/vm/vm_object.h

Modified: head/sys/vm/vm_object.c
==============================================================================
--- head/sys/vm/vm_object.c     Mon Jul 14 09:16:55 2014        (r268614)
+++ head/sys/vm/vm_object.c     Mon Jul 14 09:30:37 2014        (r268615)
@@ -553,13 +553,13 @@ vm_object_deallocate(vm_object_t object)
                            object->handle == NULL &&
                            (object->type == OBJT_DEFAULT ||
                            (object->type == OBJT_SWAP &&
-                           (object->flags & OBJ_TMPFS) == 0))) {
+                           (object->flags & OBJ_TMPFS_NODE) == 0))) {
                                vm_object_set_flag(object, OBJ_ONEMAPPING);
                        } else if ((object->shadow_count == 1) &&
                            (object->handle == NULL) &&
                            (object->type == OBJT_DEFAULT ||
                             object->type == OBJT_SWAP)) {
-                               KASSERT((object->flags & OBJ_TMPFS) == 0,
+                               KASSERT((object->flags & OBJ_TMPFS_NODE) == 0,
                                    ("shadowed tmpfs v_object %p", object));
                                vm_object_t robject;
 
@@ -2103,7 +2103,7 @@ vm_object_coalesce(vm_object_t prev_obje
        VM_OBJECT_WLOCK(prev_object);
        if ((prev_object->type != OBJT_DEFAULT &&
            prev_object->type != OBJT_SWAP) ||
-           (prev_object->flags & OBJ_TMPFS) != 0) {
+           (prev_object->flags & OBJ_TMPFS_NODE) != 0) {
                VM_OBJECT_WUNLOCK(prev_object);
                return (FALSE);
        }

Modified: head/sys/vm/vm_object.h
==============================================================================
--- head/sys/vm/vm_object.h     Mon Jul 14 09:16:55 2014        (r268614)
+++ head/sys/vm/vm_object.h     Mon Jul 14 09:30:37 2014        (r268615)
@@ -186,10 +186,11 @@ struct vm_object {
 #define        OBJ_NOSPLIT     0x0010          /* dont split this object */
 #define OBJ_PIPWNT     0x0040          /* paging in progress wanted */
 #define OBJ_MIGHTBEDIRTY 0x0100                /* object might be dirty, only 
for vnode */
+#define        OBJ_TMPFS_NODE  0x0200          /* object belongs to tmpfs VREG 
node */
 #define        OBJ_COLORED     0x1000          /* pg_color is defined */
 #define        OBJ_ONEMAPPING  0x2000          /* One USE (a single, 
non-forked) mapping flag */
 #define        OBJ_DISCONNECTWNT 0x4000        /* disconnect from vnode wanted 
*/
-#define        OBJ_TMPFS       0x8000
+#define        OBJ_TMPFS       0x8000          /* has tmpfs vnode allocated */
 
 #define IDX_TO_OFF(idx) (((vm_ooffset_t)(idx)) << PAGE_SHIFT)
 #define OFF_TO_IDX(off) ((vm_pindex_t)(((vm_ooffset_t)(off)) >> PAGE_SHIFT))
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to