summaryrefslogtreecommitdiff
path: root/sys/dev/ccd
diff options
context:
space:
mode:
authorEivind Eklund <eivind@FreeBSD.org>1999-12-15 23:02:35 +0000
committerEivind Eklund <eivind@FreeBSD.org>1999-12-15 23:02:35 +0000
commit762e6b856c64ee48f286a7f0b45d0067e556b252 (patch)
treecf4d02d65f6e44871147fef3ce69de82368a30e5 /sys/dev/ccd
parent0b994c2e87a9de9d7eb48152a943ca4c21a4f788 (diff)
Notes
Diffstat (limited to 'sys/dev/ccd')
-rw-r--r--sys/dev/ccd/ccd.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/sys/dev/ccd/ccd.c b/sys/dev/ccd/ccd.c
index 7f14c7874e61..b70f8c20ac80 100644
--- a/sys/dev/ccd/ccd.c
+++ b/sys/dev/ccd/ccd.c
@@ -109,6 +109,8 @@
#include <sys/ccdvar.h>
+#include <vm/vm_zone.h>
+
#if defined(CCDDEBUG) && !defined(DEBUG)
#define DEBUG
#endif
@@ -1598,15 +1600,13 @@ ccdlookup(path, p, vpp)
vp = nd.ni_vp;
if (vp->v_usecount > 1) {
- VOP_UNLOCK(vp, 0, p);
- (void)vn_close(vp, FREAD|FWRITE, p->p_ucred, p);
- return (EBUSY);
+ error = EBUSY;
+ goto bad;
}
if (!vn_isdisk(vp)) {
- VOP_UNLOCK(vp, 0, p);
- (void)vn_close(vp, FREAD|FWRITE, p->p_ucred, p);
- return (ENOTBLK);
+ error = ENOTBLK;
+ goto bad;
}
#ifdef DEBUG
@@ -1615,8 +1615,15 @@ ccdlookup(path, p, vpp)
#endif
VOP_UNLOCK(vp, 0, p);
+ NDFREE(&nd, NDF_ONLY_PNBUF);
*vpp = vp;
return (0);
+bad:
+ VOP_UNLOCK(vp, 0, p);
+ NDFREE(&nd, NDF_ONLY_PNBUF);
+ /* vn_close does vrele() for vp */
+ (void)vn_close(vp, FREAD|FWRITE, p->p_ucred, p);
+ return (error);
}
/*