Author: imp
Date: Tue Dec 17 00:13:40 2019
New Revision: 355836
URL: https://svnweb.freebsd.org/changeset/base/355836

Log:
  Add BIO_SPEEDUP signalling to UFS
  
  When we have a resource shortage in UFS, send down a BIO_SPEEDUP to
  give the CAM I/O scheduler a heads up that we have a resource shortage
  and that it should bias its decisions knowing that.
  
  Reviewed by: kirk, kib
  Sponsored by: Netflix
  Differential Revision: https://reviews.freebsd.org/D18351

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

Modified: head/sys/ufs/ffs/ffs_softdep.c
==============================================================================
--- head/sys/ufs/ffs/ffs_softdep.c      Tue Dec 17 00:13:35 2019        
(r355835)
+++ head/sys/ufs/ffs/ffs_softdep.c      Tue Dec 17 00:13:40 2019        
(r355836)
@@ -3343,8 +3343,7 @@ softdep_synchronize(bp, ump, caller1)
        bp->bio_length = 0;
        bp->bio_done = softdep_synchronize_completed;
        bp->bio_caller1 = caller1;
-       g_io_request(bp,
-           (struct g_consumer *)ump->um_devvp->v_bufobj.bo_private);
+       g_io_request(bp, ump->um_cp);
 }
 
 /*
@@ -13353,6 +13352,7 @@ softdep_request_cleanup(fs, vp, cred, resource)
        struct ufsmount *ump;
        struct mount *mp;
        long starttime;
+       size_t resid;
        ufs2_daddr_t needed;
        int error, failed_vnode;
 
@@ -13428,6 +13428,10 @@ softdep_request_cleanup(fs, vp, cred, resource)
        }
        starttime = time_second;
 retry:
+       if (resource == FLUSH_BLOCKS_WAIT &&
+           fs->fs_cstotal.cs_nbfree <= needed)
+               g_io_speedup(needed * fs->fs_bsize, BIO_SPEEDUP_TRIM, &resid,
+                   ump->um_cp);
        if ((resource == FLUSH_BLOCKS_WAIT && ump->softdep_on_worklist > 0 &&
            fs->fs_cstotal.cs_nbfree <= needed) ||
            (resource == FLUSH_INODES_WAIT && fs->fs_pendinginodes > 0 &&
@@ -13740,13 +13744,23 @@ static void
 check_clear_deps(mp)
        struct mount *mp;
 {
+       size_t resid;
 
        /*
+        * Tell the lower layers that any TRIM or WRITE transactions
+        * that have been delayed for performance reasons should
+        * proceed to help alleviate the shortage faster.
+        */
+       g_io_speedup(0, BIO_SPEEDUP_TRIM | BIO_SPEEDUP_WRITE, &resid,
+           VFSTOUFS(mp)->um_cp);
+
+       /*
         * If we are suspended, it may be because of our using
         * too many inodedeps, so help clear them out.
         */
        if (MOUNTEDSUJ(mp) && VFSTOUFS(mp)->softdep_jblocks->jb_suspended)
                clear_inodedeps(mp);
+
        /*
         * General requests for cleanup of backed up dependencies
         */
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to