Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Jul 2014 01:21:03 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r269174 - in stable/10/sys: fs/tmpfs vm
Message-ID:  <201407280121.s6S1L3ve017041@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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))



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201407280121.s6S1L3ve017041>