svn commit: r233251 -
user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Attilio Rao
attilio at FreeBSD.org
Tue Mar 20 21:44:49 UTC 2012
Author: attilio
Date: Tue Mar 20 21:44:48 2012
New Revision: 233251
URL: http://svn.freebsd.org/changeset/base/233251
Log:
Restore the cleanup of cached pages in zfs_lookup().
Tested by: flo
Modified:
user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
Modified: user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Tue Mar 20 21:37:52 2012 (r233250)
+++ user/attilio/vmcontention/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Tue Mar 20 21:44:48 2012 (r233251)
@@ -323,20 +323,32 @@ page_lookup(vnode_t *vp, int64_t start,
VM_OBJECT_LOCK_ASSERT(obj, MA_OWNED);
for (;;) {
- if ((pp = vm_page_lookup(obj, OFF_TO_IDX(start))) != NULL &&
- vm_page_is_valid(pp, (vm_offset_t)off, nbytes)) {
- if ((pp->oflags & VPO_BUSY) != 0) {
- /*
- * Reference the page before unlocking and
- * sleeping so that the page daemon is less
- * likely to reclaim it.
- */
- vm_page_reference(pp);
- vm_page_sleep(pp, "zfsmwb");
- continue;
+ pp = vm_radix_lookup(&obj->rtree, OFF_TO_IDX(start),
+ VM_RADIX_ANY);
+ if (pp != NULL) {
+ if (vm_page_is_valid(pp, (vm_offset_t)off, nbytes)) {
+ if ((pp->oflags & VPO_BUSY) != 0) {
+ /*
+ * Reference the page before unlocking
+ * and sleeping so that the page
+ * daemon is less likely to reclaim it.
+ */
+ vm_page_reference(pp);
+ vm_page_sleep(pp, "zfsmwb");
+ continue;
+ }
+ vm_page_busy(pp);
+ vm_page_undirty(pp);
+ } else {
+ if (obj->cached_page_count != 0 &&
+ (pp->flags & PG_CACHED) != 0) {
+ mtx_lock(&vm_page_queue_free_mtx);
+ if (pp->object == obj)
+ vm_page_cache_free(pp);
+ mtx_unlock(&vm_page_queue_free_mtx);
+ }
+ pp = NULL;
}
- vm_page_busy(pp);
- vm_page_undirty(pp);
} else
pp = NULL;
break;
More information about the svn-src-user
mailing list