diff options
author | kib <kib@FreeBSD.org> | 2015-11-10 08:39:07 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2015-11-10 08:39:07 +0000 |
commit | 5033903e2b91c8722c776318d671e7bee03179ba (patch) | |
tree | 7f95ecdb6e6b943546f3bc686e9234dc02ecb438 /sys/ufs/ffs | |
parent | 7d9f73688650e3b57abc35211b6f7fadbbe57ab7 (diff) | |
download | FreeBSD-src-5033903e2b91c8722c776318d671e7bee03179ba.zip FreeBSD-src-5033903e2b91c8722c776318d671e7bee03179ba.tar.gz |
MFC r290047:
Do not perform read-ahead for BA_CLRBUF request when we are low on
memory or when dirty buffer queue is too large.
Diffstat (limited to 'sys/ufs/ffs')
-rw-r--r-- | sys/ufs/ffs/ffs_balloc.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/ufs/ffs/ffs_balloc.c b/sys/ufs/ffs/ffs_balloc.c index 9c33a7f..8551085 100644 --- a/sys/ufs/ffs/ffs_balloc.c +++ b/sys/ufs/ffs/ffs_balloc.c @@ -429,7 +429,9 @@ retry: brelse(bp); if (flags & BA_CLRBUF) { int seqcount = (flags & BA_SEQMASK) >> BA_SEQSHIFT; - if (seqcount && (vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0) { + if (seqcount != 0 && + (vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0 && + !(vm_page_count_severe() || buf_dirty_count_severe())) { error = cluster_read(vp, ip->i_size, lbn, (int)fs->fs_bsize, NOCRED, MAXBSIZE, seqcount, gbflags, &nbp); @@ -998,7 +1000,9 @@ retry: */ if (flags & BA_CLRBUF) { int seqcount = (flags & BA_SEQMASK) >> BA_SEQSHIFT; - if (seqcount && (vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0) { + if (seqcount != 0 && + (vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0 && + !(vm_page_count_severe() || buf_dirty_count_severe())) { error = cluster_read(vp, ip->i_size, lbn, (int)fs->fs_bsize, NOCRED, MAXBSIZE, seqcount, gbflags, &nbp); |