mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
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: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Mike Snitzer <snitzer@kernel.org>
This commit is contained in:
parent
3da5d2de92
commit
f144503217
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user