kern/162867: better zfs_cv_init

KOIE Hidetaka koie at suri.co.jp
Fri Nov 25 06:00:26 UTC 2011


>Number:         162867
>Category:       kern
>Synopsis:       better zfs_cv_init
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Fri Nov 25 06:00:25 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     KOIE Hidetaka
>Release:        10.0-CURRENT
>Organization:
Surigiken
>Environment:
FreeBSD guriandgura 10.0-CURRENT FreeBSD 10.0-CURRENT #0 r227876+c95877008e9f,hgver,npowerd,zfs_cv_init: Thu Nov 24 21:41:32 JST 2011     koie at guriandgura:/usr/obj/usr/src/sys/GURIANDGURA  amd64
>Description:
condition variables in ZFS are too long to view with ps(1)/top(1).
This patch is to set a last member.

>How-To-Repeat:

>Fix:


Patch attached with submission follows:

# HG changeset patch
# Parent eb7e7f3e356ee376809b5b7819155c8c0d142ad3

diff --git a/sys/cddl/compat/opensolaris/sys/kcondvar.h b/sys/cddl/compat/opensolaris/sys/kcondvar.h
--- a/sys/cddl/compat/opensolaris/sys/kcondvar.h
+++ b/sys/cddl/compat/opensolaris/sys/kcondvar.h
@@ -44,18 +44,21 @@
 	CV_DRIVER
 } kcv_type_t;
 
-#define	zfs_cv_init(cv, name, type, arg)	do {			\
-	const char *_name;						\
-	ASSERT((type) == CV_DEFAULT);					\
-	for (_name = #cv; *_name != '\0'; _name++) {			\
-		if (*_name >= 'a' && *_name <= 'z')			\
+#define zfs_cv_init(cv, name, type, arg)	do {			\
+	ASSERT(type == CV_DEFAULT);					\
+	const char *n = name;						\
+	const char *e;							\
+	for (e = n; *e != '\0'; e++)					\
+		;							\
+	const char *s;							\
+	for (s = e; n < s; s--) {					\
+		char c = s[-1];						\
+		if (c == '>' || c == '.' || c == '&')			\
 			break;						\
 	}								\
-	if (*_name == '\0')						\
-		_name = #cv;						\
-	cv_init((cv), _name);						\
+	cv_init(cv, s);							\
 } while (0)
-#define	cv_init(cv, name, type, arg)	zfs_cv_init((cv), (name), (type), (arg))
+#define	cv_init(cv, name, type, arg)	zfs_cv_init((cv), #cv, (type), (arg))
 
 #endif	/* _KERNEL */
 


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list