mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-04 04:04:19 +00:00
dm writecache: have ssd writeback wait if the kcopyd workqueue is busy
Make dm-writecache wait if the kcopyd workqueue is busy (as will happen if waiting for page allocation or inside submit_bio). This change improves performance of "mkfs.ext2" by approximately 20% on one testbed. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
parent
8c77f1cb84
commit
293128b1ef
@ -980,3 +980,9 @@ void dm_kcopyd_client_destroy(struct dm_kcopyd_client *kc)
|
||||
kfree(kc);
|
||||
}
|
||||
EXPORT_SYMBOL(dm_kcopyd_client_destroy);
|
||||
|
||||
void dm_kcopyd_client_flush(struct dm_kcopyd_client *kc)
|
||||
{
|
||||
flush_workqueue(kc->kcopyd_wq);
|
||||
}
|
||||
EXPORT_SYMBOL(dm_kcopyd_client_flush);
|
||||
|
@ -1812,6 +1812,11 @@ static void writecache_writeback(struct work_struct *work)
|
||||
struct writeback_list wbl;
|
||||
unsigned long n_walked;
|
||||
|
||||
if (!WC_MODE_PMEM(wc)) {
|
||||
/* Wait for any active kcopyd work on behalf of ssd writeback */
|
||||
dm_kcopyd_client_flush(wc->dm_kcopyd);
|
||||
}
|
||||
|
||||
wc_lock(wc);
|
||||
restart:
|
||||
if (writecache_has_error(wc)) {
|
||||
|
@ -51,6 +51,7 @@ MODULE_PARM_DESC(name, description)
|
||||
struct dm_kcopyd_client;
|
||||
struct dm_kcopyd_client *dm_kcopyd_client_create(struct dm_kcopyd_throttle *throttle);
|
||||
void dm_kcopyd_client_destroy(struct dm_kcopyd_client *kc);
|
||||
void dm_kcopyd_client_flush(struct dm_kcopyd_client *kc);
|
||||
|
||||
/*
|
||||
* Submit a copy job to kcopyd. This is built on top of the
|
||||
|
Loading…
Reference in New Issue
Block a user