Author: kib
Date: Tue Aug 27 08:28:38 2019
New Revision: 351542
URL: https://svnweb.freebsd.org/changeset/base/351542

Log:
  vn_vget_ino_gen(): relock the lower vnode on error.
  
  The function' interface assumes that the lower vnode is passed and
  returned locked always.
  
  Reported and tested by:       pho
  Sponsored by: The FreeBSD Foundation
  MFC after:    1 week

Modified:
  head/sys/kern/vfs_vnops.c

Modified: head/sys/kern/vfs_vnops.c
==============================================================================
--- head/sys/kern/vfs_vnops.c   Tue Aug 27 07:17:31 2019        (r351541)
+++ head/sys/kern/vfs_vnops.c   Tue Aug 27 08:28:38 2019        (r351542)
@@ -2097,7 +2097,7 @@ vn_vget_ino_gen(struct vnode *vp, vn_get_ino_t alloc, 
        VOP_UNLOCK(vp, 0);
        error = alloc(mp, alloc_arg, lkflags, rvp);
        vfs_unbusy(mp);
-       if (*rvp != vp)
+       if (error != 0 || *rvp != vp)
                vn_lock(vp, ltype | LK_RETRY);
        if (vp->v_iflag & VI_DOOMED) {
                if (error == 0) {
_______________________________________________
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