version 1.40, 2003/08/07 16:34:45 |
version 1.41, 2003/10/15 11:29:01 |
|
|
} */ *ap = v; |
} */ *ap = v; |
struct vnode *vp = ap->a_vp; |
struct vnode *vp = ap->a_vp; |
struct inode *ip = VTOI(vp); |
struct inode *ip = VTOI(vp); |
|
struct mount *mp; |
struct proc *p = ap->a_p; |
struct proc *p = ap->a_p; |
mode_t mode; |
mode_t mode; |
int error = 0; |
int error = 0; |
|
|
softdep_releasefile(ip); |
softdep_releasefile(ip); |
|
|
if (ip->i_nlink <= 0 && (vp->v_mount->mnt_flag & MNT_RDONLY) == 0) { |
if (ip->i_nlink <= 0 && (vp->v_mount->mnt_flag & MNT_RDONLY) == 0) { |
|
error = vn_start_write(vp, &mp, V_WAIT | V_LOWER); |
|
if (error) |
|
return (error); |
#ifdef QUOTA |
#ifdef QUOTA |
if (!getinoquota(ip)) |
if (!getinoquota(ip)) |
(void)chkiq(ip, -1, NOCRED, 0); |
(void)chkiq(ip, -1, NOCRED, 0); |
|
|
if (DOINGSOFTDEP(vp)) |
if (DOINGSOFTDEP(vp)) |
softdep_change_linkcnt(ip); |
softdep_change_linkcnt(ip); |
VOP_VFREE(vp, ip->i_number, mode); |
VOP_VFREE(vp, ip->i_number, mode); |
|
vn_finished_write(mp, V_LOWER); |
} |
} |
|
|
if (ip->i_flag & (IN_ACCESS | IN_CHANGE | IN_UPDATE | IN_MODIFIED | IN_ACCESSED)) |
if (ip->i_flag & |
|
(IN_ACCESS | IN_CHANGE | IN_UPDATE | IN_MODIFIED | IN_ACCESSED)) { |
|
error = vn_start_write(vp, &mp, V_WAIT | V_LOWER); |
|
if (error) |
|
return (error); |
VOP_UPDATE(vp, NULL, NULL, 0); |
VOP_UPDATE(vp, NULL, NULL, 0); |
|
vn_finished_write(mp, V_LOWER); |
|
} |
out: |
out: |
VOP_UNLOCK(vp, 0); |
VOP_UNLOCK(vp, 0); |
/* |
/* |