summaryrefslogtreecommitdiffstats
path: root/sys/gnu
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1998-10-29 09:30:52 +0000
committerpeter <peter@FreeBSD.org>1998-10-29 09:30:52 +0000
commitc002ba1c815cebcc2fe8fccfda88f41fd1a10b7a (patch)
treeb0e0a847377e9529a579dfc9f70f863af12af0dc /sys/gnu
parentfd7d7fb526c28cf221ba2f7bc1bca56f68ab1439 (diff)
downloadFreeBSD-src-c002ba1c815cebcc2fe8fccfda88f41fd1a10b7a.zip
FreeBSD-src-c002ba1c815cebcc2fe8fccfda88f41fd1a10b7a.tar.gz
Use vtruncbuf() to clean out cached blocks on a file shorten rather than
the more expensive vinvalbuf(), based on the FFS version of the same routine. I don't have any ext2fs filesystems to test this on.
Diffstat (limited to 'sys/gnu')
-rw-r--r--sys/gnu/ext2fs/ext2_inode.c7
-rw-r--r--sys/gnu/fs/ext2fs/ext2_inode.c7
2 files changed, 8 insertions, 6 deletions
diff --git a/sys/gnu/ext2fs/ext2_inode.c b/sys/gnu/ext2fs/ext2_inode.c
index 4699d4d..b76410b 100644
--- a/sys/gnu/ext2fs/ext2_inode.c
+++ b/sys/gnu/ext2fs/ext2_inode.c
@@ -142,7 +142,7 @@ ext2_truncate(vp, length, flags, cred, p)
register struct ext2_sb_info *fs;
struct buf *bp;
int offset, size, level;
- long count, nblocks, vflags, blocksreleased = 0;
+ long count, nblocks, blocksreleased = 0;
struct timeval tv;
register int i;
int aflags, error, allerror;
@@ -268,8 +268,9 @@ printf("ext2_truncate called %d to %d\n", VTOI(ovp)->i_number, length);
bcopy((caddr_t)&oip->i_db[0], (caddr_t)newblks, sizeof newblks);
bcopy((caddr_t)oldblks, (caddr_t)&oip->i_db[0], sizeof oldblks);
oip->i_size = osize;
- vflags = ((length > 0) ? V_SAVE : 0) | V_SAVEMETA;
- allerror = vinvalbuf(ovp, vflags, cred, p, 0, 0);
+ error = vtruncbuf(ovp, cred, p, length, (int)fs->s_blocksize);
+ if (error && (allerror == 0))
+ allerror = error;
/*
* Indirect blocks first.
diff --git a/sys/gnu/fs/ext2fs/ext2_inode.c b/sys/gnu/fs/ext2fs/ext2_inode.c
index 4699d4d..b76410b 100644
--- a/sys/gnu/fs/ext2fs/ext2_inode.c
+++ b/sys/gnu/fs/ext2fs/ext2_inode.c
@@ -142,7 +142,7 @@ ext2_truncate(vp, length, flags, cred, p)
register struct ext2_sb_info *fs;
struct buf *bp;
int offset, size, level;
- long count, nblocks, vflags, blocksreleased = 0;
+ long count, nblocks, blocksreleased = 0;
struct timeval tv;
register int i;
int aflags, error, allerror;
@@ -268,8 +268,9 @@ printf("ext2_truncate called %d to %d\n", VTOI(ovp)->i_number, length);
bcopy((caddr_t)&oip->i_db[0], (caddr_t)newblks, sizeof newblks);
bcopy((caddr_t)oldblks, (caddr_t)&oip->i_db[0], sizeof oldblks);
oip->i_size = osize;
- vflags = ((length > 0) ? V_SAVE : 0) | V_SAVEMETA;
- allerror = vinvalbuf(ovp, vflags, cred, p, 0, 0);
+ error = vtruncbuf(ovp, cred, p, length, (int)fs->s_blocksize);
+ if (error && (allerror == 0))
+ allerror = error;
/*
* Indirect blocks first.
OpenPOWER on IntegriCloud