Author: kib
Date: Tue Oct 27 13:44:13 2015
New Revision: 290047
URL: https://svnweb.freebsd.org/changeset/base/290047

Log:
  Do not perform read-ahead for BA_CLRBUF request when we are low on
  memory or when dirty buffer queue is too large.
  
  Reported and tested by:       pho
  Sponsored by: The FreeBSD Foundation
  MFC after:    2 weeks

Modified:
  head/sys/ufs/ffs/ffs_balloc.c

Modified: head/sys/ufs/ffs/ffs_balloc.c
==============================================================================
--- head/sys/ufs/ffs/ffs_balloc.c       Tue Oct 27 12:42:27 2015        
(r290046)
+++ head/sys/ufs/ffs/ffs_balloc.c       Tue Oct 27 13:44:13 2015        
(r290047)
@@ -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);
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to