diff options
| author | Eivind Eklund <eivind@FreeBSD.org> | 1999-12-15 23:02:35 +0000 |
|---|---|---|
| committer | Eivind Eklund <eivind@FreeBSD.org> | 1999-12-15 23:02:35 +0000 |
| commit | 762e6b856c64ee48f286a7f0b45d0067e556b252 (patch) | |
| tree | cf4d02d65f6e44871147fef3ce69de82368a30e5 /sys/dev/ccd | |
| parent | 0b994c2e87a9de9d7eb48152a943ca4c21a4f788 (diff) | |
Notes
Diffstat (limited to 'sys/dev/ccd')
| -rw-r--r-- | sys/dev/ccd/ccd.c | 19 |
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); } /* |
