Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e782eff5 authored by Mike Snitzer's avatar Mike Snitzer
Browse files

dm cache: avoid preallocation if no work in writeback_some_dirty_blocks()



Refactor writeback_some_dirty_blocks() to avoid prealloc_data_structs()
if the policy doesn't have any dirty blocks ready for writeback.

Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
parent 386cb7cd
Loading
Loading
Loading
Loading
+4 −9
Original line number Diff line number Diff line
@@ -2061,7 +2061,6 @@ static void process_deferred_writethrough_bios(struct cache *cache)

static void writeback_some_dirty_blocks(struct cache *cache)
{
	int r = 0;
	dm_oblock_t oblock;
	dm_cblock_t cblock;
	struct prealloc structs;
@@ -2071,15 +2070,11 @@ static void writeback_some_dirty_blocks(struct cache *cache)
	memset(&structs, 0, sizeof(structs));

	while (spare_migration_bandwidth(cache)) {
		if (prealloc_data_structs(cache, &structs))
			break;

		r = policy_writeback_work(cache->policy, &oblock, &cblock, busy);
		if (r)
			break;
		if (policy_writeback_work(cache->policy, &oblock, &cblock, busy))
			break; /* no work to do */

		r = get_cell(cache, oblock, &structs, &old_ocell);
		if (r) {
		if (prealloc_data_structs(cache, &structs) ||
		    get_cell(cache, oblock, &structs, &old_ocell)) {
			policy_set_dirty(cache->policy, oblock);
			break;
		}