| From 69b62d01ec44fe0d505d89917392347732135a4d Mon Sep 17 00:00:00 2001 |
| From: Jens Axboe <jens.axboe@oracle.com> |
| Date: Mon, 17 May 2010 12:51:03 +0200 |
| Subject: writeback: disable periodic old data writeback for !dirty_writeback_centisecs |
| |
| From: Jens Axboe <jens.axboe@oracle.com> |
| |
| commit 69b62d01ec44fe0d505d89917392347732135a4d upstream. |
| |
| Prior to 2.6.32, setting /proc/sys/vm/dirty_writeback_centisecs disabled |
| periodic dirty writeback from kupdate. This got broken and now causes |
| excessive sys CPU usage if set to zero, as we'll keep beating on |
| schedule(). |
| |
| Reported-by: Justin Maggard <jmaggard10@gmail.com> |
| Signed-off-by: Jens Axboe <jens.axboe@oracle.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| fs/fs-writeback.c | 14 ++++++++++++-- |
| 1 file changed, 12 insertions(+), 2 deletions(-) |
| |
| --- a/fs/fs-writeback.c |
| +++ b/fs/fs-writeback.c |
| @@ -859,6 +859,12 @@ static long wb_check_old_data_flush(stru |
| unsigned long expired; |
| long nr_pages; |
| |
| + /* |
| + * When set to zero, disable periodic writeback |
| + */ |
| + if (!dirty_writeback_interval) |
| + return 0; |
| + |
| expired = wb->last_old_flush + |
| msecs_to_jiffies(dirty_writeback_interval * 10); |
| if (time_before(jiffies, expired)) |
| @@ -954,8 +960,12 @@ int bdi_writeback_task(struct bdi_writeb |
| break; |
| } |
| |
| - wait_jiffies = msecs_to_jiffies(dirty_writeback_interval * 10); |
| - schedule_timeout_interruptible(wait_jiffies); |
| + if (dirty_writeback_interval) { |
| + wait_jiffies = msecs_to_jiffies(dirty_writeback_interval * 10); |
| + schedule_timeout_interruptible(wait_jiffies); |
| + } else |
| + schedule(); |
| + |
| try_to_freeze(); |
| } |
| |