diff options
| author | Dave Airlie <[email protected]> | 2020-03-11 07:27:21 +1000 | 
|---|---|---|
| committer | Dave Airlie <[email protected]> | 2020-03-11 07:27:21 +1000 | 
| commit | d3bd37f587b4438d47751d0f1d5aaae3d39bd416 (patch) | |
| tree | 9414a8fd1ca74c47fe1a3966e0a22469ac0b73a3 /drivers/md/dm-writecache.c | |
| parent | 60347451ddb0646c1a9cc5b9581e5bcf648ad1aa (diff) | |
| parent | 2c523b344dfa65a3738e7039832044aa133c75fb (diff) | |
Merge v5.6-rc5 into drm-next
Requested my mripard for some misc patches that need this as a base.
Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'drivers/md/dm-writecache.c')
| -rw-r--r-- | drivers/md/dm-writecache.c | 16 | 
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/md/dm-writecache.c b/drivers/md/dm-writecache.c index b9e27e37a943..a09bdc000e64 100644 --- a/drivers/md/dm-writecache.c +++ b/drivers/md/dm-writecache.c @@ -625,6 +625,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, sector_t expected_sector)  {  	struct wc_entry *e; @@ -650,8 +656,8 @@ static struct wc_entry *writecache_pop_from_freelist(struct dm_writecache *wc, s  		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;  } @@ -842,7 +848,7 @@ static void writecache_suspend(struct dm_target *ti)  	}  	wc_unlock(wc); -	flush_workqueue(wc->writeback_wq); +	drain_workqueue(wc->writeback_wq);  	wc_lock(wc);  	if (flush_on_suspend) @@ -965,6 +971,8 @@ erase_this:  		writecache_commit_flushed(wc, false);  	} +	writecache_verify_watermark(wc); +  	wc_unlock(wc);  } @@ -2312,7 +2320,7 @@ static void writecache_status(struct dm_target *ti, status_type_t type,  static struct target_type writecache_target = {  	.name			= "writecache", -	.version		= {1, 1, 1}, +	.version		= {1, 2, 0},  	.module			= THIS_MODULE,  	.ctr			= writecache_ctr,  	.dtr			= writecache_dtr,  |