summaryrefslogtreecommitdiffstats
path: root/drivers/md/raid5.h
diff options
context:
space:
mode:
authorShaohua Li <shli@fb.com>2017-02-15 19:37:32 -0800
committerShaohua Li <shli@fb.com>2017-03-16 16:55:51 -0700
commit535ae4eb1225f19e1d1848c65eafea8b7e9112f4 (patch)
tree524bee9d4ff71545c0ce81ee4dbe5913ae9eed44 /drivers/md/raid5.h
parent818da59f97d6764edb91fa9d1f63d333d54eb999 (diff)
downloadlinux-535ae4eb1225f19e1d1848c65eafea8b7e9112f4.tar.gz
linux-535ae4eb1225f19e1d1848c65eafea8b7e9112f4.tar.bz2
linux-535ae4eb1225f19e1d1848c65eafea8b7e9112f4.zip
md/raid5: prioritize stripes for writeback
In raid5-cache writeback mode, we have two types of stripes to handle. - stripes which aren't cached yet - stripes which are cached and flushing out to raid disks Upperlayer is more sensistive to latency of the first type of stripes generally. But we only one handle list for all these stripes, where the two types of stripes are mixed together. When reclaim flushes a lot of stripes, the first type of stripes could be noticeably delayed. On the other hand, if the log space is tight, we'd like to handle the second type of stripes faster and free log space. This patch destinguishes the two types stripes. They are added into different handle list. When we try to get a stripe to handl, we prefer the first type of stripes unless log space is tight. This should have no impact for !writeback case. Signed-off-by: Shaohua Li <shli@fb.com>
Diffstat (limited to 'drivers/md/raid5.h')
-rw-r--r--drivers/md/raid5.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/md/raid5.h b/drivers/md/raid5.h
index 4bb27b97bf6b..6b9d2e839e6d 100644
--- a/drivers/md/raid5.h
+++ b/drivers/md/raid5.h
@@ -542,6 +542,7 @@ struct r5worker {
struct r5worker_group {
struct list_head handle_list;
+ struct list_head loprio_list;
struct r5conf *conf;
struct r5worker *workers;
int stripes_cnt;
@@ -608,6 +609,7 @@ struct r5conf {
*/
struct list_head handle_list; /* stripes needing handling */
+ struct list_head loprio_list; /* low priority stripes */
struct list_head hold_list; /* preread ready stripes */
struct list_head delayed_list; /* stripes that have plugged requests */
struct list_head bitmap_list; /* stripes delaying awaiting bitmap update */