]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
writeback: use older_than_this_is_set instead of magic older_than_this == 0
authorJan Kara <jack@suse.cz>
Tue, 5 Nov 2013 05:55:45 +0000 (16:55 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Tue, 5 Nov 2013 05:55:45 +0000 (16:55 +1100)
Currently we use 0 as a special value of work->older_than_this to
indicate that wb_writeback() should set work->older_that_this to current
time. This works but it is a bit magic. So use a special flag in
work_struct for that.

Also fixup writeback from workqueue rescuer to include all inodes.

Signed-off-by: Jan Kara <jack@suse.cz>
Cc: Fengguang Wu <fengguang.wu@intel.com>
Cc: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/fs-writeback.c

index 70837dadad72f83be73cb96ef8e010fc643f7ee6..65e66caec76f177f31dbe0c1bec4590a72b4c94c 100644 (file)
 struct wb_writeback_work {
        long nr_pages;
        struct super_block *sb;
+       /*
+        * Write only inodes dirtied before this time. Don't forget to set
+        * older_than_this_is_set when you set this.
+        */
        unsigned long older_than_this;
        enum writeback_sync_modes sync_mode;
        unsigned int tagged_writepages:1;
@@ -46,6 +50,7 @@ struct wb_writeback_work {
        unsigned int range_cyclic:1;
        unsigned int for_background:1;
        unsigned int for_sync:1;        /* sync(2) WB_SYNC_ALL writeback */
+       unsigned int older_than_this_is_set:1;
        enum wb_reason reason;          /* why was writeback initiated? */
 
        struct list_head list;          /* pending work list */
@@ -732,6 +737,8 @@ static long writeback_inodes_wb(struct bdi_writeback *wb, long nr_pages,
                .sync_mode      = WB_SYNC_NONE,
                .range_cyclic   = 1,
                .reason         = reason,
+               .older_than_this = jiffies,
+               .older_than_this_is_set = 1,
        };
 
        spin_lock(&wb->list_lock);
@@ -793,7 +800,7 @@ static long wb_writeback(struct bdi_writeback *wb,
        struct inode *inode;
        long progress;
 
-       if (!work->older_than_this)
+       if (!work->older_than_this_is_set)
                work->older_than_this = jiffies;
 
        spin_lock(&wb->list_lock);
@@ -1356,6 +1363,7 @@ void sync_inodes_sb(struct super_block *sb, unsigned long older_than_this)
                .sync_mode      = WB_SYNC_ALL,
                .nr_pages       = LONG_MAX,
                .older_than_this = older_than_this,
+               .older_than_this_is_set = 1,
                .range_cyclic   = 0,
                .done           = &done,
                .reason         = WB_REASON_SYNC,