diff options
author | pjd <pjd@FreeBSD.org> | 2004-09-14 18:43:24 +0000 |
---|---|---|
committer | pjd <pjd@FreeBSD.org> | 2004-09-14 18:43:24 +0000 |
commit | 64433e6598e2215959c1a572ab2b00fd51c91d2f (patch) | |
tree | 8abed9907859cffc566a41a1bbd77b1ed17b10d1 /sys | |
parent | ab707546058bb623961fde06996cfcadcdd408dd (diff) | |
download | FreeBSD-src-64433e6598e2215959c1a572ab2b00fd51c91d2f.zip FreeBSD-src-64433e6598e2215959c1a572ab2b00fd51c91d2f.tar.gz |
- Don't forget about NDFREE() in case of vn_open() failure.
- Don't forget about vn_close() in case of failure.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/md/md.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c index eb435c7..f9ef42d 100644 --- a/sys/dev/md/md.c +++ b/sys/dev/md/md.c @@ -897,10 +897,10 @@ mdcreate_vnode(struct md_ioctl *mdio, struct thread *td) flags &= ~FWRITE; NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, mdio->md_file, td); error = vn_open(&nd, &flags, 0, -1); - if (error) - return (error); } NDFREE(&nd, NDF_ONLY_PNBUF); + if (error) + return (error); if (nd.ni_vp->v_type != VREG || (error = VOP_GETATTR(nd.ni_vp, &vattr, td->td_ucred, td))) { VOP_UNLOCK(nd.ni_vp, 0, td); @@ -939,11 +939,13 @@ mdcreate_vnode(struct md_ioctl *mdio, struct thread *td) else sc->nsect = vattr.va_size / sc->secsize; /* XXX: round up ? */ if (sc->nsect == 0) { + (void) vn_close(nd.ni_vp, flags, td->td_ucred, td); mddestroy(sc, td); return (EINVAL); } error = mdsetcred(sc, td->td_ucred); if (error) { + (void) vn_close(nd.ni_vp, flags, td->td_ucred, td); mddestroy(sc, td); return (error); } |