diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2021-01-24 13:56:05 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2021-02-24 07:44:07 +0000 |
commit | 6c465e4719abe04a2c97f49385c2da3046cf39c9 (patch) | |
tree | 96c05e4def5e4f3b6517664ea3165ca8670b5856 | |
parent | b7a3af0b9f010afa9cc0e29d87827f349ab2db9a (diff) | |
download | src-6c465e4719abe04a2c97f49385c2da3046cf39c9.tar.gz src-6c465e4719abe04a2c97f49385c2da3046cf39c9.zip |
ffs_snapshot: use VOP_VPUT_PAIR after VOP_CREATE.
(cherry picked from commit be44e986377780f533f961fe7c009b93379b4710)
-rw-r--r-- | sys/ufs/ffs/ffs_snapshot.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/ufs/ffs/ffs_snapshot.c b/sys/ufs/ffs/ffs_snapshot.c index 32dc47653d18..b5daec14decf 100644 --- a/sys/ufs/ffs/ffs_snapshot.c +++ b/sys/ufs/ffs/ffs_snapshot.c @@ -296,16 +296,21 @@ restart: goto restart; } error = VOP_CREATE(nd.ni_dvp, &nd.ni_vp, &nd.ni_cnd, &vat); - VOP_UNLOCK(nd.ni_dvp); if (error) { + VOP_VPUT_PAIR(nd.ni_dvp, NULL, true); NDFREE(&nd, NDF_ONLY_PNBUF); vn_finished_write(wrtmp); - vrele(nd.ni_dvp); if (error == ERELOOKUP) goto restart; return (error); } vp = nd.ni_vp; + vref(nd.ni_dvp); + VOP_VPUT_PAIR(nd.ni_dvp, &vp, false); + if (VN_IS_DOOMED(vp)) { + error = EBADF; + goto out; + } vnode_create_vobject(nd.ni_vp, fs->fs_size, td); vp->v_vflag |= VV_SYSTEM; ip = VTOI(vp); |