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

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
...@@ -85,7 +85,7 @@ static sector_t linear_map_sector(struct dm_target *ti, sector_t bi_sector) ...@@ -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); 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; struct linear_c *lc = ti->private;
......
...@@ -268,7 +268,7 @@ static int stripe_map_range(struct stripe_c *sc, struct bio *bio, ...@@ -268,7 +268,7 @@ static int stripe_map_range(struct stripe_c *sc, struct bio *bio,
return DM_MAPIO_SUBMITTED; 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; struct stripe_c *sc = ti->private;
uint32_t stripe; uint32_t stripe;
......
...@@ -1423,10 +1423,17 @@ static void __map_bio(struct bio *clone) ...@@ -1423,10 +1423,17 @@ static void __map_bio(struct bio *clone)
*/ */
if (unlikely(dm_emulate_zone_append(md))) if (unlikely(dm_emulate_zone_append(md)))
r = dm_zone_map_bio(tio); 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 else
r = ti->type->map(ti, clone); r = ti->type->map(ti, clone);
} else }
r = ti->type->map(ti, clone);
switch (r) { switch (r) {
case DM_MAPIO_SUBMITTED: case DM_MAPIO_SUBMITTED:
......
...@@ -188,9 +188,11 @@ void dm_kobject_release(struct kobject *kobj); ...@@ -188,9 +188,11 @@ void dm_kobject_release(struct kobject *kobj);
/* /*
* Targets for linear and striped mappings * Targets for linear and striped mappings
*/ */
int linear_map(struct dm_target *ti, struct bio *bio);
int dm_linear_init(void); int dm_linear_init(void);
void dm_linear_exit(void); void dm_linear_exit(void);
int stripe_map(struct dm_target *ti, struct bio *bio);
int dm_stripe_init(void); int dm_stripe_init(void);
void dm_stripe_exit(void); void dm_stripe_exit(void);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment