summaryrefslogtreecommitdiffstats
path: root/sys/ufs/ffs
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2015-11-10 08:39:07 +0000
committerkib <kib@FreeBSD.org>2015-11-10 08:39:07 +0000
commit5033903e2b91c8722c776318d671e7bee03179ba (patch)
tree7f95ecdb6e6b943546f3bc686e9234dc02ecb438 /sys/ufs/ffs
parent7d9f73688650e3b57abc35211b6f7fadbbe57ab7 (diff)
downloadFreeBSD-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.c8
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);
OpenPOWER on IntegriCloud