svn commit: r368402 - stable/12/sys/ufs/ffs
Konstantin Belousov
kib at FreeBSD.org
Mon Dec 7 01:05:40 UTC 2020
Author: kib
Date: Mon Dec 7 01:05:39 2020
New Revision: 368402
URL: https://svnweb.freebsd.org/changeset/base/368402
Log:
MFC r368191:
ffs: do not read full direct blocks if they are going to be overwritten.
Modified:
stable/12/sys/ufs/ffs/ffs_balloc.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/ufs/ffs/ffs_balloc.c
==============================================================================
--- stable/12/sys/ufs/ffs/ffs_balloc.c Mon Dec 7 01:02:20 2020 (r368401)
+++ stable/12/sys/ufs/ffs/ffs_balloc.c Mon Dec 7 01:05:39 2020 (r368402)
@@ -172,10 +172,17 @@ ffs_balloc_ufs1(struct vnode *vp, off_t startoffset, i
panic("ffs_balloc_ufs1: BA_METAONLY for direct block");
nb = dp->di_db[lbn];
if (nb != 0 && ip->i_size >= smalllblktosize(fs, lbn + 1)) {
- error = bread(vp, lbn, fs->fs_bsize, NOCRED, &bp);
- if (error) {
- brelse(bp);
- return (error);
+ if ((flags & BA_CLRBUF) != 0) {
+ error = bread(vp, lbn, fs->fs_bsize, NOCRED,
+ &bp);
+ if (error != 0)
+ return (error);
+ } else {
+ bp = getblk(vp, lbn, fs->fs_bsize, 0, 0,
+ gbflags);
+ if (bp == NULL)
+ return (EIO);
+ vfs_bio_clrbuf(bp);
}
bp->b_blkno = fsbtodb(fs, nb);
*bpp = bp;
@@ -770,11 +777,17 @@ ffs_balloc_ufs2(struct vnode *vp, off_t startoffset, i
panic("ffs_balloc_ufs2: BA_METAONLY for direct block");
nb = dp->di_db[lbn];
if (nb != 0 && ip->i_size >= smalllblktosize(fs, lbn + 1)) {
- error = bread_gb(vp, lbn, fs->fs_bsize, NOCRED,
- gbflags, &bp);
- if (error) {
- brelse(bp);
- return (error);
+ if ((flags & BA_CLRBUF) != 0) {
+ error = bread_gb(vp, lbn, fs->fs_bsize, NOCRED,
+ gbflags, &bp);
+ if (error != 0)
+ return (error);
+ } else {
+ bp = getblk(vp, lbn, fs->fs_bsize, 0, 0,
+ gbflags);
+ if (bp == NULL)
+ return (EIO);
+ vfs_bio_clrbuf(bp);
}
bp->b_blkno = fsbtodb(fs, nb);
*bpp = bp;
More information about the svn-src-all
mailing list