summaryrefslogtreecommitdiffstats
path: root/sys/ufs/ffs
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2005-04-05 08:49:41 +0000
committerjeff <jeff@FreeBSD.org>2005-04-05 08:49:41 +0000
commit2a0f491ada8de05dbf831c25f92846f0b1bbef90 (patch)
treed8e8d82a818101000b06cc19533481d5b4edbc55 /sys/ufs/ffs
parentf3be953c786175ffa2bfafae7aedd1c30be7043a (diff)
downloadFreeBSD-src-2a0f491ada8de05dbf831c25f92846f0b1bbef90.zip
FreeBSD-src-2a0f491ada8de05dbf831c25f92846f0b1bbef90.tar.gz
- Consistently call 'vp' vp rather than ovp sometimes in ffs_truncate().
Do the same for oip. Pointed out by: glebius
Diffstat (limited to 'sys/ufs/ffs')
-rw-r--r--sys/ufs/ffs/ffs_inode.c209
1 files changed, 104 insertions, 105 deletions
diff --git a/sys/ufs/ffs/ffs_inode.c b/sys/ufs/ffs/ffs_inode.c
index 39bb635..33b65bf 100644
--- a/sys/ufs/ffs/ffs_inode.c
+++ b/sys/ufs/ffs/ffs_inode.c
@@ -130,7 +130,7 @@ ffs_update(vp, waitfor)
#define DOUBLE 1 /* index of double indirect block */
#define TRIPLE 2 /* index of triple indirect block */
/*
- * Truncate the inode oip to at most length size, freeing the
+ * Truncate the inode ip to at most length size, freeing the
* disk blocks.
*/
int
@@ -141,8 +141,7 @@ ffs_truncate(vp, length, flags, cred, td)
struct ucred *cred;
struct thread *td;
{
- struct vnode *ovp = vp;
- struct inode *oip;
+ struct inode *ip;
ufs2_daddr_t bn, lbn, lastblock, lastiblock[NIADDR], indir_lbn[NIADDR];
ufs2_daddr_t oldblks[NDADDR + NIADDR], newblks[NDADDR + NIADDR];
ufs2_daddr_t count, blocksreleased = 0, datablocks;
@@ -154,9 +153,9 @@ ffs_truncate(vp, length, flags, cred, td)
int i, error, allerror;
off_t osize;
- oip = VTOI(ovp);
- fs = oip->i_fs;
- ump = oip->i_ump;
+ ip = VTOI(vp);
+ fs = ip->i_fs;
+ ump = ip->i_ump;
ASSERT_VOP_LOCKED(vp, "ffs_truncate");
@@ -177,44 +176,44 @@ ffs_truncate(vp, length, flags, cred, td)
* soft updates below.
*/
needextclean = 0;
- softdepslowdown = DOINGSOFTDEP(ovp) && softdep_slowdown(ovp);
+ softdepslowdown = DOINGSOFTDEP(vp) && softdep_slowdown(vp);
extblocks = 0;
- datablocks = DIP(oip, i_blocks);
- if (fs->fs_magic == FS_UFS2_MAGIC && oip->i_din2->di_extsize > 0) {
- extblocks = btodb(fragroundup(fs, oip->i_din2->di_extsize));
+ datablocks = DIP(ip, i_blocks);
+ if (fs->fs_magic == FS_UFS2_MAGIC && ip->i_din2->di_extsize > 0) {
+ extblocks = btodb(fragroundup(fs, ip->i_din2->di_extsize));
datablocks -= extblocks;
}
if ((flags & IO_EXT) && extblocks > 0) {
- if (DOINGSOFTDEP(ovp) && softdepslowdown == 0 && length == 0) {
+ if (DOINGSOFTDEP(vp) && softdepslowdown == 0 && length == 0) {
if ((flags & IO_NORMAL) == 0) {
- softdep_setup_freeblocks(oip, length, IO_EXT);
+ softdep_setup_freeblocks(ip, length, IO_EXT);
return (0);
}
needextclean = 1;
} else {
if (length != 0)
panic("ffs_truncate: partial trunc of extdata");
- if ((error = ffs_syncvnode(ovp, MNT_WAIT)) != 0)
+ if ((error = ffs_syncvnode(vp, MNT_WAIT)) != 0)
return (error);
- osize = oip->i_din2->di_extsize;
- oip->i_din2->di_blocks -= extblocks;
+ osize = ip->i_din2->di_extsize;
+ ip->i_din2->di_blocks -= extblocks;
#ifdef QUOTA
- (void) chkdq(oip, -extblocks, NOCRED, 0);
+ (void) chkdq(ip, -extblocks, NOCRED, 0);
#endif
- vinvalbuf(ovp, V_ALT, td, 0, 0);
- oip->i_din2->di_extsize = 0;
+ vinvalbuf(vp, V_ALT, td, 0, 0);
+ ip->i_din2->di_extsize = 0;
for (i = 0; i < NXADDR; i++) {
- oldblks[i] = oip->i_din2->di_extb[i];
- oip->i_din2->di_extb[i] = 0;
+ oldblks[i] = ip->i_din2->di_extb[i];
+ ip->i_din2->di_extb[i] = 0;
}
- oip->i_flag |= IN_CHANGE | IN_UPDATE;
- if ((error = ffs_update(ovp, 1)))
+ ip->i_flag |= IN_CHANGE | IN_UPDATE;
+ if ((error = ffs_update(vp, 1)))
return (error);
for (i = 0; i < NXADDR; i++) {
if (oldblks[i] == 0)
continue;
- ffs_blkfree(ump, fs, oip->i_devvp, oldblks[i],
- sblksize(fs, osize, i), oip->i_number);
+ ffs_blkfree(ump, fs, ip->i_devvp, oldblks[i],
+ sblksize(fs, osize, i), ip->i_number);
}
}
}
@@ -222,38 +221,38 @@ ffs_truncate(vp, length, flags, cred, td)
return (0);
if (length > fs->fs_maxfilesize)
return (EFBIG);
- if (ovp->v_type == VLNK &&
- (oip->i_size < ovp->v_mount->mnt_maxsymlinklen ||
+ if (vp->v_type == VLNK &&
+ (ip->i_size < vp->v_mount->mnt_maxsymlinklen ||
datablocks == 0)) {
#ifdef DIAGNOSTIC
if (length != 0)
panic("ffs_truncate: partial truncate of symlink");
#endif
- bzero(SHORTLINK(oip), (u_int)oip->i_size);
- oip->i_size = 0;
- DIP_SET(oip, i_size, 0);
- oip->i_flag |= IN_CHANGE | IN_UPDATE;
+ 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;
if (needextclean)
- softdep_setup_freeblocks(oip, length, IO_EXT);
- return (ffs_update(ovp, 1));
+ softdep_setup_freeblocks(ip, length, IO_EXT);
+ return (ffs_update(vp, 1));
}
- if (oip->i_size == length) {
- oip->i_flag |= IN_CHANGE | IN_UPDATE;
+ if (ip->i_size == length) {
+ ip->i_flag |= IN_CHANGE | IN_UPDATE;
if (needextclean)
- softdep_setup_freeblocks(oip, length, IO_EXT);
- return (ffs_update(ovp, 0));
+ softdep_setup_freeblocks(ip, length, IO_EXT);
+ return (ffs_update(vp, 0));
}
if (fs->fs_ronly)
panic("ffs_truncate: read-only filesystem");
#ifdef QUOTA
- error = getinoquota(oip);
+ error = getinoquota(ip);
if (error)
return (error);
#endif
- if ((oip->i_flags & SF_SNAPSHOT) != 0)
- ffs_snapremove(ovp);
- ovp->v_lasta = ovp->v_clen = ovp->v_cstart = ovp->v_lastw = 0;
- if (DOINGSOFTDEP(ovp)) {
+ if ((ip->i_flags & SF_SNAPSHOT) != 0)
+ ffs_snapremove(vp);
+ vp->v_lasta = vp->v_clen = vp->v_cstart = vp->v_lastw = 0;
+ if (DOINGSOFTDEP(vp)) {
if (length > 0 || softdepslowdown) {
/*
* If a file is only partially truncated, then
@@ -264,47 +263,47 @@ ffs_truncate(vp, length, flags, cred, td)
* rarely, we solve the problem by syncing the file
* so that it will have no data structures left.
*/
- if ((error = ffs_syncvnode(ovp, MNT_WAIT)) != 0)
+ if ((error = ffs_syncvnode(vp, MNT_WAIT)) != 0)
return (error);
UFS_LOCK(ump);
- if (oip->i_flag & IN_SPACECOUNTED)
+ if (ip->i_flag & IN_SPACECOUNTED)
fs->fs_pendingblocks -= datablocks;
UFS_UNLOCK(ump);
} else {
#ifdef QUOTA
- (void) chkdq(oip, -datablocks, NOCRED, 0);
+ (void) chkdq(ip, -datablocks, NOCRED, 0);
#endif
- softdep_setup_freeblocks(oip, length, needextclean ?
+ softdep_setup_freeblocks(ip, length, needextclean ?
IO_EXT | IO_NORMAL : IO_NORMAL);
ASSERT_VOP_LOCKED(vp, "ffs_truncate1");
- vinvalbuf(ovp, needextclean ? 0 : V_NORMAL, td, 0, 0);
+ vinvalbuf(vp, needextclean ? 0 : V_NORMAL, td, 0, 0);
vnode_pager_setsize(vp, 0);
- oip->i_flag |= IN_CHANGE | IN_UPDATE;
- return (ffs_update(ovp, 0));
+ ip->i_flag |= IN_CHANGE | IN_UPDATE;
+ return (ffs_update(vp, 0));
}
}
- osize = oip->i_size;
+ osize = ip->i_size;
/*
* Lengthen the size of the file. We must ensure that the
* last byte of the file is allocated. Since the smallest
* value of osize is 0, length will be at least 1.
*/
if (osize < length) {
- vnode_pager_setsize(ovp, length);
+ vnode_pager_setsize(vp, length);
flags |= BA_CLRBUF;
- error = UFS_BALLOC(ovp, length - 1, 1, cred, flags, &bp);
+ error = UFS_BALLOC(vp, length - 1, 1, cred, flags, &bp);
if (error)
return (error);
- oip->i_size = length;
- DIP_SET(oip, i_size, length);
+ ip->i_size = length;
+ DIP_SET(ip, i_size, length);
if (bp->b_bufsize == fs->fs_bsize)
bp->b_flags |= B_CLUSTEROK;
if (flags & IO_SYNC)
bwrite(bp);
else
bawrite(bp);
- oip->i_flag |= IN_CHANGE | IN_UPDATE;
- return (ffs_update(ovp, 1));
+ ip->i_flag |= IN_CHANGE | IN_UPDATE;
+ return (ffs_update(vp, 1));
}
/*
* Shorten the size of the file. If the file is not being
@@ -316,12 +315,12 @@ ffs_truncate(vp, length, flags, cred, td)
*/
offset = blkoff(fs, length);
if (offset == 0) {
- oip->i_size = length;
- DIP_SET(oip, i_size, length);
+ ip->i_size = length;
+ DIP_SET(ip, i_size, length);
} else {
lbn = lblkno(fs, length);
flags |= BA_CLRBUF;
- error = UFS_BALLOC(ovp, length - 1, 1, cred, flags, &bp);
+ error = UFS_BALLOC(vp, length - 1, 1, cred, flags, &bp);
if (error) {
return (error);
}
@@ -333,14 +332,14 @@ ffs_truncate(vp, length, flags, cred, td)
* so that we do not get a soft updates inconsistency
* when we create the fragment below.
*/
- if (DOINGSOFTDEP(ovp) && lbn < NDADDR &&
+ if (DOINGSOFTDEP(vp) && lbn < NDADDR &&
fragroundup(fs, blkoff(fs, length)) < fs->fs_bsize &&
- (error = ffs_syncvnode(ovp, MNT_WAIT)) != 0)
+ (error = ffs_syncvnode(vp, MNT_WAIT)) != 0)
return (error);
- oip->i_size = length;
- DIP_SET(oip, i_size, length);
- size = blksize(fs, oip, lbn);
- if (ovp->v_type != VDIR)
+ ip->i_size = length;
+ DIP_SET(ip, i_size, length);
+ size = blksize(fs, ip, lbn);
+ if (vp->v_type != VDIR)
bzero((char *)bp->b_data + offset,
(u_int)(size - offset));
/* Kirk's code has reallocbuf(bp, size, 1) here */
@@ -370,19 +369,19 @@ ffs_truncate(vp, length, flags, cred, td)
* normalized to -1 for calls to ffs_indirtrunc below.
*/
for (level = TRIPLE; level >= SINGLE; level--) {
- oldblks[NDADDR + level] = DIP(oip, i_ib[level]);
+ oldblks[NDADDR + level] = DIP(ip, i_ib[level]);
if (lastiblock[level] < 0) {
- DIP_SET(oip, i_ib[level], 0);
+ DIP_SET(ip, i_ib[level], 0);
lastiblock[level] = -1;
}
}
for (i = 0; i < NDADDR; i++) {
- oldblks[i] = DIP(oip, i_db[i]);
+ oldblks[i] = DIP(ip, i_db[i]);
if (i > lastblock)
- DIP_SET(oip, i_db[i], 0);
+ DIP_SET(ip, i_db[i], 0);
}
- oip->i_flag |= IN_CHANGE | IN_UPDATE;
- allerror = ffs_update(ovp, 1);
+ ip->i_flag |= IN_CHANGE | IN_UPDATE;
+ allerror = ffs_update(vp, 1);
/*
* Having written the new inode to disk, save its new configuration
@@ -391,17 +390,17 @@ ffs_truncate(vp, length, flags, cred, td)
* when we are done.
*/
for (i = 0; i < NDADDR; i++) {
- newblks[i] = DIP(oip, i_db[i]);
- DIP_SET(oip, i_db[i], oldblks[i]);
+ newblks[i] = DIP(ip, i_db[i]);
+ DIP_SET(ip, i_db[i], oldblks[i]);
}
for (i = 0; i < NIADDR; i++) {
- newblks[NDADDR + i] = DIP(oip, i_ib[i]);
- DIP_SET(oip, i_ib[i], oldblks[NDADDR + i]);
+ newblks[NDADDR + i] = DIP(ip, i_ib[i]);
+ DIP_SET(ip, i_ib[i], oldblks[NDADDR + i]);
}
- oip->i_size = osize;
- DIP_SET(oip, i_size, osize);
+ ip->i_size = osize;
+ DIP_SET(ip, i_size, osize);
- error = vtruncbuf(ovp, cred, td, length, fs->fs_bsize);
+ error = vtruncbuf(vp, cred, td, length, fs->fs_bsize);
if (error && (allerror == 0))
allerror = error;
@@ -412,17 +411,17 @@ ffs_truncate(vp, length, flags, cred, td)
indir_lbn[DOUBLE] = indir_lbn[SINGLE] - NINDIR(fs) - 1;
indir_lbn[TRIPLE] = indir_lbn[DOUBLE] - NINDIR(fs) * NINDIR(fs) - 1;
for (level = TRIPLE; level >= SINGLE; level--) {
- bn = DIP(oip, i_ib[level]);
+ bn = DIP(ip, i_ib[level]);
if (bn != 0) {
- error = ffs_indirtrunc(oip, indir_lbn[level],
+ error = ffs_indirtrunc(ip, indir_lbn[level],
fsbtodb(fs, bn), lastiblock[level], level, &count);
if (error)
allerror = error;
blocksreleased += count;
if (lastiblock[level] < 0) {
- DIP_SET(oip, i_ib[level], 0);
- ffs_blkfree(ump, fs, oip->i_devvp, bn,
- fs->fs_bsize, oip->i_number);
+ DIP_SET(ip, i_ib[level], 0);
+ ffs_blkfree(ump, fs, ip->i_devvp, bn,
+ fs->fs_bsize, ip->i_number);
blocksreleased += nblocks;
}
}
@@ -436,12 +435,12 @@ ffs_truncate(vp, length, flags, cred, td)
for (i = NDADDR - 1; i > lastblock; i--) {
long bsize;
- bn = DIP(oip, i_db[i]);
+ bn = DIP(ip, i_db[i]);
if (bn == 0)
continue;
- DIP_SET(oip, i_db[i], 0);
- bsize = blksize(fs, oip, i);
- ffs_blkfree(ump, fs, oip->i_devvp, bn, bsize, oip->i_number);
+ DIP_SET(ip, i_db[i], 0);
+ bsize = blksize(fs, ip, i);
+ ffs_blkfree(ump, fs, ip->i_devvp, bn, bsize, ip->i_number);
blocksreleased += btodb(bsize);
}
if (lastblock < 0)
@@ -451,7 +450,7 @@ ffs_truncate(vp, length, flags, cred, td)
* Finally, look for a change in size of the
* last direct block; release any frags.
*/
- bn = DIP(oip, i_db[lastblock]);
+ bn = DIP(ip, i_db[lastblock]);
if (bn != 0) {
long oldspace, newspace;
@@ -459,10 +458,10 @@ ffs_truncate(vp, length, flags, cred, td)
* Calculate amount of space we're giving
* back as old block size minus new block size.
*/
- oldspace = blksize(fs, oip, lastblock);
- oip->i_size = length;
- DIP_SET(oip, i_size, length);
- newspace = blksize(fs, oip, lastblock);
+ oldspace = blksize(fs, ip, lastblock);
+ ip->i_size = length;
+ DIP_SET(ip, i_size, length);
+ newspace = blksize(fs, ip, lastblock);
if (newspace == 0)
panic("ffs_truncate: newspace");
if (oldspace - newspace > 0) {
@@ -472,39 +471,39 @@ ffs_truncate(vp, length, flags, cred, td)
* required for the storage we're keeping.
*/
bn += numfrags(fs, newspace);
- ffs_blkfree(ump, fs, oip->i_devvp, bn,
- oldspace - newspace, oip->i_number);
+ ffs_blkfree(ump, fs, ip->i_devvp, bn,
+ oldspace - newspace, ip->i_number);
blocksreleased += btodb(oldspace - newspace);
}
}
done:
#ifdef DIAGNOSTIC
for (level = SINGLE; level <= TRIPLE; level++)
- if (newblks[NDADDR + level] != DIP(oip, i_ib[level]))
+ if (newblks[NDADDR + level] != DIP(ip, i_ib[level]))
panic("ffs_truncate1");
for (i = 0; i < NDADDR; i++)
- if (newblks[i] != DIP(oip, i_db[i]))
+ if (newblks[i] != DIP(ip, i_db[i]))
panic("ffs_truncate2");
- VI_LOCK(ovp);
+ VI_LOCK(vp);
if (length == 0 &&
- (fs->fs_magic != FS_UFS2_MAGIC || oip->i_din2->di_extsize == 0) &&
+ (fs->fs_magic != FS_UFS2_MAGIC || ip->i_din2->di_extsize == 0) &&
(vp->v_bufobj.bo_dirty.bv_cnt > 0 ||
vp->v_bufobj.bo_clean.bv_cnt > 0))
panic("ffs_truncate3");
- VI_UNLOCK(ovp);
+ VI_UNLOCK(vp);
#endif /* DIAGNOSTIC */
/*
* Put back the real size.
*/
- oip->i_size = length;
- DIP_SET(oip, i_size, length);
- DIP_SET(oip, i_blocks, DIP(oip, i_blocks) - blocksreleased);
+ ip->i_size = length;
+ DIP_SET(ip, i_size, length);
+ DIP_SET(ip, i_blocks, DIP(ip, i_blocks) - blocksreleased);
- if (DIP(oip, i_blocks) < 0) /* sanity */
- DIP_SET(oip, i_blocks, 0);
- oip->i_flag |= IN_CHANGE;
+ if (DIP(ip, i_blocks) < 0) /* sanity */
+ DIP_SET(ip, i_blocks, 0);
+ ip->i_flag |= IN_CHANGE;
#ifdef QUOTA
- (void) chkdq(oip, -blocksreleased, NOCRED, 0);
+ (void) chkdq(ip, -blocksreleased, NOCRED, 0);
#endif
return (allerror);
}
OpenPOWER on IntegriCloud