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

Commit 6f3a303a authored by Mikulas Patocka's avatar Mikulas Patocka Committed by Greg Kroah-Hartman
Browse files

dm writecache: add cond_resched to avoid CPU hangs



commit 1edaa447d958bec24c6a79685a5790d98976fd16 upstream.

Initializing a dm-writecache device can take a long time when the
persistent memory device is large.  Add cond_resched() to a few loops
to avoid warnings that the CPU is stuck.

Cc: stable@vger.kernel.org # v4.18+
Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a6d77a5c
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -878,6 +878,7 @@ static int writecache_alloc_entries(struct dm_writecache *wc)
		struct wc_entry *e = &wc->entries[b];
		e->index = b;
		e->write_in_progress = false;
		cond_resched();
	}

	return 0;
@@ -932,6 +933,7 @@ static void writecache_resume(struct dm_target *ti)
			e->original_sector = le64_to_cpu(wme.original_sector);
			e->seq_count = le64_to_cpu(wme.seq_count);
		}
		cond_resched();
	}
#endif
	for (b = 0; b < wc->n_blocks; b++) {
@@ -1764,8 +1766,10 @@ static int init_memory(struct dm_writecache *wc)
	pmem_assign(sb(wc)->n_blocks, cpu_to_le64(wc->n_blocks));
	pmem_assign(sb(wc)->seq_count, cpu_to_le64(0));

	for (b = 0; b < wc->n_blocks; b++)
	for (b = 0; b < wc->n_blocks; b++) {
		write_original_sector_seq_count(wc, &wc->entries[b], -1, -1);
		cond_resched();
	}

	writecache_flush_all_metadata(wc);
	writecache_commit_flushed(wc, false);