summaryrefslogtreecommitdiffstats
path: root/sys/fs/msdosfs/msdosfs_lookup.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/fs/msdosfs/msdosfs_lookup.c')
-rw-r--r--sys/fs/msdosfs/msdosfs_lookup.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/sys/fs/msdosfs/msdosfs_lookup.c b/sys/fs/msdosfs/msdosfs_lookup.c
index 60236b8..6617f9e 100644
--- a/sys/fs/msdosfs/msdosfs_lookup.c
+++ b/sys/fs/msdosfs/msdosfs_lookup.c
@@ -54,6 +54,7 @@
#include <sys/vnode.h>
#include <sys/mount.h>
#include <sys/systm.h>
+#include <sys/proc.h>
#include <msdosfs/bpb.h>
#include <msdosfs/direntry.h>
@@ -156,14 +157,14 @@ msdosfs_lookup(ap)
VREF(vdp);
error = 0;
} else if (flags & ISDOTDOT) {
- VOP_UNLOCK(pdp);
- error = vget(vdp, 1);
+ VOP_UNLOCK(pdp, 0, curproc);
+ error = vget(vdp, LK_EXCLUSIVE | LK_INTERLOCK, curproc);
if (!error && lockparent && (flags & ISLASTCN))
- error = VOP_LOCK(pdp);
+ error = vn_lock(pdp, LK_EXCLUSIVE | LK_RETRY, curproc);
} else {
- error = vget(vdp, 1);
+ error = vget(vdp, LK_EXCLUSIVE | LK_INTERLOCK, curproc);
if (!lockparent || error || !(flags & ISLASTCN))
- VOP_UNLOCK(pdp);
+ VOP_UNLOCK(pdp, 0, curproc);
}
if (!error) {
@@ -183,9 +184,9 @@ msdosfs_lookup(ap)
}
vput(vdp);
if (lockparent && pdp != vdp && (flags & ISLASTCN))
- VOP_UNLOCK(pdp);
+ VOP_UNLOCK(pdp, 0, curproc);
}
- error = VOP_LOCK(pdp);
+ error = vn_lock(pdp, LK_EXCLUSIVE | LK_RETRY, curproc);
if (error)
return error;
vdp = pdp;
@@ -345,7 +346,7 @@ notfound:;
/* dp->de_flag |= DE_UPDATE; never update dos directories */
cnp->cn_flags |= SAVENAME;
if (!lockparent)/* leave searched dir locked? */
- VOP_UNLOCK(vdp);
+ VOP_UNLOCK(vdp, 0, curproc);
return EJUSTRETURN;
}
/*
@@ -398,7 +399,7 @@ foundroot:;
}
*vpp = DETOV(tdp);
if (!lockparent)
- VOP_UNLOCK(vdp);
+ VOP_UNLOCK(vdp, 0, curproc);
if (bp)
brelse(bp);
return 0;
@@ -428,7 +429,7 @@ foundroot:;
*vpp = DETOV(tdp);
cnp->cn_flags |= SAVENAME;
if (!lockparent)
- VOP_UNLOCK(vdp);
+ VOP_UNLOCK(vdp, 0, curproc);
if (bp)
brelse(bp);
return 0;
@@ -439,16 +440,16 @@ foundroot:;
*/
pdp = vdp;
if (flags & ISDOTDOT) {
- VOP_UNLOCK(pdp);
+ VOP_UNLOCK(pdp, 0, curproc);
error = deget(pmp, cluster, diroff, dep, &tdp);
if (error) {
- VOP_LOCK(pdp);
+ vn_lock(pdp, LK_EXCLUSIVE | LK_RETRY, curproc);
if (bp)
brelse(bp);
return error;
}
if (lockparent && (flags & ISLASTCN)
- && (error = VOP_LOCK(pdp))) {
+ && (error = vn_lock(pdp, LK_EXCLUSIVE | LK_RETRY, curproc))) {
vput(DETOV(tdp));
return error;
}
@@ -464,7 +465,7 @@ foundroot:;
return error;
}
if (!lockparent || !(flags & ISLASTCN))
- VOP_UNLOCK(pdp);
+ VOP_UNLOCK(pdp, 0, curproc);
*vpp = DETOV(tdp);
}
if (bp)
OpenPOWER on IntegriCloud