| From 41c526c5af46d4c4dab7f72c99000b7fac0b9702 Mon Sep 17 00:00:00 2001 |
| From: Mikulas Patocka <mpatocka@redhat.com> |
| Date: Mon, 24 Feb 2020 10:20:30 +0100 |
| Subject: dm writecache: verify watermark during resume |
| |
| From: Mikulas Patocka <mpatocka@redhat.com> |
| |
| 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: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/md/dm-writecache.c | 12 ++++++++++-- |
| 1 file changed, 10 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/md/dm-writecache.c |
| +++ b/drivers/md/dm-writecache.c |
| @@ -625,6 +625,12 @@ static void writecache_add_to_freelist(s |
| 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; |
| @@ -646,8 +652,8 @@ static struct wc_entry *writecache_pop_f |
| 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; |
| } |
| @@ -961,6 +967,8 @@ erase_this: |
| writecache_commit_flushed(wc, false); |
| } |
| |
| + writecache_verify_watermark(wc); |
| + |
| wc_unlock(wc); |
| } |
| |