Date: Tue, 17 Dec 2019 00:13:40 +0000 (UTC) From: Warner Losh <imp@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r355836 - head/sys/ufs/ffs Message-ID: <201912170013.xBH0Deci090674@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201912170013.xBH0Deci090674>