Commit 293128b1 authored by Mikulas Patocka's avatar Mikulas Patocka Committed by Mike Snitzer
Browse files

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: default avatarMikulas Patocka <mpatocka@redhat.com>
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
parent 8c77f1cb
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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);
+5 −0
Original line number Diff line number Diff line
@@ -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)) {
+1 −0
Original line number Diff line number Diff line
@@ -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