Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-7]: src/sys/ufs/ufs Pull up following revision(s) (requested by m...



details:   https://anonhg.NetBSD.org/src/rev/f105fe3ad883
branches:  netbsd-7
changeset: 798611:f105fe3ad883
user:      martin <martin%NetBSD.org@localhost>
date:      Sun Nov 23 13:11:02 2014 +0000

description:
Pull up following revision(s) (requested by manu in ticket #254):
        sys/ufs/ufs/ufs_extattr.c: revision 1.46
Fix uninitialized mutex usage
We use extended attribute mount mutex before testing if it had been
initialized, and as reported by Christos,  this caused panic with
LOCKDEBUG. Fix it by testing before using.

diffstat:

 sys/ufs/ufs/ufs_extattr.c |  36 +++++++++++++++++++-----------------
 1 files changed, 19 insertions(+), 17 deletions(-)

diffs (114 lines):

diff -r 25d92fbd52e7 -r f105fe3ad883 sys/ufs/ufs/ufs_extattr.c
--- a/sys/ufs/ufs/ufs_extattr.c Sun Nov 23 13:07:04 2014 +0000
+++ b/sys/ufs/ufs/ufs_extattr.c Sun Nov 23 13:11:02 2014 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ufs_extattr.c,v 1.43.4.2 2014/11/18 18:42:42 snj Exp $ */
+/*     $NetBSD: ufs_extattr.c,v 1.43.4.3 2014/11/23 13:11:02 martin Exp $      */
 
 /*-
  * Copyright (c) 1999-2002 Robert N. M. Watson
@@ -48,7 +48,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_extattr.c,v 1.43.4.2 2014/11/18 18:42:42 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_extattr.c,v 1.43.4.3 2014/11/23 13:11:02 martin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ffs.h"
@@ -1103,6 +1103,9 @@
        struct ufsmount *ump = VFSTOUFS(mp);
        int error;
 
+       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
+               return (EOPNOTSUPP);
+
        ufs_extattr_uepm_lock(ump);
 
        error = ufs_extattr_get(ap->a_vp, ap->a_attrnamespace, ap->a_name,
@@ -1129,9 +1132,6 @@
        size_t len, old_len;
        int error = 0;
 
-       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
-               return (EOPNOTSUPP);
-
        if (strlen(name) == 0)
                return (EINVAL);
 
@@ -1221,6 +1221,9 @@
        struct ufsmount *ump = VFSTOUFS(mp);
        int error;
 
+       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
+               return (EOPNOTSUPP);
+
        ufs_extattr_uepm_lock(ump);
 
        error = ufs_extattr_list(ap->a_vp, ap->a_attrnamespace,
@@ -1247,9 +1250,6 @@
        size_t listsize = 0;
        int error = 0;
 
-       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
-               return (EOPNOTSUPP);
-
        /*
         * XXX: We can move this inside the loop and iterate on individual
         *      attributes.
@@ -1348,6 +1348,9 @@
        struct ufsmount *ump = VFSTOUFS(mp); 
        int error;
 
+       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
+               return (EOPNOTSUPP);
+
        ufs_extattr_uepm_lock(ump);
 
        error = ufs_extattr_rm(ap->a_vp, ap->a_attrnamespace, ap->a_name,
@@ -1377,6 +1380,9 @@
        struct ufsmount *ump = VFSTOUFS(mp); 
        int error;
 
+       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
+               return (EOPNOTSUPP);
+
        ufs_extattr_uepm_lock(ump);
 
        /*
@@ -1415,8 +1421,7 @@
 
        if (vp->v_mount->mnt_flag & MNT_RDONLY)
                return (EROFS);
-       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
-               return (EOPNOTSUPP);
+
        if (!ufs_extattr_valid_attrname(attrnamespace, name))
                return (EINVAL);
 
@@ -1535,8 +1540,7 @@
 
        if (vp->v_mount->mnt_flag & MNT_RDONLY)  
                return (EROFS);
-       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
-               return (EOPNOTSUPP);
+
        if (!ufs_extattr_valid_attrname(attrnamespace, name))
                return (EINVAL);
 
@@ -1609,12 +1613,10 @@
        if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_INITIALIZED))
                return;
 
-       ufs_extattr_uepm_lock(ump);
+       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED))
+               return;
 
-       if (!(ump->um_extattr.uepm_flags & UFS_EXTATTR_UEPM_STARTED)) {
-               ufs_extattr_uepm_unlock(ump);
-               return;
-       }
+       ufs_extattr_uepm_lock(ump);
 
        LIST_FOREACH(uele, &ump->um_extattr.uepm_list, uele_entries)
                ufs_extattr_rm(vp, uele->uele_attrnamespace,



Home | Main Index | Thread Index | Old Index