summary |
tags |
clone url |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
383174b)
SCCS-vsn: sys/kern/vfs_syscalls.c 7.49
SCCS-vsn: sys/kern/uipc_usrreq.c 7.18
SCCS-vsn: sys/ufs/ffs/ffs_vnops.c 7.42
SCCS-vsn: sys/ufs/ffs/ufs_vnops.c 7.42
SCCS-vsn: sys/ufs/lfs/lfs_vnops.c 7.42
SCCS-vsn: sys/ufs/ufs/ufs_vnops.c 7.42
SCCS-vsn: sys/nfs/nfs_node.c 7.27
SCCS-vsn: sys/nfs/nfs_serv.c 7.21
SCCS-vsn: sys/nfs/nfs_vnops.c 7.41
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#)uipc_usrreq.c 7.17 (Berkeley) %G%
+ * @(#)uipc_usrreq.c 7.18 (Berkeley) %G%
vp = ndp->ni_vp;
if (vp != NULL) {
VOP_ABORTOP(ndp);
vp = ndp->ni_vp;
if (vp != NULL) {
VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ vrele(vp);
return (EADDRINUSE);
}
VATTR_NULL(&vattr);
return (EADDRINUSE);
}
VATTR_NULL(&vattr);
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#)vfs_syscalls.c 7.48 (Berkeley) %G%
+ * @(#)vfs_syscalls.c 7.49 (Berkeley) %G%
vattr.va_mode = (uap->fmode & 07777) &~ u.u_cmask;
vattr.va_rdev = uap->dev;
out:
vattr.va_mode = (uap->fmode & 07777) &~ u.u_cmask;
vattr.va_rdev = uap->dev;
out:
- if (error)
- VOP_ABORTOP(ndp);
- else
error = VOP_MKNOD(ndp, &vattr, ndp->ni_cred);
error = VOP_MKNOD(ndp, &vattr, ndp->ni_cred);
+ } else {
+ VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ if (vp)
+ vrele(vp);
+ }
RETURN (error);
if (ndp->ni_vp != NULL) {
VOP_ABORTOP(ndp);
RETURN (error);
if (ndp->ni_vp != NULL) {
VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ vrele(ndp->ni_vp);
RETURN (EEXIST);
} else {
VATTR_NULL(&vattr);
RETURN (EEXIST);
} else {
VATTR_NULL(&vattr);
if (vp->v_mount != xp->v_mount)
error = EXDEV;
out:
if (vp->v_mount != xp->v_mount)
error = EXDEV;
out:
- if (error)
- VOP_ABORTOP(ndp);
- else
error = VOP_LINK(vp, ndp);
error = VOP_LINK(vp, ndp);
+ } else {
+ VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ if (ndp->ni_vp)
+ vrele(ndp->ni_vp);
+ }
out1:
vrele(vp);
RETURN (error);
out1:
vrele(vp);
RETURN (error);
int *retval;
{
register struct nameidata *ndp = &u.u_nd;
int *retval;
{
register struct nameidata *ndp = &u.u_nd;
- register struct vnode *vp;
struct vattr vattr;
char *target;
int error;
struct vattr vattr;
char *target;
int error;
ndp->ni_dirp = uap->linkname;
MALLOC(target, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
if (error = copyinstr(uap->target, target, MAXPATHLEN, (u_int *)0))
ndp->ni_dirp = uap->linkname;
MALLOC(target, char *, MAXPATHLEN, M_NAMEI, M_WAITOK);
if (error = copyinstr(uap->target, target, MAXPATHLEN, (u_int *)0))
ndp->ni_nameiop = CREATE | LOCKPARENT;
if (error = namei(ndp))
ndp->ni_nameiop = CREATE | LOCKPARENT;
if (error = namei(ndp))
- goto out1;
- vp = ndp->ni_vp;
- if (vp) {
+ goto out;
+ if (ndp->ni_vp) {
+ VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ vrele(ndp->ni_vp);
error = EEXIST;
goto out;
}
error = EEXIST;
goto out;
}
VATTR_NULL(&vattr);
vattr.va_mode = 0777 &~ u.u_cmask;
VATTR_NULL(&vattr);
vattr.va_mode = 0777 &~ u.u_cmask;
+ error = VOP_SYMLINK(ndp, &vattr, target);
- if (error)
- VOP_ABORTOP(ndp);
- else
- error = VOP_SYMLINK(ndp, &vattr, target);
-out1:
FREE(target, M_NAMEI);
RETURN (error);
}
FREE(target, M_NAMEI);
RETURN (error);
}
if (vp->v_flag & VTEXT)
xrele(vp); /* try once to free text */
out:
if (vp->v_flag & VTEXT)
xrele(vp); /* try once to free text */
out:
- if (error)
- VOP_ABORTOP(ndp);
- else
+ } else {
+ VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ vput(vp);
+ }
tond.ni_nameiop = RENAME | LOCKPARENT | LOCKLEAF | NOCACHE;
tond.ni_segflg = UIO_USERSPACE;
tond.ni_dirp = uap->to;
tond.ni_nameiop = RENAME | LOCKPARENT | LOCKLEAF | NOCACHE;
tond.ni_segflg = UIO_USERSPACE;
tond.ni_dirp = uap->to;
+ if (error = namei(&tond)) {
+ VOP_ABORTOP(ndp);
+ vrele(ndp->ni_dvp);
+ vrele(fvp);
+ goto out1;
+ }
tdvp = tond.ni_dvp;
tvp = tond.ni_vp;
if (tvp != NULL) {
tdvp = tond.ni_dvp;
tvp = tond.ni_vp;
if (tvp != NULL) {
- if (error) {
- VOP_ABORTOP(ndp);
- goto out1;
- }
if (fvp->v_mount != tdvp->v_mount) {
error = EXDEV;
goto out;
if (fvp->v_mount != tdvp->v_mount) {
error = EXDEV;
goto out;
if (fvp == tvp)
error = -1;
out:
if (fvp == tvp)
error = -1;
out:
+ if (!error) {
+ error = VOP_RENAME(ndp, &tond);
+ } else {
+ vput(tdvp);
+ if (tvp)
+ vput(tvp);
- } else {
- error = VOP_RENAME(ndp, &tond);
+ vrele(ndp->ni_dvp);
+ vrele(fvp);
vp = ndp->ni_vp;
if (vp != NULL) {
VOP_ABORTOP(ndp);
vp = ndp->ni_vp;
if (vp != NULL) {
VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ vrele(vp);
RETURN (EEXIST);
}
VATTR_NULL(&vattr);
RETURN (EEXIST);
}
VATTR_NULL(&vattr);
if (vp->v_flag & VROOT)
error = EBUSY;
out:
if (vp->v_flag & VROOT)
error = EBUSY;
out:
- if (error)
- VOP_ABORTOP(ndp);
- else
+ } else {
+ VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ vput(vp);
+ }
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#)nfs_node.c 7.26 (Berkeley) %G%
+ * @(#)nfs_node.c 7.27 (Berkeley) %G%
+/*
+ * Nfs abort op, called after namei() when a CREATE/DELETE isn't actually
+ * done. Currently nothing to do.
+ */
+/* ARGSUSED */
- register struct nameidata *ndp;
- if (ndp->ni_dvp != NULL) {
- if (VOP_ISLOCKED(ndp->ni_dvp))
- VOP_UNLOCK(ndp->ni_dvp);
- vrele(ndp->ni_dvp);
- }
- if (ndp->ni_vp != NULL) {
- if (VOP_ISLOCKED(ndp->ni_vp))
- VOP_UNLOCK(ndp->ni_vp);
- vrele(ndp->ni_vp);
- }
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#)nfs_serv.c 7.20 (Berkeley) %G%
+ * @(#)nfs_serv.c 7.21 (Berkeley) %G%
if (vap->va_type == VFIFO) {
#ifndef FIFO
VOP_ABORTOP(ndp);
if (vap->va_type == VFIFO) {
#ifndef FIFO
VOP_ABORTOP(ndp);
error = ENXIO;
nfsm_reply(0);
#endif /* FIFO */
} else if (error = suser(cred, (short *)0)) {
VOP_ABORTOP(ndp);
error = ENXIO;
nfsm_reply(0);
#endif /* FIFO */
} else if (error = suser(cred, (short *)0)) {
VOP_ABORTOP(ndp);
nfsm_reply(0);
} else
vap->va_rdev = (dev_t)rdev;
nfsm_reply(0);
} else
vap->va_rdev = (dev_t)rdev;
nfsm_reply(0);
} else {
VOP_ABORTOP(ndp);
nfsm_reply(0);
} else {
VOP_ABORTOP(ndp);
error = ENXIO;
nfsm_reply(0);
}
error = ENXIO;
nfsm_reply(0);
}
vp = ndp->ni_vp;
ndp->ni_vp = NULLVP;
VOP_ABORTOP(ndp);
vp = ndp->ni_vp;
ndp->ni_vp = NULLVP;
VOP_ABORTOP(ndp);
vap->va_size = 0;
if (error = VOP_SETATTR(vp, vap, cred))
nfsm_reply(0);
vap->va_size = 0;
if (error = VOP_SETATTR(vp, vap, cred))
nfsm_reply(0);
return (error);
nfsmout:
VOP_ABORTOP(ndp);
return (error);
nfsmout:
VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ if (ndp->ni_vp)
+ vput(ndp->ni_vp);
if (vp->v_flag & VTEXT)
xrele(vp); /* try once to free text */
out:
if (vp->v_flag & VTEXT)
xrele(vp); /* try once to free text */
out:
- if (error)
- VOP_ABORTOP(ndp);
- else
+ } else {
+ VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ vput(vp);
+ }
nfsm_reply(0);
nfsm_srvdone;
}
nfsm_reply(0);
nfsm_srvdone;
}
crhold(cred);
tond.ni_cred = cred;
tond.ni_nameiop = RENAME | LOCKPARENT | LOCKLEAF | NOCACHE;
crhold(cred);
tond.ni_cred = cred;
tond.ni_nameiop = RENAME | LOCKPARENT | LOCKLEAF | NOCACHE;
- error = nfs_namei(&tond, tfhp, len2, &md, &dpos);
+ if (error = nfs_namei(&tond, tfhp, len2, &md, &dpos)) {
+ VOP_ABORTOP(ndp);
+ vrele(ndp->ni_dvp);
+ vrele(fvp);
+ goto out1;
+ }
tdvp = tond.ni_dvp;
tvp = tond.ni_vp;
if (tvp != NULL) {
tdvp = tond.ni_dvp;
tvp = tond.ni_vp;
if (tvp != NULL) {
- if (error) {
- VOP_ABORTOP(ndp);
- goto out1;
- }
if (fvp->v_mount != tdvp->v_mount) {
error = EXDEV;
goto out;
if (fvp->v_mount != tdvp->v_mount) {
error = EXDEV;
goto out;
if (fvp == tdvp || fvp == tvp)
error = EINVAL;
out:
if (fvp == tdvp || fvp == tvp)
error = EINVAL;
out:
- if (error) {
- VOP_ABORTOP(&tond);
- VOP_ABORTOP(ndp);
- } else {
VREF(ndp->ni_cdir);
VREF(tond.ni_cdir);
error = VOP_RENAME(ndp, &tond);
vrele(ndp->ni_cdir);
vrele(tond.ni_cdir);
VREF(ndp->ni_cdir);
VREF(tond.ni_cdir);
error = VOP_RENAME(ndp, &tond);
vrele(ndp->ni_cdir);
vrele(tond.ni_cdir);
+ } else {
+ VOP_ABORTOP(&tond);
+ vput(tdvp);
+ if (tvp)
+ vput(tvp);
+ VOP_ABORTOP(ndp);
+ vrele(ndp->ni_dvp);
+ vrele(fvp);
return (error);
nfsmout:
VOP_ABORTOP(ndp);
return (error);
nfsmout:
VOP_ABORTOP(ndp);
+ vrele(ndp->ni_dvp);
+ vrele(fvp);
if (vp->v_mount != xp->v_mount)
error = EXDEV;
out:
if (vp->v_mount != xp->v_mount)
error = EXDEV;
out:
- if (error)
- VOP_ABORTOP(ndp);
- else
error = VOP_LINK(vp, ndp);
error = VOP_LINK(vp, ndp);
+ } else {
+ VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ if (ndp->ni_vp)
+ vrele(ndp->ni_vp);
+ }
out1:
vrele(vp);
nfsm_reply(0);
out1:
vrele(vp);
nfsm_reply(0);
int error = 0;
char *pathcp, *cp2;
struct mbuf *mb, *mreq;
int error = 0;
char *pathcp, *cp2;
struct mbuf *mb, *mreq;
nfsv2fh_t nfh;
fhandle_t *fhp;
long len, len2;
nfsv2fh_t nfh;
fhandle_t *fhp;
long len, len2;
ndp->ni_cred = cred;
ndp->ni_nameiop = CREATE | LOCKPARENT;
if (error = nfs_namei(ndp, fhp, len, &md, &dpos))
ndp->ni_cred = cred;
ndp->ni_nameiop = CREATE | LOCKPARENT;
if (error = nfs_namei(ndp, fhp, len, &md, &dpos))
nfsm_strsiz(len2, NFS_MAXPATHLEN);
MALLOC(pathcp, caddr_t, len2 + 1, M_TEMP, M_WAITOK);
iv.iov_base = pathcp;
nfsm_strsiz(len2, NFS_MAXPATHLEN);
MALLOC(pathcp, caddr_t, len2 + 1, M_TEMP, M_WAITOK);
iv.iov_base = pathcp;
io.uio_rw = UIO_READ;
nfsm_mtouio(&io, len2);
*(pathcp + len2) = '\0';
io.uio_rw = UIO_READ;
nfsm_mtouio(&io, len2);
*(pathcp + len2) = '\0';
- vp = ndp->ni_vp;
- if (vp) {
+ if (ndp->ni_vp) {
+ VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ vrele(ndp->ni_vp);
error = EEXIST;
goto out;
}
error = EEXIST;
goto out;
}
VATTR_NULL(vap);
vap->va_mode = 0777;
VATTR_NULL(vap);
vap->va_mode = 0777;
+ error = VOP_SYMLINK(ndp, vap, pathcp);
- if (error)
- VOP_ABORTOP(ndp);
- else
- error = VOP_SYMLINK(ndp, vap, pathcp);
-out1:
if (pathcp)
FREE(pathcp, M_TEMP);
nfsm_reply(0);
return (error);
nfsmout:
VOP_ABORTOP(ndp);
if (pathcp)
FREE(pathcp, M_TEMP);
nfsm_reply(0);
return (error);
nfsmout:
VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ if (ndp->ni_vp);
+ vrele(ndp->ni_vp);
if (pathcp)
FREE(pathcp, M_TEMP);
return (error);
if (pathcp)
FREE(pathcp, M_TEMP);
return (error);
vp = ndp->ni_vp;
if (vp != NULL) {
VOP_ABORTOP(ndp);
vp = ndp->ni_vp;
if (vp != NULL) {
VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ vrele(vp);
error = EEXIST;
nfsm_reply(0);
}
error = EEXIST;
nfsm_reply(0);
}
return (error);
nfsmout:
VOP_ABORTOP(ndp);
return (error);
nfsmout:
VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ if (ndp->ni_vp)
+ vrele(ndp->ni_vp);
if (vp->v_flag & VROOT)
error = EBUSY;
out:
if (vp->v_flag & VROOT)
error = EBUSY;
out:
- if (error)
- VOP_ABORTOP(ndp);
- else
+ } else {
+ VOP_ABORTOP(ndp);
+ vput(ndp->ni_dvp);
+ vput(vp);
+ }
nfsm_reply(0);
nfsm_srvdone;
}
nfsm_reply(0);
nfsm_srvdone;
}
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#)nfs_vnops.c 7.40 (Berkeley) %G%
+ * @(#)nfs_vnops.c 7.41 (Berkeley) %G%
#endif /* FIFO */
else {
VOP_ABORTOP(ndp);
#endif /* FIFO */
else {
VOP_ABORTOP(ndp);
return (EOPNOTSUPP);
}
nfsstats.rpccnt[NFSPROC_CREATE]++;
return (EOPNOTSUPP);
}
nfsstats.rpccnt[NFSPROC_CREATE]++;
cache_purge(tndp->ni_dvp);
cache_purge(sndp->ni_dvp);
}
cache_purge(tndp->ni_dvp);
cache_purge(sndp->ni_dvp);
}
- nfs_abortop(sndp);
- nfs_abortop(tndp);
+ VOP_ABORTOP(tndp);
+ vput(tndp->ni_dvp);
+ if (tndp->ni_vp)
+ vput(tndp->ni_vp);
+ VOP_ABORTOP(sndp);
+ vrele(sndp->ni_dvp);
+ vrele(sndp->ni_vp);
/*
* Kludge: Map ENOENT => 0 assuming that it is a reply to a retry.
*/
/*
* Kludge: Map ENOENT => 0 assuming that it is a reply to a retry.
*/
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#)ffs_vnops.c 7.41 (Berkeley) %G%
+ * @(#)ffs_vnops.c 7.42 (Berkeley) %G%
*/
if ((d->d_namlen == 1 && d->d_name[0] == '.') || dp == ip ||
fndp->ni_isdotdot || (ip->i_flag & IRENAME)) {
*/
if ((d->d_namlen == 1 && d->d_name[0] == '.') || dp == ip ||
fndp->ni_isdotdot || (ip->i_flag & IRENAME)) {
- IUNLOCK(ip);
- ufs_abortop(fndp);
- ufs_abortop(tndp);
+ VOP_ABORTOP(tndp);
+ vput(tndp->ni_dvp);
+ if (tndp->ni_vp)
+ vput(tndp->ni_vp);
+ VOP_ABORTOP(fndp);
+ vrele(fndp->ni_dvp);
+ vput(fndp->ni_vp);
return (EINVAL);
}
ip->i_flag |= IRENAME;
return (EINVAL);
}
ip->i_flag |= IRENAME;
/*
* Ufs abort op, called after namei() when a CREATE/DELETE isn't actually
/*
* Ufs abort op, called after namei() when a CREATE/DELETE isn't actually
- * done. Iff ni_vp/ni_dvp not null and locked, unlock.
+ * done. Nothing to do at the moment.
- register struct nameidata *ndp;
- if (ndp->ni_dvp) {
- if (VOP_ISLOCKED(ndp->ni_dvp))
- VOP_UNLOCK(ndp->ni_dvp);
- vrele(ndp->ni_dvp);
- }
- if (ndp->ni_vp) {
- if (VOP_ISLOCKED(ndp->ni_vp))
- VOP_UNLOCK(ndp->ni_vp);
- vrele(ndp->ni_vp);
- }
- return;
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#)ufs_vnops.c 7.41 (Berkeley) %G%
+ * @(#)ufs_vnops.c 7.42 (Berkeley) %G%
*/
if ((d->d_namlen == 1 && d->d_name[0] == '.') || dp == ip ||
fndp->ni_isdotdot || (ip->i_flag & IRENAME)) {
*/
if ((d->d_namlen == 1 && d->d_name[0] == '.') || dp == ip ||
fndp->ni_isdotdot || (ip->i_flag & IRENAME)) {
- IUNLOCK(ip);
- ufs_abortop(fndp);
- ufs_abortop(tndp);
+ VOP_ABORTOP(tndp);
+ vput(tndp->ni_dvp);
+ if (tndp->ni_vp)
+ vput(tndp->ni_vp);
+ VOP_ABORTOP(fndp);
+ vrele(fndp->ni_dvp);
+ vput(fndp->ni_vp);
return (EINVAL);
}
ip->i_flag |= IRENAME;
return (EINVAL);
}
ip->i_flag |= IRENAME;
/*
* Ufs abort op, called after namei() when a CREATE/DELETE isn't actually
/*
* Ufs abort op, called after namei() when a CREATE/DELETE isn't actually
- * done. Iff ni_vp/ni_dvp not null and locked, unlock.
+ * done. Nothing to do at the moment.
- register struct nameidata *ndp;
- if (ndp->ni_dvp) {
- if (VOP_ISLOCKED(ndp->ni_dvp))
- VOP_UNLOCK(ndp->ni_dvp);
- vrele(ndp->ni_dvp);
- }
- if (ndp->ni_vp) {
- if (VOP_ISLOCKED(ndp->ni_vp))
- VOP_UNLOCK(ndp->ni_vp);
- vrele(ndp->ni_vp);
- }
- return;
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#)lfs_vnops.c 7.41 (Berkeley) %G%
+ * @(#)lfs_vnops.c 7.42 (Berkeley) %G%
*/
if ((d->d_namlen == 1 && d->d_name[0] == '.') || dp == ip ||
fndp->ni_isdotdot || (ip->i_flag & IRENAME)) {
*/
if ((d->d_namlen == 1 && d->d_name[0] == '.') || dp == ip ||
fndp->ni_isdotdot || (ip->i_flag & IRENAME)) {
- IUNLOCK(ip);
- ufs_abortop(fndp);
- ufs_abortop(tndp);
+ VOP_ABORTOP(tndp);
+ vput(tndp->ni_dvp);
+ if (tndp->ni_vp)
+ vput(tndp->ni_vp);
+ VOP_ABORTOP(fndp);
+ vrele(fndp->ni_dvp);
+ vput(fndp->ni_vp);
return (EINVAL);
}
ip->i_flag |= IRENAME;
return (EINVAL);
}
ip->i_flag |= IRENAME;
/*
* Ufs abort op, called after namei() when a CREATE/DELETE isn't actually
/*
* Ufs abort op, called after namei() when a CREATE/DELETE isn't actually
- * done. Iff ni_vp/ni_dvp not null and locked, unlock.
+ * done. Nothing to do at the moment.
- register struct nameidata *ndp;
- if (ndp->ni_dvp) {
- if (VOP_ISLOCKED(ndp->ni_dvp))
- VOP_UNLOCK(ndp->ni_dvp);
- vrele(ndp->ni_dvp);
- }
- if (ndp->ni_vp) {
- if (VOP_ISLOCKED(ndp->ni_vp))
- VOP_UNLOCK(ndp->ni_vp);
- vrele(ndp->ni_vp);
- }
- return;
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#)ufs_vnops.c 7.41 (Berkeley) %G%
+ * @(#)ufs_vnops.c 7.42 (Berkeley) %G%
*/
if ((d->d_namlen == 1 && d->d_name[0] == '.') || dp == ip ||
fndp->ni_isdotdot || (ip->i_flag & IRENAME)) {
*/
if ((d->d_namlen == 1 && d->d_name[0] == '.') || dp == ip ||
fndp->ni_isdotdot || (ip->i_flag & IRENAME)) {
- IUNLOCK(ip);
- ufs_abortop(fndp);
- ufs_abortop(tndp);
+ VOP_ABORTOP(tndp);
+ vput(tndp->ni_dvp);
+ if (tndp->ni_vp)
+ vput(tndp->ni_vp);
+ VOP_ABORTOP(fndp);
+ vrele(fndp->ni_dvp);
+ vput(fndp->ni_vp);
return (EINVAL);
}
ip->i_flag |= IRENAME;
return (EINVAL);
}
ip->i_flag |= IRENAME;
/*
* Ufs abort op, called after namei() when a CREATE/DELETE isn't actually
/*
* Ufs abort op, called after namei() when a CREATE/DELETE isn't actually
- * done. Iff ni_vp/ni_dvp not null and locked, unlock.
+ * done. Nothing to do at the moment.
- register struct nameidata *ndp;
- if (ndp->ni_dvp) {
- if (VOP_ISLOCKED(ndp->ni_dvp))
- VOP_UNLOCK(ndp->ni_dvp);
- vrele(ndp->ni_dvp);
- }
- if (ndp->ni_vp) {
- if (VOP_ISLOCKED(ndp->ni_vp))
- VOP_UNLOCK(ndp->ni_vp);
- vrele(ndp->ni_vp);
- }
- return;