Changeset View
Changeset View
Standalone View
Standalone View
sys/ufs/ufs/ufs_inode.c
Show First 20 Lines • Show All 160 Lines • ▼ Show 20 Lines | if (vn_start_secondary_write(vp, &mp, V_NOWAIT) != 0) { | ||||
} | } | ||||
} | } | ||||
} | } | ||||
isize = ip->i_size; | isize = ip->i_size; | ||||
if (I_IS_UFS2(ip)) | if (I_IS_UFS2(ip)) | ||||
isize += ip->i_din2->di_extsize; | isize += ip->i_din2->di_extsize; | ||||
if (ip->i_effnlink <= 0 && isize && !UFS_RDONLY(ip)) | if (ip->i_effnlink <= 0 && isize && !UFS_RDONLY(ip)) | ||||
error = UFS_TRUNCATE(vp, (off_t)0, IO_EXT | IO_NORMAL, NOCRED); | error = UFS_TRUNCATE(vp, (off_t)0, IO_EXT | IO_NORMAL, NOCRED); | ||||
if (ip->i_nlink <= 0 && ip->i_mode && !UFS_RDONLY(ip)) { | if (ip->i_nlink <= 0 && ip->i_mode != 0 && !UFS_RDONLY(ip) && | ||||
(vp->v_iflag & VI_OWEINACT) == 0) { | |||||
#ifdef QUOTA | #ifdef QUOTA | ||||
if (!getinoquota(ip)) | if (!getinoquota(ip)) | ||||
(void)chkiq(ip, -1, NOCRED, FORCE); | (void)chkiq(ip, -1, NOCRED, FORCE); | ||||
#endif | #endif | ||||
#ifdef UFS_EXTATTR | #ifdef UFS_EXTATTR | ||||
ufs_extattr_vnode_inactive(vp); | ufs_extattr_vnode_inactive(vp); | ||||
#endif | #endif | ||||
/* | /* | ||||
Show All 24 Lines | if ((ip->i_flag & (IN_CHANGE | IN_UPDATE | IN_MODIFIED)) == 0 && | ||||
UFS_UPDATE(vp, 0); | UFS_UPDATE(vp, 0); | ||||
} | } | ||||
} | } | ||||
out: | out: | ||||
/* | /* | ||||
* If we are done with the inode, reclaim it | * If we are done with the inode, reclaim it | ||||
* so that it can be reused immediately. | * so that it can be reused immediately. | ||||
*/ | */ | ||||
if (ip->i_mode == 0) | if (ip->i_mode == 0 && (vp->v_iflag & VI_OWEINACT) == 0) | ||||
vrecycle(vp); | vrecycle(vp); | ||||
if (mp != NULL) | if (mp != NULL) | ||||
vn_finished_secondary_write(mp); | vn_finished_secondary_write(mp); | ||||
if (error == ERELOOKUP) | |||||
error = 0; | |||||
return (error); | return (error); | ||||
} | } | ||||
/* | /* | ||||
* Reclaim an inode so that it can be used for other purposes. | * Reclaim an inode so that it can be used for other purposes. | ||||
*/ | */ | ||||
int | int | ||||
ufs_reclaim(ap) | ufs_reclaim(ap) | ||||
Show All 39 Lines |