Author: cem
Date: Tue Feb  5 04:47:21 2019
New Revision: 343762
URL: https://svnweb.freebsd.org/changeset/base/343762

Log:
  extattr_list_vp: Narrow locked section somewhat
  
  Suggested by: mjg
  Reviewed by:  kib, mjg
  Sponsored by: Dell EMC Isilon
  Differential Revision:        https://reviews.freebsd.org/D19083

Modified:
  head/sys/kern/vfs_extattr.c

Modified: head/sys/kern/vfs_extattr.c
==============================================================================
--- head/sys/kern/vfs_extattr.c Tue Feb  5 03:32:58 2019        (r343761)
+++ head/sys/kern/vfs_extattr.c Tue Feb  5 04:47:21 2019        (r343762)
@@ -633,8 +633,6 @@ extattr_list_vp(struct vnode *vp, int attrnamespace, v
        if (nbytes > IOSIZE_MAX)
                return (EINVAL);
 
-       vn_lock(vp, LK_SHARED | LK_RETRY);
-
        auiop = NULL;
        sizep = NULL;
        cnt = 0;
@@ -653,24 +651,25 @@ extattr_list_vp(struct vnode *vp, int attrnamespace, v
        } else
                sizep = &size;
 
+       vn_lock(vp, LK_SHARED | LK_RETRY);
+
 #ifdef MAC
        error = mac_vnode_check_listextattr(td->td_ucred, vp, attrnamespace);
-       if (error)
-               goto done;
+       if (error) {
+               VOP_UNLOCK(vp, 0);
+               return (error);
+       }
 #endif
 
        error = VOP_LISTEXTATTR(vp, attrnamespace, auiop, sizep,
            td->td_ucred, td);
+       VOP_UNLOCK(vp, 0);
 
        if (auiop != NULL) {
                cnt -= auio.uio_resid;
                td->td_retval[0] = cnt;
        } else
                td->td_retval[0] = size;
-#ifdef MAC
-done:
-#endif
-       VOP_UNLOCK(vp, 0);
        return (error);
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to