Commit 58f77a2196ee65510885426e65049880be841193
Committed by
Alasdair G Kergon
1 parent
3daec3b447
Exists in
master
and in
20 other branches
dm thin: use block_size_is_power_of_two
Use block_size_is_power_of_two() rather than checking sectors_per_block_shift directly. Also introduce local pool variable in get_bio_block() to eliminate redundant tc->pool dereferences. No functional change. Signed-off-by: Mike Snitzer <snitzer@redhat.com> Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Showing 1 changed file with 13 additions and 12 deletions Side-by-side Diff
drivers/md/dm-thin.c
... | ... | @@ -330,14 +330,20 @@ |
330 | 330 | * target. |
331 | 331 | */ |
332 | 332 | |
333 | +static bool block_size_is_power_of_two(struct pool *pool) | |
334 | +{ | |
335 | + return pool->sectors_per_block_shift >= 0; | |
336 | +} | |
337 | + | |
333 | 338 | static dm_block_t get_bio_block(struct thin_c *tc, struct bio *bio) |
334 | 339 | { |
340 | + struct pool *pool = tc->pool; | |
335 | 341 | sector_t block_nr = bio->bi_sector; |
336 | 342 | |
337 | - if (tc->pool->sectors_per_block_shift < 0) | |
338 | - (void) sector_div(block_nr, tc->pool->sectors_per_block); | |
343 | + if (block_size_is_power_of_two(pool)) | |
344 | + block_nr >>= pool->sectors_per_block_shift; | |
339 | 345 | else |
340 | - block_nr >>= tc->pool->sectors_per_block_shift; | |
346 | + (void) sector_div(block_nr, pool->sectors_per_block); | |
341 | 347 | |
342 | 348 | return block_nr; |
343 | 349 | } |
344 | 350 | |
... | ... | @@ -348,12 +354,12 @@ |
348 | 354 | sector_t bi_sector = bio->bi_sector; |
349 | 355 | |
350 | 356 | bio->bi_bdev = tc->pool_dev->bdev; |
351 | - if (tc->pool->sectors_per_block_shift < 0) | |
352 | - bio->bi_sector = (block * pool->sectors_per_block) + | |
353 | - sector_div(bi_sector, pool->sectors_per_block); | |
354 | - else | |
357 | + if (block_size_is_power_of_two(pool)) | |
355 | 358 | bio->bi_sector = (block << pool->sectors_per_block_shift) | |
356 | 359 | (bi_sector & (pool->sectors_per_block - 1)); |
360 | + else | |
361 | + bio->bi_sector = (block * pool->sectors_per_block) + | |
362 | + sector_div(bi_sector, pool->sectors_per_block); | |
357 | 363 | } |
358 | 364 | |
359 | 365 | static void remap_to_origin(struct thin_c *tc, struct bio *bio) |
... | ... | @@ -2423,11 +2429,6 @@ |
2423 | 2429 | bvm->bi_bdev = pt->data_dev->bdev; |
2424 | 2430 | |
2425 | 2431 | return min(max_size, q->merge_bvec_fn(q, bvm, biovec)); |
2426 | -} | |
2427 | - | |
2428 | -static bool block_size_is_power_of_two(struct pool *pool) | |
2429 | -{ | |
2430 | - return pool->sectors_per_block_shift >= 0; | |
2431 | 2432 | } |
2432 | 2433 | |
2433 | 2434 | static void set_discard_limits(struct pool_c *pt, struct queue_limits *limits) |