svn commit: r248083 - in user/attilio/vmobj-rwlock/sys: cddl/compat/opensolaris/sys vm

Attilio Rao attilio at FreeBSD.org
Sat Mar 9 02:13:26 UTC 2013


Author: attilio
Date: Sat Mar  9 02:13:24 2013
New Revision: 248083
URL: http://svnweb.freebsd.org/changeset/base/248083

Log:
  MFC

Modified:
  user/attilio/vmobj-rwlock/sys/cddl/compat/opensolaris/sys/vnode.h
  user/attilio/vmobj-rwlock/sys/vm/vm_object.c
  user/attilio/vmobj-rwlock/sys/vm/vm_object.h
  user/attilio/vmobj-rwlock/sys/vm/vm_page.c
Directory Properties:
  user/attilio/vmobj-rwlock/   (props changed)
  user/attilio/vmobj-rwlock/sys/   (props changed)

Modified: user/attilio/vmobj-rwlock/sys/cddl/compat/opensolaris/sys/vnode.h
==============================================================================
--- user/attilio/vmobj-rwlock/sys/cddl/compat/opensolaris/sys/vnode.h	Sat Mar  9 02:05:29 2013	(r248082)
+++ user/attilio/vmobj-rwlock/sys/cddl/compat/opensolaris/sys/vnode.h	Sat Mar  9 02:13:24 2013	(r248083)
@@ -76,7 +76,7 @@ vn_is_readonly(vnode_t *vp)
 #define	vn_has_cached_data(vp)	\
 	((vp)->v_object != NULL && \
 	 ((vp)->v_object->resident_page_count > 0 || \
-	  (vp)->v_object->cache != NULL))
+	  !vm_object_cache_is_empty((vp)->v_object)))
 #define	vn_exists(vp)		do { } while (0)
 #define	vn_invalid(vp)		do { } while (0)
 #define	vn_renamepath(tdvp, svp, tnm, lentnm)	do { } while (0)

Modified: user/attilio/vmobj-rwlock/sys/vm/vm_object.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/vm/vm_object.c	Sat Mar  9 02:05:29 2013	(r248082)
+++ user/attilio/vmobj-rwlock/sys/vm/vm_object.c	Sat Mar  9 02:13:24 2013	(r248083)
@@ -174,7 +174,7 @@ vm_object_zdtor(void *mem, int size, voi
 	    ("object %p has reservations",
 	    object));
 #endif
-	KASSERT(object->cache == NULL,
+	KASSERT(vm_object_cache_is_empty(object),
 	    ("object %p has cached pages",
 	    object));
 	KASSERT(object->paging_in_progress == 0,
@@ -753,7 +753,7 @@ vm_object_terminate(vm_object_t object)
 	if (__predict_false(!LIST_EMPTY(&object->rvq)))
 		vm_reserv_break_all(object);
 #endif
-	if (__predict_false(object->cache != NULL))
+	if (__predict_false(!vm_object_cache_is_empty(object)))
 		vm_page_cache_free(object, 0, 0);
 
 	/*
@@ -1378,7 +1378,7 @@ retry:
 		 * should still be OBJT_DEFAULT and orig_object should not
 		 * contain any cached pages within the specified range.
 		 */
-		if (__predict_false(orig_object->cache != NULL))
+		if (__predict_false(!vm_object_cache_is_empty(orig_object)))
 			vm_page_cache_transfer(orig_object, offidxstart,
 			    new_object);
 	}
@@ -1727,7 +1727,8 @@ vm_object_collapse(vm_object_t object)
 				/*
 				 * Free any cached pages from backing_object.
 				 */
-				if (__predict_false(backing_object->cache != NULL))
+				if (__predict_false(
+				    !vm_object_cache_is_empty(backing_object)))
 					vm_page_cache_free(backing_object, 0, 0);
 			}
 			/*
@@ -1921,7 +1922,7 @@ again:
 	}
 	vm_object_pip_wakeup(object);
 skipmemq:
-	if (__predict_false(object->cache != NULL))
+	if (__predict_false(!vm_object_cache_is_empty(object)))
 		vm_page_cache_free(object, start, end);
 }
 

Modified: user/attilio/vmobj-rwlock/sys/vm/vm_object.h
==============================================================================
--- user/attilio/vmobj-rwlock/sys/vm/vm_object.h	Sat Mar  9 02:05:29 2013	(r248082)
+++ user/attilio/vmobj-rwlock/sys/vm/vm_object.h	Sat Mar  9 02:13:24 2013	(r248083)
@@ -242,6 +242,13 @@ void vm_object_pip_wakeup(vm_object_t ob
 void vm_object_pip_wakeupn(vm_object_t object, short i);
 void vm_object_pip_wait(vm_object_t object, char *waitid);
 
+static __inline boolean_t
+vm_object_cache_is_empty(vm_object_t object)
+{
+
+	return (object->cache == NULL);
+}
+
 vm_object_t vm_object_allocate (objtype_t, vm_pindex_t);
 boolean_t vm_object_coalesce(vm_object_t, vm_ooffset_t, vm_size_t, vm_size_t,
    boolean_t);

Modified: user/attilio/vmobj-rwlock/sys/vm/vm_page.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/vm/vm_page.c	Sat Mar  9 02:05:29 2013	(r248082)
+++ user/attilio/vmobj-rwlock/sys/vm/vm_page.c	Sat Mar  9 02:13:24 2013	(r248083)
@@ -1130,7 +1130,7 @@ vm_page_cache_free(vm_object_t object, v
 	boolean_t empty;
 
 	mtx_lock(&vm_page_queue_free_mtx);
-	if (__predict_false(object->cache == NULL)) {
+	if (__predict_false(vm_object_cache_is_empty(object))) {
 		mtx_unlock(&vm_page_queue_free_mtx);
 		return;
 	}
@@ -1174,7 +1174,7 @@ vm_page_cache_free(vm_object_t object, v
 		cnt.v_cache_count--;
 		cnt.v_free_count++;
 	}
-	empty = object->cache == NULL;
+	empty = vm_object_cache_is_empty(object);
 	mtx_unlock(&vm_page_queue_free_mtx);
 	if (object->type == OBJT_VNODE && empty)
 		vdrop(object->handle);
@@ -1258,7 +1258,7 @@ vm_page_cache_transfer(vm_object_t orig_
 	 * not.
 	 */
 	VM_OBJECT_ASSERT_WLOCKED(new_object);
-	KASSERT(new_object->cache == NULL,
+	KASSERT(vm_object_cache_is_empty(new_object),
 	    ("vm_page_cache_transfer: object %p has cached pages",
 	    new_object));
 	mtx_lock(&vm_page_queue_free_mtx);
@@ -1301,7 +1301,7 @@ vm_page_cache_transfer(vm_object_t orig_
 			m_next->left = m;
 			new_object->cache = m_next;
 		}
-		KASSERT(new_object->cache == NULL ||
+		KASSERT(vm_object_cache_is_empty(new_object) ||
 		    new_object->type == OBJT_SWAP,
 		    ("vm_page_cache_transfer: object %p's type is incompatible"
 		    " with cached pages", new_object));
@@ -1328,7 +1328,7 @@ vm_page_is_cached(vm_object_t object, vm
 	 * exist.
 	 */
 	VM_OBJECT_ASSERT_WLOCKED(object);
-	if (__predict_true(object->cache == NULL))
+	if (__predict_true(vm_object_cache_is_empty(object)))
 		return (FALSE);
 	mtx_lock(&vm_page_queue_free_mtx);
 	m = vm_page_cache_lookup(object, pindex);
@@ -1466,7 +1466,8 @@ vm_page_alloc(vm_object_t object, vm_pin
 			m->valid = 0;
 		m_object = m->object;
 		vm_page_cache_remove(m);
-		if (m_object->type == OBJT_VNODE && m_object->cache == NULL)
+		if (m_object->type == OBJT_VNODE &&
+		    vm_object_cache_is_empty(m_object))
 			vp = m_object->handle;
 	} else {
 		KASSERT(VM_PAGE_IS_FREE(m),
@@ -1723,7 +1724,8 @@ vm_page_alloc_init(vm_page_t m)
 		m->valid = 0;
 		m_object = m->object;
 		vm_page_cache_remove(m);
-		if (m_object->type == OBJT_VNODE && m_object->cache == NULL)
+		if (m_object->type == OBJT_VNODE &&
+		    vm_object_cache_is_empty(m_object))
 			drop = m_object->handle;
 	} else {
 		KASSERT(VM_PAGE_IS_FREE(m),


More information about the svn-src-user mailing list