mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
xfs: Don't wake the aild once per second
Now that the AIL push algorithm is traversal safe, we don't need a watchdog function in the xfsaild to catch pushes that fail to make progress. Remove the watchdog timeout and make pushes purely driven by demand. This will remove the once-per-second wakeup that is seen when the filesystem is idle and make laptop power misers happy. Signed-off-by: Dave Chinner <david@fromorbit.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Alex Elder <aelder@sgi.com>
This commit is contained in:
parent
f0a7695380
commit
453eac8a9a
@ -877,12 +877,11 @@ xfsaild(
|
|||||||
{
|
{
|
||||||
struct xfs_ail *ailp = data;
|
struct xfs_ail *ailp = data;
|
||||||
xfs_lsn_t last_pushed_lsn = 0;
|
xfs_lsn_t last_pushed_lsn = 0;
|
||||||
long tout = 0;
|
long tout = 0; /* milliseconds */
|
||||||
|
|
||||||
while (!kthread_should_stop()) {
|
while (!kthread_should_stop()) {
|
||||||
if (tout)
|
schedule_timeout_interruptible(tout ?
|
||||||
schedule_timeout_interruptible(msecs_to_jiffies(tout));
|
msecs_to_jiffies(tout) : MAX_SCHEDULE_TIMEOUT);
|
||||||
tout = 1000;
|
|
||||||
|
|
||||||
/* swsusp */
|
/* swsusp */
|
||||||
try_to_freeze();
|
try_to_freeze();
|
||||||
|
@ -237,14 +237,15 @@ out:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function that does the work of pushing on the AIL
|
* xfsaild_push does the work of pushing on the AIL. Returning a timeout of
|
||||||
|
* zero indicates that the caller should sleep until woken.
|
||||||
*/
|
*/
|
||||||
long
|
long
|
||||||
xfsaild_push(
|
xfsaild_push(
|
||||||
struct xfs_ail *ailp,
|
struct xfs_ail *ailp,
|
||||||
xfs_lsn_t *last_lsn)
|
xfs_lsn_t *last_lsn)
|
||||||
{
|
{
|
||||||
long tout = 1000; /* milliseconds */
|
long tout = 0;
|
||||||
xfs_lsn_t last_pushed_lsn = *last_lsn;
|
xfs_lsn_t last_pushed_lsn = *last_lsn;
|
||||||
xfs_lsn_t target = ailp->xa_target;
|
xfs_lsn_t target = ailp->xa_target;
|
||||||
xfs_lsn_t lsn;
|
xfs_lsn_t lsn;
|
||||||
@ -262,7 +263,7 @@ xfsaild_push(
|
|||||||
*/
|
*/
|
||||||
xfs_trans_ail_cursor_done(ailp, cur);
|
xfs_trans_ail_cursor_done(ailp, cur);
|
||||||
spin_unlock(&ailp->xa_lock);
|
spin_unlock(&ailp->xa_lock);
|
||||||
last_pushed_lsn = 0;
|
*last_lsn = 0;
|
||||||
return tout;
|
return tout;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -279,7 +280,6 @@ xfsaild_push(
|
|||||||
* prevents use from spinning when we can't do anything or there is
|
* prevents use from spinning when we can't do anything or there is
|
||||||
* lots of contention on the AIL lists.
|
* lots of contention on the AIL lists.
|
||||||
*/
|
*/
|
||||||
tout = 10;
|
|
||||||
lsn = lip->li_lsn;
|
lsn = lip->li_lsn;
|
||||||
flush_log = stuck = count = 0;
|
flush_log = stuck = count = 0;
|
||||||
while ((XFS_LSN_CMP(lip->li_lsn, target) < 0)) {
|
while ((XFS_LSN_CMP(lip->li_lsn, target) < 0)) {
|
||||||
@ -376,14 +376,14 @@ xfsaild_push(
|
|||||||
|
|
||||||
if (!count) {
|
if (!count) {
|
||||||
/* We're past our target or empty, so idle */
|
/* We're past our target or empty, so idle */
|
||||||
tout = 1000;
|
last_pushed_lsn = 0;
|
||||||
} else if (XFS_LSN_CMP(lsn, target) >= 0) {
|
} else if (XFS_LSN_CMP(lsn, target) >= 0) {
|
||||||
/*
|
/*
|
||||||
* We reached the target so wait a bit longer for I/O to
|
* We reached the target so wait a bit longer for I/O to
|
||||||
* complete and remove pushed items from the AIL before we
|
* complete and remove pushed items from the AIL before we
|
||||||
* start the next scan from the start of the AIL.
|
* start the next scan from the start of the AIL.
|
||||||
*/
|
*/
|
||||||
tout += 20;
|
tout = 50;
|
||||||
last_pushed_lsn = 0;
|
last_pushed_lsn = 0;
|
||||||
} else if ((stuck * 100) / count > 90) {
|
} else if ((stuck * 100) / count > 90) {
|
||||||
/*
|
/*
|
||||||
@ -395,11 +395,14 @@ xfsaild_push(
|
|||||||
* Backoff a bit more to allow some I/O to complete before
|
* Backoff a bit more to allow some I/O to complete before
|
||||||
* continuing from where we were.
|
* continuing from where we were.
|
||||||
*/
|
*/
|
||||||
tout += 10;
|
tout = 20;
|
||||||
|
} else {
|
||||||
|
/* more to do, but wait a short while before continuing */
|
||||||
|
tout = 10;
|
||||||
}
|
}
|
||||||
*last_lsn = last_pushed_lsn;
|
*last_lsn = last_pushed_lsn;
|
||||||
return tout;
|
return tout;
|
||||||
} /* xfsaild_push */
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user