Module Name:    src
Committed By:   pooka
Date:           Fri May 21 16:48:56 UTC 2010

Modified Files:
        src/sys/kern: vfs_xattr.c

Log Message:
Don't namei while holding vnode lock.  kern/43328


To generate a diff of this commit:
cvs rdiff -u -r1.20 -r1.21 src/sys/kern/vfs_xattr.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/vfs_xattr.c
diff -u src/sys/kern/vfs_xattr.c:1.20 src/sys/kern/vfs_xattr.c:1.21
--- src/sys/kern/vfs_xattr.c:1.20	Mon Jun 29 05:08:18 2009
+++ src/sys/kern/vfs_xattr.c	Fri May 21 16:48:55 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_xattr.c,v 1.20 2009/06/29 05:08:18 dholland Exp $	*/
+/*	$NetBSD: vfs_xattr.c,v 1.21 2010/05/21 16:48:55 pooka Exp $	*/
 
 /*-
  * Copyright (c) 2005, 2008 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_xattr.c,v 1.20 2009/06/29 05:08:18 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_xattr.c,v 1.21 2010/05/21 16:48:55 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -161,32 +161,30 @@
 			return (error);
 	}
 
+	error = namei_simple_user(SCARG(uap, path),
+				NSM_FOLLOW_NOEMULROOT, &path_vp);
+	if (error) {
+		return (error);
+	}
+
 	file_vp = NULL;
 	if (SCARG(uap, filename) != NULL) {
 		NDINIT(&file_nd, LOOKUP, FOLLOW | LOCKLEAF, UIO_USERSPACE,
 		    SCARG(uap, filename));
 		error = namei(&file_nd);
-		if (error)
+		if (error) {
+			vrele(path_vp);
 			return (error);
+		}
 		file_vp = file_nd.ni_vp;
 	}
 
-	error = namei_simple_user(SCARG(uap, path),
-				NSM_FOLLOW_NOEMULROOT, &path_vp);
-	if (error) {
-		if (file_vp != NULL)
-			vput(file_vp);
-		return (error);
-	}
-
 	error = VFS_EXTATTRCTL(path_vp->v_mount, SCARG(uap, cmd), file_vp,
 	    SCARG(uap, attrnamespace),
 	    SCARG(uap, attrname) != NULL ? attrname : NULL);
 
 	if (file_vp != NULL)
 		vrele(file_vp);
-
-	/* XXX missing in the original code - am *I* missing something? */
 	vrele(path_vp);
 
 	return (error);

Reply via email to