Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 30 Aug 2009 22:33:06 +0000 (UTC)
From:      Kip Macy <kmacy@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r196669 - user/kmacy/head_zfs_merge/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Message-ID:  <200908302233.n7UMX6Qj008105@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kmacy
Date: Sun Aug 30 22:33:06 2009
New Revision: 196669
URL: http://svn.freebsd.org/changeset/base/196669

Log:
  integrate 192704
   don't block I/O progress waiting for a pre-fetch stream
   if we find a matching stream but can't get the lock skip the prefetch

Modified:
  user/kmacy/head_zfs_merge/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c

Modified: user/kmacy/head_zfs_merge/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c
==============================================================================
--- user/kmacy/head_zfs_merge/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c	Sun Aug 30 22:30:07 2009	(r196668)
+++ user/kmacy/head_zfs_merge/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c	Sun Aug 30 22:33:06 2009	(r196669)
@@ -49,11 +49,11 @@ uint32_t	zfetch_block_cap = 256;
 uint64_t	zfetch_array_rd_sz = 1024 * 1024;
 
 SYSCTL_DECL(_vfs_zfs);
-SYSCTL_INT(_vfs_zfs, OID_AUTO, prefetch_disable, CTLFLAG_RDTUN,
+SYSCTL_INT(_vfs_zfs, OID_AUTO, prefetch_disable, CTLFLAG_RW,
     &zfs_prefetch_disable, 0, "Disable prefetch");
 SYSCTL_NODE(_vfs_zfs, OID_AUTO, zfetch, CTLFLAG_RW, 0, "ZFS ZFETCH");
 TUNABLE_INT("vfs.zfs.zfetch.max_streams", &zfetch_max_streams);
-SYSCTL_UINT(_vfs_zfs_zfetch, OID_AUTO, max_streams, CTLFLAG_RDTUN,
+SYSCTL_UINT(_vfs_zfs_zfetch, OID_AUTO, max_streams, CTLFLAG_RW,
     &zfetch_max_streams, 0, "Max # of streams per zfetch");
 TUNABLE_INT("vfs.zfs.zfetch.min_sec_reap", &zfetch_min_sec_reap);
 SYSCTL_UINT(_vfs_zfs_zfetch, OID_AUTO, min_sec_reap, CTLFLAG_RDTUN,
@@ -338,8 +338,10 @@ top:
 
 			reset = !prefetched && zs->zst_len > 1;
 
-			mutex_enter(&zs->zst_lock);
-
+			if (mutex_tryenter(&zs->zst_lock) == 0) {
+				rc = 1;
+				goto out;
+			}
 			if (zh->zst_offset != zs->zst_offset + zs->zst_len) {
 				mutex_exit(&zs->zst_lock);
 				goto top;
@@ -363,8 +365,10 @@ top:
 
 			reset = !prefetched && zs->zst_len > 1;
 
-			mutex_enter(&zs->zst_lock);
-
+			if (mutex_tryenter(&zs->zst_lock) == 0) {
+				rc = 1;
+				goto out;
+			}
 			if (zh->zst_offset != zs->zst_offset - zh->zst_len) {
 				mutex_exit(&zs->zst_lock);
 				goto top;
@@ -391,8 +395,10 @@ top:
 		    zs->zst_len) && (zs->zst_len != zs->zst_stride)) {
 			/* strided forward access */
 
-			mutex_enter(&zs->zst_lock);
-
+			if (mutex_tryenter(&zs->zst_lock) == 0) {
+				rc = 1;
+				goto out;
+			}
 			if ((zh->zst_offset - zs->zst_offset - zs->zst_stride >=
 			    zs->zst_len) || (zs->zst_len == zs->zst_stride)) {
 				mutex_exit(&zs->zst_lock);
@@ -408,8 +414,10 @@ top:
 		    zs->zst_len) && (zs->zst_len != zs->zst_stride)) {
 			/* strided reverse access */
 
-			mutex_enter(&zs->zst_lock);
-
+			if (mutex_tryenter(&zs->zst_lock) == 0) {
+				rc = 1;
+				goto out;
+			}
 			if ((zh->zst_offset - zs->zst_offset + zs->zst_stride >=
 			    zs->zst_len) || (zs->zst_len == zs->zst_stride)) {
 				mutex_exit(&zs->zst_lock);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200908302233.n7UMX6Qj008105>