Commit eba33b8e authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

dm-snap: use blkdev_issue_flush instead of open coding it



Use blkdev_issue_flush, which uses an on-stack bio instead of an
opencoded version with a bio embedded into struct dm_snapshot.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20220124091107.642561-8-hch@lst.de


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 3f868c09
Loading
Loading
Loading
Loading
+1 −20
Original line number Diff line number Diff line
@@ -141,11 +141,6 @@ struct dm_snapshot {
	 * for them to be committed.
	 */
	struct bio_list bios_queued_during_merge;

	/*
	 * Flush data after merge.
	 */
	struct bio flush_bio;
};

/*
@@ -1127,17 +1122,6 @@ static void snapshot_merge_next_chunks(struct dm_snapshot *s)

static void error_bios(struct bio *bio);

static int flush_data(struct dm_snapshot *s)
{
	struct bio *flush_bio = &s->flush_bio;

	bio_reset(flush_bio);
	bio_set_dev(flush_bio, s->origin->bdev);
	flush_bio->bi_opf = REQ_OP_WRITE | REQ_PREFLUSH;

	return submit_bio_wait(flush_bio);
}

static void merge_callback(int read_err, unsigned long write_err, void *context)
{
	struct dm_snapshot *s = context;
@@ -1151,7 +1135,7 @@ static void merge_callback(int read_err, unsigned long write_err, void *context)
		goto shut;
	}

	if (flush_data(s) < 0) {
	if (blkdev_issue_flush(s->origin->bdev) < 0) {
		DMERR("Flush after merge failed: shutting down merge");
		goto shut;
	}
@@ -1340,7 +1324,6 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv)
	s->first_merging_chunk = 0;
	s->num_merging_chunks = 0;
	bio_list_init(&s->bios_queued_during_merge);
	bio_init(&s->flush_bio, NULL, 0);

	/* Allocate hash table for COW data */
	if (init_hash_tables(s)) {
@@ -1528,8 +1511,6 @@ static void snapshot_dtr(struct dm_target *ti)

	dm_exception_store_destroy(s->store);

	bio_uninit(&s->flush_bio);

	dm_put_device(ti, s->cow);

	dm_put_device(ti, s->origin);