| From 69f25e4b01b69a0b40995d9eb5580e6863f04163 Mon Sep 17 00:00:00 2001 |
| From: Mikulas Patocka <mpatocka@redhat.com> |
| Date: Mon, 24 Feb 2020 10:20:30 +0100 |
| Subject: [PATCH] dm writecache: verify watermark during resume |
| |
| commit 41c526c5af46d4c4dab7f72c99000b7fac0b9702 upstream. |
| |
| Verify the watermark upon resume - so that if the target is reloaded |
| with lower watermark, it will start the cleanup process immediately. |
| |
| Fixes: 48debafe4f2f ("dm: add writecache target") |
| Cc: stable@vger.kernel.org # 4.18+ |
| Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> |
| Signed-off-by: Mike Snitzer <snitzer@redhat.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/md/dm-writecache.c b/drivers/md/dm-writecache.c |
| index 763848b6b259..80fb617748b0 100644 |
| --- a/drivers/md/dm-writecache.c |
| +++ b/drivers/md/dm-writecache.c |
| @@ -626,6 +626,12 @@ static void writecache_add_to_freelist(struct dm_writecache *wc, struct wc_entry |
| wc->freelist_size++; |
| } |
| |
| +static inline void writecache_verify_watermark(struct dm_writecache *wc) |
| +{ |
| + if (unlikely(wc->freelist_size + wc->writeback_size <= wc->freelist_high_watermark)) |
| + queue_work(wc->writeback_wq, &wc->writeback_work); |
| +} |
| + |
| static struct wc_entry *writecache_pop_from_freelist(struct dm_writecache *wc) |
| { |
| struct wc_entry *e; |
| @@ -647,8 +653,8 @@ static struct wc_entry *writecache_pop_from_freelist(struct dm_writecache *wc) |
| list_del(&e->lru); |
| } |
| wc->freelist_size--; |
| - if (unlikely(wc->freelist_size + wc->writeback_size <= wc->freelist_high_watermark)) |
| - queue_work(wc->writeback_wq, &wc->writeback_work); |
| + |
| + writecache_verify_watermark(wc); |
| |
| return e; |
| } |
| @@ -962,6 +968,8 @@ static void writecache_resume(struct dm_target *ti) |
| writecache_commit_flushed(wc, false); |
| } |
| |
| + writecache_verify_watermark(wc); |
| + |
| wc_unlock(wc); |
| } |
| |
| -- |
| 2.7.4 |
| |