summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2014-07-28 01:21:02 +0000
committerkib <kib@FreeBSD.org>2014-07-28 01:21:02 +0000
commit20a66511817c069bc8532bba59681731e3bdb85f (patch)
tree2e35e35c0770db0783c109e26ca7c4c228dd0612 /sys/vm
parentd2764792a74c6d5fbdff0f50856cc3130afc40da (diff)
downloadFreeBSD-src-20a66511817c069bc8532bba59681731e3bdb85f.zip
FreeBSD-src-20a66511817c069bc8532bba59681731e3bdb85f.tar.gz
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.
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/vm_object.c10
-rw-r--r--sys/vm/vm_object.h3
2 files changed, 8 insertions, 5 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index f5c9cbe..6cfb0d4 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -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_object, vm_ooffset_t prev_offset,
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);
}
diff --git a/sys/vm/vm_object.h b/sys/vm/vm_object.h
index d59a9e6..8381992 100644
--- a/sys/vm/vm_object.h
+++ b/sys/vm/vm_object.h
@@ -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))
OpenPOWER on IntegriCloud