Module Name:    src
Committed By:   dholland
Date:           Mon Jun 20 01:50:14 UTC 2016

Modified Files:
        src/sys/ufs/lfs: ulfs_extattr.c

Log Message:
Merge -r1.46 of ufs_extattr.c: Fix uninitialized mutex usage


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/ufs/lfs/ulfs_extattr.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/ufs/lfs/ulfs_extattr.c
diff -u src/sys/ufs/lfs/ulfs_extattr.c:1.11 src/sys/ufs/lfs/ulfs_extattr.c:1.12
--- src/sys/ufs/lfs/ulfs_extattr.c:1.11	Mon Jun 20 01:47:58 2016
+++ src/sys/ufs/lfs/ulfs_extattr.c	Mon Jun 20 01:50:13 2016
@@ -1,5 +1,5 @@
-/*	$NetBSD: ulfs_extattr.c,v 1.11 2016/06/20 01:47:58 dholland Exp $	*/
-/*  from NetBSD: ufs_extattr.c,v 1.45 2014/11/15 05:03:55 manu Exp  */
+/*	$NetBSD: ulfs_extattr.c,v 1.12 2016/06/20 01:50:13 dholland Exp $	*/
+/*  from NetBSD: ufs_extattr.c,v 1.46 2014/11/19 16:26:47 manu Exp  */
 
 /*-
  * Copyright (c) 1999-2002 Robert N. M. Watson
@@ -49,7 +49,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulfs_extattr.c,v 1.11 2016/06/20 01:47:58 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulfs_extattr.c,v 1.12 2016/06/20 01:50:13 dholland Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_lfs.h"
@@ -1103,6 +1103,9 @@ vop_getextattr {
 	struct ulfsmount *ump = VFSTOULFS(mp);
 	int error;
 
+	if (!(ump->um_extattr.uepm_flags & ULFS_EXTATTR_UEPM_STARTED))
+		return (EOPNOTSUPP);
+
 	ulfs_extattr_uepm_lock(ump);
 
 	error = ulfs_extattr_get(ap->a_vp, ap->a_attrnamespace, ap->a_name,
@@ -1129,9 +1132,6 @@ ulfs_extattr_get(struct vnode *vp, int a
 	size_t len, old_len;
 	int error = 0;
 
-	if (!(ump->um_extattr.uepm_flags & ULFS_EXTATTR_UEPM_STARTED))
-		return (EOPNOTSUPP);
-
 	if (strlen(name) == 0)
 		return (EINVAL);
 
@@ -1221,6 +1221,9 @@ vop_listextattr {
 	struct ulfsmount *ump = VFSTOULFS(mp);
 	int error;
 
+	if (!(ump->um_extattr.uepm_flags & ULFS_EXTATTR_UEPM_STARTED))
+		return (EOPNOTSUPP);
+
 	ulfs_extattr_uepm_lock(ump);
 
 	error = ulfs_extattr_list(ap->a_vp, ap->a_attrnamespace,
@@ -1247,9 +1250,6 @@ ulfs_extattr_list(struct vnode *vp, int 
 	size_t listsize = 0;
 	int error = 0;
 
-	if (!(ump->um_extattr.uepm_flags & ULFS_EXTATTR_UEPM_STARTED))
-		return (EOPNOTSUPP);
-
 	/*
 	 * XXX: We can move this inside the loop and iterate on individual
 	 *	attributes.
@@ -1348,6 +1348,9 @@ vop_deleteextattr {
 	struct ulfsmount *ump = VFSTOULFS(mp); 
 	int error;
 
+	if (!(ump->um_extattr.uepm_flags & ULFS_EXTATTR_UEPM_STARTED))
+		return (EOPNOTSUPP);
+
 	ulfs_extattr_uepm_lock(ump);
 
 	error = ulfs_extattr_rm(ap->a_vp, ap->a_attrnamespace, ap->a_name,
@@ -1377,6 +1380,9 @@ vop_setextattr {
 	struct ulfsmount *ump = VFSTOULFS(mp); 
 	int error;
 
+	if (!(ump->um_extattr.uepm_flags & ULFS_EXTATTR_UEPM_STARTED))
+		return (EOPNOTSUPP);
+
 	ulfs_extattr_uepm_lock(ump);
 
 	/*
@@ -1415,8 +1421,7 @@ ulfs_extattr_set(struct vnode *vp, int a
 
 	if (vp->v_mount->mnt_flag & MNT_RDONLY)
 		return (EROFS);
-	if (!(ump->um_extattr.uepm_flags & ULFS_EXTATTR_UEPM_STARTED))
-		return (EOPNOTSUPP);
+
 	if (!ulfs_extattr_valid_attrname(attrnamespace, name))
 		return (EINVAL);
 
@@ -1535,8 +1540,7 @@ ulfs_extattr_rm(struct vnode *vp, int at
 
 	if (vp->v_mount->mnt_flag & MNT_RDONLY)  
 		return (EROFS);
-	if (!(ump->um_extattr.uepm_flags & ULFS_EXTATTR_UEPM_STARTED))
-		return (EOPNOTSUPP);
+
 	if (!ulfs_extattr_valid_attrname(attrnamespace, name))
 		return (EINVAL);
 
@@ -1609,12 +1613,10 @@ ulfs_extattr_vnode_inactive(struct vnode
 	if (!(ump->um_extattr.uepm_flags & ULFS_EXTATTR_UEPM_INITIALIZED))
 		return;
 
-	ulfs_extattr_uepm_lock(ump);
-
-	if (!(ump->um_extattr.uepm_flags & ULFS_EXTATTR_UEPM_STARTED)) {
-		ulfs_extattr_uepm_unlock(ump);
+	if (!(ump->um_extattr.uepm_flags & ULFS_EXTATTR_UEPM_STARTED))
 		return;
-	}
+
+	ulfs_extattr_uepm_lock(ump);
 
 	LIST_FOREACH(uele, &ump->um_extattr.uepm_list, uele_entries)
 		ulfs_extattr_rm(vp, uele->uele_attrnamespace,

Reply via email to