Index: sys/fs/tmpfs/tmpfs_vnops.c =================================================================== --- sys/fs/tmpfs/tmpfs_vnops.c (revisione 233702) +++ sys/fs/tmpfs/tmpfs_vnops.c (copia locale) @@ -514,7 +514,7 @@ tmpfs_mappedread(vm_object_t vobj, vm_object_t tob goto nocache; VM_OBJECT_LOCK(vobj); - if (vobj->cached_page_count == 0) { + if (vobj->resident_page_count == 0 && vobj->cached_page_count == 0) { VM_OBJECT_UNLOCK(vobj); goto nocache; } @@ -647,7 +647,7 @@ tmpfs_mappedwrite(vm_object_t vobj, vm_object_t to } VM_OBJECT_LOCK(vobj); - if (vobj->cached_page_count == 0) { + if (vobj->resident_page_count == 0 && vobj->cached_page_count == 0) { VM_OBJECT_UNLOCK(vobj); vpg = NULL; goto nocache; Index: sys/vm/vm_object.c =================================================================== --- sys/vm/vm_object.c (revisione 233702) +++ sys/vm/vm_object.c (copia locale) @@ -73,6 +73,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include /* for curproc, pageproc */ @@ -1510,8 +1511,11 @@ restart: */ if (p->flags & PG_CACHED) { mtx_lock(&vm_page_queue_free_mtx); - if (p->object == backing_object) + if (p->object == backing_object) { + CTR3(KTR_FLO, "%s: page %p, object %p", + __func__, p, p->object); vm_page_cache_free(p); + } mtx_unlock(&vm_page_queue_free_mtx); continue; } else if (p->object != backing_object) @@ -1932,6 +1936,8 @@ restart: if (p->flags & PG_CACHED) { mtx_lock(&vm_page_queue_free_mtx); if (p->object == object) { + CTR3(KTR_FLO, "%s: page %p, object %p", + __func__, p, p->object); vm_page_cache_free(p); if (object->type == OBJT_VNODE && object->cached_page_count == 0) Index: sys/vm/vm_page.c =================================================================== --- sys/vm/vm_page.c (revisione 233702) +++ sys/vm/vm_page.c (copia locale) @@ -85,6 +85,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -1077,6 +1078,7 @@ vm_page_cache_rename(vm_page_t m, vm_object_t new_ * If the insert fails we simply free the cached page. */ if (vm_radix_insert(&new_object->rtree, idx, m) != 0) { + CTR3(KTR_FLO, "%s: page %p, object %p", __func__, m, m->object); vm_page_cache_free(m); return; } Index: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c =================================================================== --- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c (revisione 233702) +++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c (copia locale) @@ -71,6 +71,7 @@ #include #include #include +#include #include /* @@ -343,8 +344,12 @@ page_lookup(vnode_t *vp, int64_t start, int64_t of if (obj->cached_page_count != 0 && (pp->flags & PG_CACHED) != 0) { mtx_lock(&vm_page_queue_free_mtx); - if (pp->object == obj) + if (pp->object == obj) { + CTR3(KTR_FLO, + "%s: page %p, object %p", + __func__, pp, pp->object); vm_page_cache_free(pp); + } mtx_unlock(&vm_page_queue_free_mtx); } pp = NULL; Index: sys/sys/ktr.h =================================================================== --- sys/sys/ktr.h (revisione 233702) +++ sys/sys/ktr.h (copia locale) @@ -75,7 +75,8 @@ #define KTR_INET6 0x10000000 /* IPv6 stack */ #define KTR_SCHED 0x20000000 /* Machine parsed sched info. */ #define KTR_BUF 0x40000000 /* Buffer cache */ -#define KTR_ALL 0x7fffffff +#define KTR_FLO 0x80000000 +#define KTR_ALL 0xffffffff /* Trace classes to compile in */ #ifdef KTR