LOCKPARENT flag means lock parent even on lookup
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Mon, 15 May 1989 06:21:40 +0000 (22:21 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Mon, 15 May 1989 06:21:40 +0000 (22:21 -0800)
SCCS-vsn: sys/ufs/ffs/ufs_lookup.c 7.8
SCCS-vsn: sys/ufs/ufs/ufs_lookup.c 7.8

usr/src/sys/ufs/ffs/ufs_lookup.c
usr/src/sys/ufs/ufs/ufs_lookup.c

index 08f88bd..3afadc0 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.
  *
- *     @(#)ufs_lookup.c        7.7 (Berkeley) %G%
+ *     @(#)ufs_lookup.c        7.8 (Berkeley) %G%
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -454,6 +454,8 @@ found:
                        ILOCK(pdp);
                        return (error);
                }
                        ILOCK(pdp);
                        return (error);
                }
+               if (lockparent && *ndp->ni_next == '\0')
+                       ILOCK(pdp);
                ndp->ni_vp = ITOV(tdp);
        } else if (dp->i_number == ndp->ni_dent.d_ino) {
                vdp = ITOV(dp);
                ndp->ni_vp = ITOV(tdp);
        } else if (dp->i_number == ndp->ni_dent.d_ino) {
                vdp = ITOV(dp);
@@ -462,7 +464,8 @@ found:
        } else {
                if (error = iget(dp, ndp->ni_dent.d_ino, &tdp))
                        return (error);
        } else {
                if (error = iget(dp, ndp->ni_dent.d_ino, &tdp))
                        return (error);
-               IUNLOCK(pdp);
+               if (!lockparent || *ndp->ni_next != '\0')
+                       IUNLOCK(pdp);
                ndp->ni_vp = ITOV(tdp);
        }
 
                ndp->ni_vp = ITOV(tdp);
        }
 
index 08f88bd..3afadc0 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.
  *
- *     @(#)ufs_lookup.c        7.7 (Berkeley) %G%
+ *     @(#)ufs_lookup.c        7.8 (Berkeley) %G%
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -454,6 +454,8 @@ found:
                        ILOCK(pdp);
                        return (error);
                }
                        ILOCK(pdp);
                        return (error);
                }
+               if (lockparent && *ndp->ni_next == '\0')
+                       ILOCK(pdp);
                ndp->ni_vp = ITOV(tdp);
        } else if (dp->i_number == ndp->ni_dent.d_ino) {
                vdp = ITOV(dp);
                ndp->ni_vp = ITOV(tdp);
        } else if (dp->i_number == ndp->ni_dent.d_ino) {
                vdp = ITOV(dp);
@@ -462,7 +464,8 @@ found:
        } else {
                if (error = iget(dp, ndp->ni_dent.d_ino, &tdp))
                        return (error);
        } else {
                if (error = iget(dp, ndp->ni_dent.d_ino, &tdp))
                        return (error);
-               IUNLOCK(pdp);
+               if (!lockparent || *ndp->ni_next != '\0')
+                       IUNLOCK(pdp);
                ndp->ni_vp = ITOV(tdp);
        }
 
                ndp->ni_vp = ITOV(tdp);
        }