Page MenuHomeFreeBSD

D57824.diff
No OneTemporary

D57824.diff

diff --git a/sys/kern/vfs_default.c b/sys/kern/vfs_default.c
--- a/sys/kern/vfs_default.c
+++ b/sys/kern/vfs_default.c
@@ -1631,8 +1631,12 @@
dvp = ap->a_dvp;
vpp = ap->a_vpp;
vput(dvp);
- if (vpp != NULL && ap->a_unlock_vp && (vp = *vpp) != NULL)
- vput(vp);
+ if (vpp != NULL && ap->a_unlock_vp && (vp = *vpp) != NULL) {
+ if (dvp == vp)
+ vrele(vp);
+ else
+ vput(vp);
+ }
return (0);
}
diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c
--- a/sys/ufs/ffs/ffs_vnops.c
+++ b/sys/ufs/ffs/ffs_vnops.c
@@ -2008,14 +2008,20 @@
if ((dp->i_flag & (IN_NEEDSYNC | IN_ENDOFF)) == 0) {
vput(dvp);
- if (vp != NULL && ap->a_unlock_vp)
- vput(vp);
+ if (vp != NULL && ap->a_unlock_vp) {
+ if (vp != dvp)
+ vput(vp);
+ else
+ vrele(vp);
+ }
return (0);
}
mp = dvp->v_mount;
if (vp != NULL) {
- if (ap->a_unlock_vp) {
+ if (dvp == vp) {
+ vrele(vp);
+ } else if (ap->a_unlock_vp) {
vput(vp);
} else {
MPASS(vp->v_type != VNON);
@@ -2055,6 +2061,12 @@
} while (error == ERELOOKUP);
}
+ if (vp == dvp) {
+ if (ap->a_unlock_vp)
+ vput(dvp);
+ return (0);
+ }
+
vput(dvp);
if (vp == NULL || ap->a_unlock_vp)

File Metadata

Mime Type
text/plain
Expires
Fri, Jun 26, 4:08 PM (7 h, 48 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34331889
Default Alt Text
D57824.diff (1 KB)

Event Timeline