ufs: add a setter for inode i_flag field

This will be used later to add vnodes to the lazy list.

Reviewed by:	kib (previous version), jeff
Tested by:	pho (in a larger patch)
Differential Revision:	https://reviews.freebsd.org/D22994
This commit is contained in:
Mateusz Guzik 2020-01-13 02:31:51 +00:00
parent 365cd52245
commit ac4ec14188
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=356669
12 changed files with 103 additions and 96 deletions

View File

@ -202,9 +202,9 @@ ffs_alloc(ip, lbn, bpref, size, flags, cred, bnp)
delta = btodb(size);
DIP_SET(ip, i_blocks, DIP(ip, i_blocks) + delta);
if (flags & IO_EXT)
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
else
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
*bnp = bno;
return (0);
}
@ -329,9 +329,9 @@ ffs_realloccg(ip, lbprev, bprev, bpref, osize, nsize, flags, cred, bpp)
delta = btodb(nsize - osize);
DIP_SET(ip, i_blocks, DIP(ip, i_blocks) + delta);
if (flags & IO_EXT)
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
else
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
allocbuf(bp, nsize);
bp->b_flags |= B_DONE;
vfs_bio_bzero_buf(bp, osize, nsize - osize);
@ -413,9 +413,9 @@ ffs_realloccg(ip, lbprev, bprev, bpref, osize, nsize, flags, cred, bpp)
delta = btodb(nsize - osize);
DIP_SET(ip, i_blocks, DIP(ip, i_blocks) + delta);
if (flags & IO_EXT)
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
else
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
allocbuf(bp, nsize);
bp->b_flags |= B_DONE;
vfs_bio_bzero_buf(bp, osize, nsize - osize);
@ -743,7 +743,7 @@ ffs_reallocblks_ufs1(ap)
else
bwrite(sbp);
} else {
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
if (!doasyncfree)
ffs_update(vp, 1);
}
@ -1007,7 +1007,7 @@ ffs_reallocblks_ufs2(ap)
else
bwrite(sbp);
} else {
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
if (!doasyncfree)
ffs_update(vp, 1);
}
@ -1150,7 +1150,7 @@ ffs_valloc(pvp, mode, cred, vpp)
ip = VTOI(*vpp);
if (ip->i_mode)
goto dup_alloc;
ip->i_flag |= IN_MODIFIED;
UFS_INODE_SET_FLAG(ip, IN_MODIFIED);
vput(*vpp);
}
return (error);
@ -1185,7 +1185,7 @@ ffs_valloc(pvp, mode, cred, vpp)
(*vpp)->v_type = VNON;
if (fs->fs_magic == FS_UFS2_MAGIC) {
(*vpp)->v_op = &ffs_vnodeops2;
ip->i_flag |= IN_UFS2;
UFS_INODE_SET_FLAG(ip, IN_UFS2);
} else {
(*vpp)->v_op = &ffs_vnodeops1;
}
@ -3238,7 +3238,7 @@ sysctl_ffs_fsck(SYSCTL_HANDLER_ARGS)
ip->i_nlink += cmd.size;
DIP_SET(ip, i_nlink, ip->i_nlink);
ip->i_effnlink += cmd.size;
ip->i_flag |= IN_CHANGE | IN_MODIFIED;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_MODIFIED);
error = ffs_update(vp, 1);
if (DOINGSOFTDEP(vp))
softdep_change_linkcnt(ip);
@ -3257,7 +3257,7 @@ sysctl_ffs_fsck(SYSCTL_HANDLER_ARGS)
break;
ip = VTOI(vp);
DIP_SET(ip, i_blocks, DIP(ip, i_blocks) + cmd.size);
ip->i_flag |= IN_CHANGE | IN_MODIFIED;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_MODIFIED);
error = ffs_update(vp, 1);
vput(vp);
break;
@ -3274,7 +3274,7 @@ sysctl_ffs_fsck(SYSCTL_HANDLER_ARGS)
break;
ip = VTOI(vp);
DIP_SET(ip, i_size, cmd.size);
ip->i_flag |= IN_CHANGE | IN_MODIFIED;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_MODIFIED);
error = ffs_update(vp, 1);
vput(vp);
break;
@ -3494,7 +3494,7 @@ sysctl_ffs_fsck(SYSCTL_HANDLER_ARGS)
vput(vp);
break;
}
ip->i_flag |= IN_CHANGE | IN_MODIFIED;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_MODIFIED);
error = ffs_update(vp, 1);
vput(vp);
break;

View File

@ -154,7 +154,7 @@ ffs_balloc_ufs1(struct vnode *vp, off_t startoffset, int size,
ip->i_size = smalllblktosize(fs, nb + 1);
dp->di_size = ip->i_size;
dp->di_db[nb] = dbtofsb(fs, bp->b_blkno);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
if (flags & IO_SYNC)
bwrite(bp);
else if (DOINGASYNC(vp))
@ -224,7 +224,7 @@ ffs_balloc_ufs1(struct vnode *vp, off_t startoffset, int size,
nsize, 0, bp);
}
dp->di_db[lbn] = dbtofsb(fs, bp->b_blkno);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
*bpp = bp;
return (0);
}
@ -280,7 +280,7 @@ ffs_balloc_ufs1(struct vnode *vp, off_t startoffset, int size,
}
allocib = &dp->di_ib[indirs[0].in_off];
*allocib = nb;
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
}
/*
* Fetch through the indirect blocks, allocating as necessary.
@ -542,7 +542,7 @@ ffs_balloc_ufs1(struct vnode *vp, off_t startoffset, int size,
(void) chkdq(ip, -btodb(deallocated), cred, FORCE);
#endif
dp->di_blocks -= btodb(deallocated);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
}
(void) ffs_syncvnode(vp, MNT_WAIT, 0);
/*
@ -645,7 +645,7 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size,
dp->di_extsize = smalllblktosize(fs, nb + 1);
dp->di_extb[nb] = dbtofsb(fs, bp->b_blkno);
bp->b_xflags |= BX_ALTDATA;
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
if (flags & IO_SYNC)
bwrite(bp);
else
@ -719,7 +719,7 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size,
nsize, 0, bp);
}
dp->di_extb[lbn] = dbtofsb(fs, bp->b_blkno);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
*bpp = bp;
return (0);
}
@ -748,7 +748,7 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size,
ip->i_size = smalllblktosize(fs, nb + 1);
dp->di_size = ip->i_size;
dp->di_db[nb] = dbtofsb(fs, bp->b_blkno);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
if (flags & IO_SYNC)
bwrite(bp);
else
@ -818,7 +818,7 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size,
nsize, 0, bp);
}
dp->di_db[lbn] = dbtofsb(fs, bp->b_blkno);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
*bpp = bp;
return (0);
}
@ -875,7 +875,7 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size,
}
allocib = &dp->di_ib[indirs[0].in_off];
*allocib = nb;
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
}
/*
* Fetch through the indirect blocks, allocating as necessary.
@ -1144,7 +1144,7 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, int size,
(void) chkdq(ip, -btodb(deallocated), cred, FORCE);
#endif
dp->di_blocks -= btodb(deallocated);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
}
(void) ffs_syncvnode(vp, MNT_WAIT, 0);
/*

View File

@ -275,7 +275,7 @@ ffs_truncate(vp, length, flags, cred)
oldblks[i] = ip->i_din2->di_extb[i];
ip->i_din2->di_extb[i] = 0;
}
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
if ((error = ffs_update(vp, waitforupdate)))
return (error);
for (i = 0; i < UFS_NXADDR; i++) {
@ -299,13 +299,13 @@ ffs_truncate(vp, length, flags, cred)
bzero(SHORTLINK(ip), (u_int)ip->i_size);
ip->i_size = 0;
DIP_SET(ip, i_size, 0);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
if (needextclean)
goto extclean;
return (ffs_update(vp, waitforupdate));
}
if (ip->i_size == length) {
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
if (needextclean)
goto extclean;
return (ffs_update(vp, 0));
@ -339,7 +339,7 @@ ffs_truncate(vp, length, flags, cred)
bdwrite(bp);
else
bawrite(bp);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
return (ffs_update(vp, waitforupdate));
}
/*
@ -405,7 +405,7 @@ ffs_truncate(vp, length, flags, cred)
softdep_setup_freeblocks(ip, length, flags);
ASSERT_VOP_LOCKED(vp, "ffs_truncate1");
if (journaltrunc == 0) {
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
error = ffs_update(vp, 0);
}
return (error);
@ -489,7 +489,7 @@ ffs_truncate(vp, length, flags, cred)
if (i > lastblock)
DIP_SET(ip, i_db[i], 0);
}
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
allerror = ffs_update(vp, waitforupdate);
/*
@ -619,7 +619,7 @@ ffs_truncate(vp, length, flags, cred)
DIP_SET(ip, i_blocks, DIP(ip, i_blocks) - blocksreleased);
else /* sanity */
DIP_SET(ip, i_blocks, 0);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
#ifdef QUOTA
(void) chkdq(ip, -blocksreleased, NOCRED, FORCE);
#endif

View File

@ -319,7 +319,7 @@ ffs_snapshot(mp, snapfile)
goto out;
ip->i_size = lblktosize(fs, (off_t)numblks);
DIP_SET(ip, i_size, ip->i_size);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
error = readblock(vp, bp, numblks - 1);
bawrite(bp);
if (error != 0)
@ -401,7 +401,7 @@ ffs_snapshot(mp, snapfile)
*/
ip->i_flags |= SF_SNAPSHOT;
DIP_SET(ip, i_flags, ip->i_flags);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
/*
* Ensure that the snapshot is completely on disk.
* Since we have marked it as a snapshot it is safe to
@ -1215,7 +1215,7 @@ snapacct_ufs1(vp, oldblkp, lastblkp, fs, lblkno, expungetype)
lbn = fragstoblks(fs, blkno);
if (lbn < UFS_NDADDR) {
blkp = &ip->i_din1->di_db[lbn];
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
} else {
error = ffs_balloc_ufs1(vp, lblktosize(fs, (off_t)lbn),
fs->fs_bsize, KERNCRED, BA_METAONLY, &ibp);
@ -1501,7 +1501,7 @@ snapacct_ufs2(vp, oldblkp, lastblkp, fs, lblkno, expungetype)
lbn = fragstoblks(fs, blkno);
if (lbn < UFS_NDADDR) {
blkp = &ip->i_din2->di_db[lbn];
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
} else {
error = ffs_balloc_ufs2(vp, lblktosize(fs, (off_t)lbn),
fs->fs_bsize, KERNCRED, BA_METAONLY, &ibp);
@ -1724,7 +1724,7 @@ ffs_snapremove(vp)
*/
ip->i_flags &= ~SF_SNAPSHOT;
DIP_SET(ip, i_flags, ip->i_flags);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
/*
* The dirtied indirects must be written out before
* softdep_setup_freeblocks() is called. Otherwise indir_trunc()
@ -1830,7 +1830,7 @@ ffs_snapblkfree(fs, devvp, bno, size, inum, vtype, wkhd)
panic("snapblkfree: inconsistent block type");
if (lbn < UFS_NDADDR) {
DIP_SET(ip, i_db[lbn], BLK_NOCOPY);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
} else if (I_IS_UFS1(ip)) {
((ufs1_daddr_t *)(ibp->b_data))[indiroff] =
BLK_NOCOPY;
@ -1887,7 +1887,7 @@ ffs_snapblkfree(fs, devvp, bno, size, inum, vtype, wkhd)
bdwrite(ibp);
}
DIP_SET(ip, i_blocks, DIP(ip, i_blocks) + btodb(size));
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
lockmgr(vp->v_vnlock, LK_RELEASE, NULL);
return (1);
}
@ -2580,7 +2580,7 @@ process_deferred_inactive(struct mount *mp)
ip = VTOI(vp);
if ((ip->i_flag & IN_LAZYACCESS) != 0) {
ip->i_flag &= ~IN_LAZYACCESS;
ip->i_flag |= IN_MODIFIED;
UFS_INODE_SET_FLAG(ip, IN_MODIFIED);
}
VI_LOCK(vp);
if ((vp->v_iflag & VI_OWEINACT) == 0 || vp->v_usecount > 0) {

View File

@ -6656,7 +6656,7 @@ softdep_journal_freeblocks(ip, cred, length, flags)
* journaling.
*/
if (length != 0 && lastlbn >= UFS_NDADDR) {
ip->i_flag |= IN_TRUNCATED;
UFS_INODE_SET_FLAG(ip, IN_TRUNCATED);
newjtrunc(freeblks, length, 0);
}
ip->i_size = length;
@ -6780,7 +6780,7 @@ softdep_journal_freeblocks(ip, cred, length, flags)
}
ip->i_size = length;
DIP_SET(ip, i_size, length);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
allocbuf(bp, frags);
ffs_update(vp, 0);
bawrite(bp);
@ -7647,7 +7647,7 @@ softdep_freefile(pvp, ino, mode)
WORKLIST_INSERT(&inodedep->id_inowait, &freefile->fx_list);
FREE_LOCK(ump);
if (ip->i_number == ino)
ip->i_flag |= IN_MODIFIED;
UFS_INODE_SET_FLAG(ip, IN_MODIFIED);
}
/*
@ -8056,7 +8056,7 @@ handle_complete_freeblocks(freeblks, flags)
vgone(vp);
} else if (DIP(ip, i_modrev) == freeblks->fb_modrev) {
DIP_SET(ip, i_blocks, DIP(ip, i_blocks) - spare);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
/*
* We must wait so this happens before the
* journal is reclaimed.
@ -9873,7 +9873,7 @@ handle_workitem_remove(dirrem, flags)
"%ju negative i_nlink %d", (intmax_t)ip->i_number,
ip->i_nlink));
DIP_SET(ip, i_nlink, ip->i_nlink);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
if (ip->i_nlink < ip->i_effnlink)
panic("handle_workitem_remove: bad file delta");
if (ip->i_nlink == 0)
@ -9896,7 +9896,7 @@ handle_workitem_remove(dirrem, flags)
KASSERT(ip->i_nlink >= 0, ("handle_workitem_remove: directory ino "
"%ju negative i_nlink %d", (intmax_t)ip->i_number, ip->i_nlink));
DIP_SET(ip, i_nlink, ip->i_nlink);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
if (ip->i_nlink < ip->i_effnlink)
panic("handle_workitem_remove: bad dir delta");
if (ip->i_nlink == 0)
@ -9938,7 +9938,7 @@ handle_workitem_remove(dirrem, flags)
}
WORKLIST_INSERT(&inodedep->id_inowait, &dirrem->dm_list);
FREE_LOCK(ump);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
out:
ffs_update(vp, 0);
vput(vp);

View File

@ -1816,7 +1816,7 @@ ffs_vgetf(mp, ino, flags, vpp, ffs_flags)
while (ip->i_gen == 0)
ip->i_gen = arc4random();
if ((vp->v_mount->mnt_flag & MNT_RDONLY) == 0) {
ip->i_flag |= IN_MODIFIED;
UFS_INODE_SET_FLAG(ip, IN_MODIFIED);
DIP_SET(ip, i_gen, ip->i_gen);
}
}

View File

@ -668,7 +668,7 @@ ffs_read(ap)
(vp->v_mount->mnt_flag & (MNT_NOATIME | MNT_RDONLY)) == 0 &&
(ip->i_flag & IN_ACCESS) == 0) {
VI_LOCK(vp);
ip->i_flag |= IN_ACCESS;
UFS_INODE_SET_FLAG(ip, IN_ACCESS);
VI_UNLOCK(vp);
}
return (error);
@ -853,7 +853,7 @@ ffs_write(ap)
}
if (error || xfersize == 0)
break;
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
}
/*
* If we successfully wrote any data, and we are not the superuser
@ -1096,7 +1096,7 @@ ffs_extwrite(struct vnode *vp, struct uio *uio, int ioflag, struct ucred *ucred)
bdwrite(bp);
if (error || xfersize == 0)
break;
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
}
/*
* If we successfully wrote any data, and we are not the superuser
@ -1203,11 +1203,11 @@ ffs_lock_ea(struct vnode *vp)
ip = VTOI(vp);
VI_LOCK(vp);
while (ip->i_flag & IN_EA_LOCKED) {
ip->i_flag |= IN_EA_LOCKWAIT;
UFS_INODE_SET_FLAG(ip, IN_EA_LOCKWAIT);
msleep(&ip->i_ea_refs, &vp->v_interlock, PINOD + 2, "ufs_ea",
0);
}
ip->i_flag |= IN_EA_LOCKED;
UFS_INODE_SET_FLAG(ip, IN_EA_LOCKED);
VI_UNLOCK(vp);
}

View File

@ -138,6 +138,13 @@ struct inode {
"\14b12\13is_ufs2\12truncated\11ea_lockwait\10ea_locked" \
"\7lazyaccess\6lazymod\5needsync\4modified\3update\2change\1access"
#define UFS_INODE_SET_FLAG(ip, flags) do { \
struct inode *_ip = (ip); \
int _flags = (flags); \
\
_ip->i_flag |= _flags; \
} while (0)
#define i_dirhash i_un.dirhash
#define i_snapblklist i_un.snapblklist
#define i_din1 dinode_u.din1

View File

@ -421,7 +421,7 @@ ufs_setacl_nfs4_internal(struct vnode *vp, struct acl *aclp, struct thread *td)
ip->i_mode &= ACL_PRESERVE_MASK;
ip->i_mode |= mode;
DIP_SET(ip, i_mode, ip->i_mode);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
VN_KNOTE_UNLOCKED(vp, NOTE_ATTRIB);
@ -594,7 +594,7 @@ ufs_setacl_posix1e(struct vop_setacl_args *ap)
* inode and mark it as changed.
*/
ufs_sync_inode_from_acl(ap->a_aclp, ip);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
error = UFS_UPDATE(ap->a_vp, 0);
}

View File

@ -183,7 +183,7 @@ ufs_inactive(ap)
mode = ip->i_mode;
ip->i_mode = 0;
DIP_SET(ip, i_mode, 0);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
if (DOINGSOFTDEP(vp))
softdep_change_linkcnt(ip);
UFS_VFREE(vp, ip->i_number, mode);
@ -241,7 +241,7 @@ ufs_reclaim(ap)
#endif
if (ip->i_flag & IN_LAZYMOD)
ip->i_flag |= IN_MODIFIED;
UFS_INODE_SET_FLAG(ip, IN_MODIFIED);
UFS_UPDATE(vp, 0);
/*
* Remove the inode from its hash chain.

View File

@ -556,7 +556,7 @@ ufs_lookup_ino(struct vnode *vdp, struct vnode **vpp, struct componentname *cnp,
ufs_dirbad(dp, i_offset, "i_size too small");
dp->i_size = i_offset + DIRSIZ(OFSFMT(vdp), ep);
DIP_SET(dp, i_size, dp->i_size);
dp->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(dp, IN_CHANGE | IN_UPDATE);
}
brelse(bp);
@ -918,7 +918,7 @@ ufs_direnter(dvp, tvp, dirp, cnp, newdirbp, isrename)
dp->i_size = dp->i_offset + DIRBLKSIZ;
DIP_SET(dp, i_size, dp->i_size);
dp->i_endoff = dp->i_size;
dp->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(dp, IN_CHANGE | IN_UPDATE);
dirp->d_reclen = DIRBLKSIZ;
blkoff = dp->i_offset &
(VFSTOUFS(dvp->v_mount)->um_mountp->mnt_stat.f_iosize - 1);
@ -946,7 +946,7 @@ ufs_direnter(dvp, tvp, dirp, cnp, newdirbp, isrename)
}
if (softdep_setup_directory_add(bp, dp, dp->i_offset,
dirp->d_ino, newdirbp, 1))
dp->i_flag |= IN_NEEDSYNC;
UFS_INODE_SET_FLAG(dp, IN_NEEDSYNC);
if (newdirbp)
bdwrite(newdirbp);
bdwrite(bp);
@ -1118,7 +1118,7 @@ ufs_direnter(dvp, tvp, dirp, cnp, newdirbp, isrename)
error = bwrite(bp);
}
}
dp->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(dp, IN_CHANGE | IN_UPDATE);
/*
* If all went well, and the directory can be shortened, proceed
* with the truncation. Note that we have to unlock the inode for
@ -1179,13 +1179,13 @@ ufs_dirremove(dvp, ip, flags, isrmdir)
*/
if (ip) {
ip->i_effnlink--;
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
if (DOINGSOFTDEP(dvp)) {
softdep_setup_unlink(dp, ip);
} else {
ip->i_nlink--;
DIP_SET(ip, i_nlink, ip->i_nlink);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
}
}
if (flags & DOWHITEOUT)
@ -1195,13 +1195,13 @@ ufs_dirremove(dvp, ip, flags, isrmdir)
if ((error = UFS_BLKATOFF(dvp, offset, (char **)&ep, &bp)) != 0) {
if (ip) {
ip->i_effnlink++;
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
if (DOINGSOFTDEP(dvp)) {
softdep_change_linkcnt(ip);
} else {
ip->i_nlink++;
DIP_SET(ip, i_nlink, ip->i_nlink);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
}
}
return (error);
@ -1269,7 +1269,7 @@ ufs_dirremove(dvp, ip, flags, isrmdir)
else
error = bwrite(bp);
}
dp->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(dp, IN_CHANGE | IN_UPDATE);
/*
* If the last named reference to a snapshot goes away,
* drop its snapshot reference so that it will be reclaimed
@ -1303,13 +1303,13 @@ ufs_dirrewrite(dp, oip, newinum, newtype, isrmdir)
* necessary.
*/
oip->i_effnlink--;
oip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(oip, IN_CHANGE);
if (DOINGSOFTDEP(vdp)) {
softdep_setup_unlink(dp, oip);
} else {
oip->i_nlink--;
DIP_SET(oip, i_nlink, oip->i_nlink);
oip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(oip, IN_CHANGE);
}
error = UFS_BLKATOFF(vdp, (off_t)dp->i_offset, (char **)&ep, &bp);
@ -1320,13 +1320,13 @@ ufs_dirrewrite(dp, oip, newinum, newtype, isrmdir)
}
if (error) {
oip->i_effnlink++;
oip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(oip, IN_CHANGE);
if (DOINGSOFTDEP(vdp)) {
softdep_change_linkcnt(oip);
} else {
oip->i_nlink++;
DIP_SET(oip, i_nlink, oip->i_nlink);
oip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(oip, IN_CHANGE);
}
return (error);
}
@ -1344,7 +1344,7 @@ ufs_dirrewrite(dp, oip, newinum, newtype, isrmdir)
error = bwrite(bp);
}
}
dp->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(dp, IN_CHANGE | IN_UPDATE);
/*
* If the last named reference to a snapshot goes away,
* drop its snapshot reference so that it will be reclaimed

View File

@ -154,13 +154,13 @@ ufs_itimes_locked(struct vnode *vp)
return;
if ((vp->v_type == VBLK || vp->v_type == VCHR) && !DOINGSOFTDEP(vp))
ip->i_flag |= IN_LAZYMOD;
UFS_INODE_SET_FLAG(ip, IN_LAZYMOD);
else if (((vp->v_mount->mnt_kern_flag &
(MNTK_SUSPENDED | MNTK_SUSPEND)) == 0) ||
(ip->i_flag & (IN_CHANGE | IN_UPDATE)))
ip->i_flag |= IN_MODIFIED;
UFS_INODE_SET_FLAG(ip, IN_MODIFIED);
else if (ip->i_flag & IN_ACCESS)
ip->i_flag |= IN_LAZYACCESS;
UFS_INODE_SET_FLAG(ip, IN_LAZYACCESS);
vfs_timestamp(&ts);
if (ip->i_flag & IN_ACCESS) {
DIP_SET(ip, i_atime, ts.tv_sec);
@ -237,7 +237,7 @@ ufs_mknod(ap)
if (error)
return (error);
ip = VTOI(*vpp);
ip->i_flag |= IN_ACCESS | IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_ACCESS | IN_CHANGE | IN_UPDATE);
if (vap->va_rdev != VNOVAL) {
/*
* Want to be able to use this to make badblock
@ -550,7 +550,7 @@ ufs_setattr(ap)
}
ip->i_flags = vap->va_flags;
DIP_SET(ip, i_flags, vap->va_flags);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
error = UFS_UPDATE(vp, 0);
if (ip->i_flags & (IMMUTABLE | APPEND))
return (error);
@ -619,7 +619,7 @@ ufs_setattr(ap)
error = vn_utimes_perm(vp, vap, cred, td);
if (error != 0)
return (error);
ip->i_flag |= IN_CHANGE | IN_MODIFIED;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_MODIFIED);
if (vap->va_atime.tv_sec != VNOVAL) {
ip->i_flag &= ~IN_ACCESS;
DIP_SET(ip, i_atime, vap->va_atime.tv_sec);
@ -690,7 +690,7 @@ ufs_markatime(ap)
struct inode *ip = VTOI(vp);
VI_LOCK(vp);
ip->i_flag |= IN_ACCESS;
UFS_INODE_SET_FLAG(ip, IN_ACCESS);
VI_UNLOCK(vp);
/*
* XXXKIB No UFS_UPDATE(ap->a_vp, 0) there.
@ -746,7 +746,7 @@ ufs_chmod(vp, mode, cred, td)
ip->i_mode &= ~ALLPERMS;
ip->i_mode |= (mode & ALLPERMS);
DIP_SET(ip, i_mode, ip->i_mode);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
#ifdef UFS_ACL
if ((vp->v_mount->mnt_flag & MNT_NFS4ACLS) != 0)
error = ufs_update_nfs4_acl_after_mode_change(vp, mode, ip->i_uid, cred, td);
@ -865,7 +865,7 @@ ufs_chown(vp, uid, gid, cred, td)
if (getinoquota(ip))
panic("ufs_chown: lost quota");
#endif /* QUOTA */
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
if ((ip->i_mode & (ISUID | ISGID)) && (ouid != uid || ogid != gid)) {
if (priv_check_cred(cred, PRIV_VFS_RETAINSUGID)) {
ip->i_mode &= ~(ISUID | ISGID);
@ -979,7 +979,7 @@ ufs_link(ap)
ip->i_effnlink++;
ip->i_nlink++;
DIP_SET(ip, i_nlink, ip->i_nlink);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
if (DOINGSOFTDEP(vp))
softdep_setup_link(VTOI(tdvp), ip);
error = UFS_UPDATE(vp, !DOINGSOFTDEP(vp) && !DOINGASYNC(vp));
@ -992,7 +992,7 @@ ufs_link(ap)
ip->i_effnlink--;
ip->i_nlink--;
DIP_SET(ip, i_nlink, ip->i_nlink);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
if (DOINGSOFTDEP(vp))
softdep_revert_link(VTOI(tdvp), ip);
}
@ -1323,7 +1323,7 @@ ufs_rename(ap)
fip->i_effnlink++;
fip->i_nlink++;
DIP_SET(fip, i_nlink, fip->i_nlink);
fip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(fip, IN_CHANGE);
if (DOINGSOFTDEP(fvp))
softdep_setup_link(tdp, fip);
error = UFS_UPDATE(fvp, !DOINGSOFTDEP(fvp) && !DOINGASYNC(fvp));
@ -1441,11 +1441,11 @@ ufs_rename(ap)
if (!newparent) {
tdp->i_nlink--;
DIP_SET(tdp, i_nlink, tdp->i_nlink);
tdp->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(tdp, IN_CHANGE);
}
tip->i_nlink--;
DIP_SET(tip, i_nlink, tip->i_nlink);
tip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(tip, IN_CHANGE);
}
}
@ -1476,7 +1476,7 @@ ufs_rename(ap)
tdp->i_effnlink++;
tdp->i_nlink++;
DIP_SET(tdp, i_nlink, tdp->i_nlink);
tdp->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(tdp, IN_CHANGE);
if (DOINGSOFTDEP(tdvp))
softdep_setup_dotdot_link(tdp, fip);
error = UFS_UPDATE(tdvp, !DOINGSOFTDEP(tdvp) &&
@ -1546,7 +1546,7 @@ ufs_rename(ap)
fip->i_effnlink--;
fip->i_nlink--;
DIP_SET(fip, i_nlink, fip->i_nlink);
fip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(fip, IN_CHANGE);
if (DOINGSOFTDEP(fvp))
softdep_revert_link(tdp, fip);
goto unlockout;
@ -1861,7 +1861,7 @@ ufs_mkdir(ap)
}
#endif
#endif /* !SUIDDIR */
ip->i_flag |= IN_ACCESS | IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_ACCESS | IN_CHANGE | IN_UPDATE);
ip->i_mode = dmode;
DIP_SET(ip, i_mode, dmode);
tvp->v_type = VDIR; /* Rest init'd in getnewvnode(). */
@ -1882,7 +1882,7 @@ ufs_mkdir(ap)
dp->i_effnlink++;
dp->i_nlink++;
DIP_SET(dp, i_nlink, dp->i_nlink);
dp->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(dp, IN_CHANGE);
if (DOINGSOFTDEP(dvp))
softdep_setup_mkdir(dp, ip);
error = UFS_UPDATE(dvp, !DOINGSOFTDEP(dvp) && !DOINGASYNC(dvp));
@ -1926,7 +1926,7 @@ ufs_mkdir(ap)
goto bad;
ip->i_size = DIRBLKSIZ;
DIP_SET(ip, i_size, DIRBLKSIZ);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
bcopy((caddr_t)&dirtemplate, (caddr_t)bp->b_data, sizeof dirtemplate);
if (DOINGSOFTDEP(tvp)) {
/*
@ -1972,7 +1972,7 @@ ufs_mkdir(ap)
dp->i_effnlink--;
dp->i_nlink--;
DIP_SET(dp, i_nlink, dp->i_nlink);
dp->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(dp, IN_CHANGE);
/*
* No need to do an explicit VOP_TRUNCATE here, vrele will
* do this for us because we set the link count to 0.
@ -1980,7 +1980,7 @@ ufs_mkdir(ap)
ip->i_effnlink = 0;
ip->i_nlink = 0;
DIP_SET(ip, i_nlink, 0);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
if (DOINGSOFTDEP(tvp))
softdep_revert_mkdir(dp, ip);
@ -2069,11 +2069,11 @@ ufs_rmdir(ap)
if (!DOINGSOFTDEP(vp)) {
dp->i_nlink--;
DIP_SET(dp, i_nlink, dp->i_nlink);
dp->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(dp, IN_CHANGE);
error = UFS_UPDATE(dvp, 0);
ip->i_nlink--;
DIP_SET(ip, i_nlink, ip->i_nlink);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
}
cache_purge(vp);
#ifdef UFS_DIRHASH
@ -2113,7 +2113,7 @@ ufs_symlink(ap)
bcopy(ap->a_target, SHORTLINK(ip), len);
ip->i_size = len;
DIP_SET(ip, i_size, len);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE | IN_UPDATE);
error = UFS_UPDATE(vp, 0);
} else
error = vn_rdwr(UIO_WRITE, vp, __DECONST(void *, ap->a_target),
@ -2629,7 +2629,7 @@ ufs_makeinode(mode, dvp, vpp, cnp, callfunc)
}
#endif
#endif /* !SUIDDIR */
ip->i_flag |= IN_ACCESS | IN_CHANGE | IN_UPDATE;
UFS_INODE_SET_FLAG(ip, IN_ACCESS | IN_CHANGE | IN_UPDATE);
ip->i_mode = mode;
DIP_SET(ip, i_mode, mode);
tvp->v_type = IFTOVT(mode); /* Rest init'd in getnewvnode(). */
@ -2691,7 +2691,7 @@ ufs_makeinode(mode, dvp, vpp, cnp, callfunc)
ip->i_effnlink = 0;
ip->i_nlink = 0;
DIP_SET(ip, i_nlink, 0);
ip->i_flag |= IN_CHANGE;
UFS_INODE_SET_FLAG(ip, IN_CHANGE);
if (DOINGSOFTDEP(tvp))
softdep_revert_create(VTOI(dvp), ip);
vput(tvp);