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,