svn commit: r269174 - in stable/10/sys: fs/tmpfs vm
Konstantin Belousov
kib at FreeBSD.org
Mon Jul 28 01:21:04 UTC 2014
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))
More information about the svn-src-stable-10
mailing list