must have vnode locked before doing ufs_access
[unix-history] / usr / src / sys / ufs / lfs / lfs_vnops.c
index 716843b..2f7079b 100644 (file)
@@ -14,7 +14,7 @@
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
- *     @(#)lfs_vnops.c 7.37 (Berkeley) %G%
+ *     @(#)lfs_vnops.c 7.38 (Berkeley) %G%
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -952,7 +952,10 @@ ufs_rename(fndp, tndp)
        if (oldparent != dp->i_number)
                newparent = dp->i_number;
        if (doingdirectory && newparent) {
        if (oldparent != dp->i_number)
                newparent = dp->i_number;
        if (doingdirectory && newparent) {
-               if (error = ufs_access(fndp->ni_vp, VWRITE, tndp->ni_cred))
+               VOP_LOCK(fndp->ni_vp);
+               error = ufs_access(fndp->ni_vp, VWRITE, tndp->ni_cred);
+               VOP_UNLOCK(fndp->ni_vp);
+               if (error)
                        goto bad;
                tndp->ni_nameiop = RENAME | LOCKPARENT | LOCKLEAF | NOCACHE;
                do {
                        goto bad;
                tndp->ni_nameiop = RENAME | LOCKPARENT | LOCKLEAF | NOCACHE;
                do {