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

dm: shortcut the calls to linear_map and stripe_map



Shortcut the calls to linear_map and stripe_map, so that they don't suffer
the overhead of retpolines used for indirect calls.

Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
Signed-off-by: default avatarMike Snitzer <snitzer@kernel.org>
parent 3da5d2de
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -85,7 +85,7 @@ static sector_t linear_map_sector(struct dm_target *ti, sector_t bi_sector)
	return lc->start + dm_target_offset(ti, bi_sector);
}

static int linear_map(struct dm_target *ti, struct bio *bio)
int linear_map(struct dm_target *ti, struct bio *bio)
{
	struct linear_c *lc = ti->private;

+1 −1
Original line number Diff line number Diff line
@@ -268,7 +268,7 @@ static int stripe_map_range(struct stripe_c *sc, struct bio *bio,
	return DM_MAPIO_SUBMITTED;
}

static int stripe_map(struct dm_target *ti, struct bio *bio)
int stripe_map(struct dm_target *ti, struct bio *bio)
{
	struct stripe_c *sc = ti->private;
	uint32_t stripe;
+9 −2
Original line number Diff line number Diff line
@@ -1423,10 +1423,17 @@ static void __map_bio(struct bio *clone)
		 */
		if (unlikely(dm_emulate_zone_append(md)))
			r = dm_zone_map_bio(tio);
		else
			goto do_map;
	} else {
do_map:
		if (likely(ti->type->map == linear_map))
			r = linear_map(ti, clone);
		else if (ti->type->map == stripe_map)
			r = stripe_map(ti, clone);
		else
			r = ti->type->map(ti, clone);
	} else
		r = ti->type->map(ti, clone);
	}

	switch (r) {
	case DM_MAPIO_SUBMITTED:
+2 −0
Original line number Diff line number Diff line
@@ -188,9 +188,11 @@ void dm_kobject_release(struct kobject *kobj);
/*
 * Targets for linear and striped mappings
 */
int linear_map(struct dm_target *ti, struct bio *bio);
int dm_linear_init(void);
void dm_linear_exit(void);

int stripe_map(struct dm_target *ti, struct bio *bio);
int dm_stripe_init(void);
void dm_stripe_exit(void);