Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 18 Sep 2005 11:21:35 +0200 (CEST)
From:      Divacky Roman <xdivac02@stud.fit.vutbr.cz>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   kern/86290: minor optimizations + cleanup to vrele usage + stuff
Message-ID:  <200509180921.j8I9LZZd090905@eva.fit.vutbr.cz>
Resent-Message-ID: <200509180930.j8I9U5e3026386@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         86290
>Category:       kern
>Synopsis:       minor optimizations + cleanup to vrele usage + stuff
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Sun Sep 18 09:30:05 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     Divacky Roman
>Release:        FreeBSD 7.0-CURRENT i386
>Organization:
home
>Environment:
FreeBSD witten 7.0-CURRENT FreeBSD 7.0-CURRENT #93: Sat Sep 17 14:02:36 CEST
2005     root@witten:/usr/obj/usr/src/sys/NEOLOGISM  i386


	
>Description:

this patch removes some Giant locking which I believe is unecessary. it also
cleans up one nasty naming bug.

>How-To-Repeat:
	apply the patch
>Fix:

? cscope.out
Index: kern_exit.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/kern_exit.c,v
retrieving revision 1.265
diff -u -r1.265 kern_exit.c
--- kern_exit.c	2 Sep 2005 20:20:01 -0000	1.265
+++ kern_exit.c	17 Sep 2005 12:00:46 -0000
@@ -227,7 +227,6 @@
 	 * Reset any sigio structures pointing to us as a result of
 	 * F_SETOWN with our pid.
 	 */
-	mtx_lock(&Giant);	/* XXX: not sure if needed */
 	funsetownlst(&p->p_sigiolst);
 
 	/*
@@ -235,7 +234,6 @@
 	 * This may block!
 	 */
 	fdfree(td);
-	mtx_unlock(&Giant);	
 
 	/*
 	 * If this thread tickled GEOM, we need to wait for the giggling to
@@ -360,11 +358,8 @@
 	p->p_tracecred = NULL;
 	mtx_unlock(&ktrace_mtx);
 	PROC_UNLOCK(p);
-	if (tracevp != NULL) {
-		mtx_lock(&Giant);
+	if (tracevp != NULL)
 		vrele(tracevp);
-		mtx_unlock(&Giant);
-	}
 	if (tracecred != NULL)
 		crfree(tracecred);
 #endif
@@ -373,9 +368,7 @@
 	 */
 	if ((vtmp = p->p_textvp) != NULL) {
 		p->p_textvp = NULL;
-		mtx_lock(&Giant);	
 		vrele(vtmp);
-		mtx_unlock(&Giant);	
 	}
 
 	/*
@@ -452,7 +445,7 @@
 
 		mtx_unlock(&p->p_pptr->p_sigacts->ps_mtx);
 		pp = p->p_pptr;
-		PROC_UNLOCK(pp);
+		PROC_UNLOCK(p->p_pptr);
 		proc_reparent(p, initproc);
 		p->p_sigparent = SIGCHLD;
 		PROC_LOCK(p->p_pptr);
Index: kern_jail.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/kern_jail.c,v
retrieving revision 1.50
diff -u -r1.50 kern_jail.c
--- kern_jail.c	23 Jun 2005 22:13:28 -0000	1.50
+++ kern_jail.c	17 Sep 2005 12:00:46 -0000
@@ -174,9 +174,7 @@
 	prisoncount--;
 	mtx_unlock(&allprison_mtx);
 e_dropvnref:
-	mtx_lock(&Giant);
 	vrele(pr->pr_root);
-	mtx_unlock(&Giant);
 e_killmtx:
 	mtx_destroy(&pr->pr_mtx);
 	FREE(pr, M_PRISON);
@@ -298,9 +296,7 @@
 
 	pr = (struct prison *)context;
 
-	mtx_lock(&Giant);
 	vrele(pr->pr_root);
-	mtx_unlock(&Giant);
 
 	mtx_destroy(&pr->pr_mtx);
 	if (pr->pr_linux != NULL)
Index: kern_ktrace.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/kern_ktrace.c,v
retrieving revision 1.101
diff -u -r1.101 kern_ktrace.c
--- kern_ktrace.c	24 Jun 2005 12:05:24 -0000	1.101
+++ kern_ktrace.c	17 Sep 2005 12:00:46 -0000
@@ -267,11 +267,8 @@
 {
 
 	crfree(req->ktr_cred);
-	if (req->ktr_vp != NULL) {
-		mtx_lock(&Giant);
+	if (req->ktr_vp != NULL)
 		vrele(req->ktr_vp);
-		mtx_unlock(&Giant);
-	}
 	if (req->ktr_header.ktr_buffer != NULL)
 		free(req->ktr_header.ktr_buffer, M_KTRACE);
 	mtx_lock(&ktrace_mtx);
@@ -739,11 +736,8 @@
 	}
 	mtx_unlock(&ktrace_mtx);
 	PROC_UNLOCK(p);
-	if (tracevp != NULL) {
-		mtx_lock(&Giant);
+	if (tracevp != NULL)
 		vrele(tracevp);
-		mtx_unlock(&Giant);
-	}
 	if (tracecred != NULL)
 		crfree(tracecred);
 
@@ -893,10 +887,8 @@
 		}
 	}
 	mtx_unlock(&ktrace_mtx);
-	mtx_lock(&Giant);
 	while (vrele_count-- > 0)
 		vrele(vp);
-	mtx_unlock(&Giant);
 }
 
 /*
Index: uipc_usrreq.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/uipc_usrreq.c,v
retrieving revision 1.155
diff -u -r1.155 uipc_usrreq.c
--- uipc_usrreq.c	7 May 2005 00:41:35 -0000	1.155
+++ uipc_usrreq.c	17 Sep 2005 12:00:46 -0000
@@ -809,11 +809,8 @@
 	if (unp->unp_addr != NULL)
 		FREE(unp->unp_addr, M_SONAME);
 	uma_zfree(unp_zone, unp);
-	if (vp) {
-		mtx_lock(&Giant);
+	if (vp)
 		vrele(vp);
-		mtx_unlock(&Giant);
-	}
 }
 
 static int
Index: vfs_lookup.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/vfs_lookup.c,v
retrieving revision 1.82
diff -u -r1.82 vfs_lookup.c
--- vfs_lookup.c	15 Sep 2005 15:03:48 -0000	1.82
+++ vfs_lookup.c	17 Sep 2005 12:00:47 -0000
@@ -940,6 +940,7 @@
 	char *ptr, *buf, *cp;
 	size_t len, sz;
 	int error;
+	int vfslocked;
 
 	buf = (char *) malloc(MAXPATHLEN, M_TEMP, M_WAITOK);
 	*pathbuf = buf;
@@ -972,8 +973,7 @@
 		goto keeporig;
 	}
 
-	/* XXX: VFS_LOCK_GIANT? */
-	mtx_lock(&Giant);
+	vfslocked = VFS_LOCK_GIANT((struct mount *)NULL);
 
 	/*
 	 * We know that there is a / somewhere in this pathname.
@@ -1024,8 +1024,7 @@
 	vrele(nd.ni_vp);
 
 nd_failed:
-	/* XXX: VFS_UNLOCK_GIANT? */
-	mtx_unlock(&Giant);
+	VFS_UNLOCK_GIANT(vfslocked);
 
 keeporig:
 	/* If there was an error, use the original path name. */
>Release-Note:
>Audit-Trail:
>Unformatted:



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