Author: kib
Date: Mon Jul 28 01:21:02 2014
New Revision: 269174
URL: http://svnweb.freebsd.org/changeset/base/269174

Log:
  MFC r268615:
  Add OBJ_TMPFS_NODE flag.
  
  MFC r268616:
  Set the OBJ_TMPFS_NODE flag for vm_object of VREG tmpfs node.
  
  MFC r269053:
  Correct assertion. tmpfs vm object is always at the bottom of
  the shadow chain.

Modified:
  stable/10/sys/fs/tmpfs/tmpfs_subr.c
  stable/10/sys/vm/vm_object.c
  stable/10/sys/vm/vm_object.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/fs/tmpfs/tmpfs_subr.c
==============================================================================
--- stable/10/sys/fs/tmpfs/tmpfs_subr.c Mon Jul 28 01:16:07 2014        
(r269173)
+++ stable/10/sys/fs/tmpfs/tmpfs_subr.c Mon Jul 28 01:21:02 2014        
(r269174)
@@ -231,7 +231,7 @@ tmpfs_alloc_node(struct tmpfs_mount *tmp
                        NULL /* XXXKIB - tmpfs needs swap reservation */);
                VM_OBJECT_WLOCK(obj);
                /* OBJ_TMPFS is set together with the setting of vp->v_object */
-               vm_object_set_flag(obj, OBJ_NOSPLIT);
+               vm_object_set_flag(obj, OBJ_NOSPLIT | OBJ_TMPFS_NODE);
                vm_object_clear_flag(obj, OBJ_ONEMAPPING);
                VM_OBJECT_WUNLOCK(obj);
                break;

Modified: stable/10/sys/vm/vm_object.c
==============================================================================
--- stable/10/sys/vm/vm_object.c        Mon Jul 28 01:16:07 2014        
(r269173)
+++ stable/10/sys/vm/vm_object.c        Mon Jul 28 01:21:02 2014        
(r269174)
@@ -553,14 +553,12 @@ 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,
-                                   ("shadowed tmpfs v_object %p", object));
                                vm_object_t robject;
 
                                robject = LIST_FIRST(&object->shadow_head);
@@ -568,6 +566,8 @@ vm_object_deallocate(vm_object_t object)
                                    ("vm_object_deallocate: ref_count: %d, 
shadow_count: %d",
                                         object->ref_count,
                                         object->shadow_count));
+                               KASSERT((robject->flags & OBJ_TMPFS_NODE) == 0,
+                                   ("shadowed tmpfs v_object %p", object));
                                if (!VM_OBJECT_TRYWLOCK(robject)) {
                                        /*
                                         * Avoid a potential deadlock.
@@ -637,6 +637,8 @@ retry:
 doterm:
                temp = object->backing_object;
                if (temp != NULL) {
+                       KASSERT((object->flags & OBJ_TMPFS_NODE) == 0,
+                           ("shadowed tmpfs v_object 2 %p", object));
                        VM_OBJECT_WLOCK(temp);
                        LIST_REMOVE(object, shadow_list);
                        temp->shadow_count--;
@@ -2104,7 +2106,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: stable/10/sys/vm/vm_object.h
==============================================================================
--- stable/10/sys/vm/vm_object.h        Mon Jul 28 01:16:07 2014        
(r269173)
+++ stable/10/sys/vm/vm_object.h        Mon Jul 28 01:21:02 2014        
(r269174)
@@ -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))
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to