projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
VOP_ABORTOP is no longer responsible for unlocking and vreleing vnodes
[unix-history]
/
usr
/
src
/
sys
/
ufs
/
ffs
/
ffs_vnops.c
diff --git
a/usr/src/sys/ufs/ffs/ffs_vnops.c
b/usr/src/sys/ufs/ffs/ffs_vnops.c
index
9c9015f
..
2f83032
100644
(file)
--- a/
usr/src/sys/ufs/ffs/ffs_vnops.c
+++ b/
usr/src/sys/ufs/ffs/ffs_vnops.c
@@
-14,7
+14,7
@@
* 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.
39
(Berkeley) %G%
+ * @(#)ffs_vnops.c 7.
42
(Berkeley) %G%
*/
#include "param.h"
*/
#include "param.h"
@@
-552,7
+552,7
@@
chown1(vp, uid, gid, cred)
}
if ((error = chkdq(ip, change, cred, CHOWN)) == 0) {
if ((error = chkiq(ip, 1, cred, CHOWN)) == 0)
}
if ((error = chkdq(ip, change, cred, CHOWN)) == 0) {
if ((error = chkiq(ip, 1, cred, CHOWN)) == 0)
-
return (0)
;
+
goto good
;
else
(void) chkdq(ip, -change, cred, CHOWN|FORCE);
}
else
(void) chkdq(ip, -change, cred, CHOWN|FORCE);
}
@@
-572,12
+572,15
@@
chown1(vp, uid, gid, cred)
dqrele(vp, ip->i_dquot[GRPQUOTA]);
ip->i_dquot[GRPQUOTA] = NODQUOT;
}
dqrele(vp, ip->i_dquot[GRPQUOTA]);
ip->i_dquot[GRPQUOTA] = NODQUOT;
}
- (void) chkdq(ip, change, cred, FORCE);
- (void) chkiq(ip, 1, cred, FORCE);
+ (void) chkdq(ip, change, cred, FORCE|CHOWN);
+ (void) chkiq(ip, 1, cred, FORCE|CHOWN);
+ (void) getinoquota(ip);
}
}
- if (error)
- return (error);
-#endif
+ return (error);
+good:
+ if (getinoquota(ip))
+ panic("chown: lost quota");
+#endif /* QUOTA */
if (ouid != uid || ogid != gid)
ip->i_flag |= ICHG;
if (ouid != uid && cred->cr_uid != 0)
if (ouid != uid || ogid != gid)
ip->i_flag |= ICHG;
if (ouid != uid && cred->cr_uid != 0)
@@
-909,9
+912,13
@@
ufs_rename(fndp, tndp)
*/
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;
@@
-1383,23
+1390,14
@@
ufs_readlink(vp, uiop, cred)
/*
* 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
.
*/
*/
+/* ARGSUSED */
ufs_abortop(ndp)
ufs_abortop(ndp)
-
register
struct nameidata *ndp;
+ 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;
+ return (0);
}
/*
}
/*