diff options
author | Mikulas Patocka <mpatocka@redhat.com> | 2014-07-28 23:49:41 +0200 |
---|---|---|
committer | Mike Snitzer <snitzer@redhat.com> | 2014-08-01 18:30:36 +0200 |
commit | 99eb1908e643609e83454c6fbcbb59f9055abf09 (patch) | |
tree | dd48bfd8f2521f35b75e839502727d76a91b6481 /drivers/md/dm-switch.c | |
parent | dm cache: set minimum_io_size to cache's data block size (diff) | |
download | linux-99eb1908e643609e83454c6fbcbb59f9055abf09.tar.xz linux-99eb1908e643609e83454c6fbcbb59f9055abf09.zip |
dm switch: factor out switch_region_table_read
Move code that reads the table to a switch_region_table_read.
It will be needed for the next commit. No functional change.
Tested-by: Jay Wang <jwang@nimblestorage.com>
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Diffstat (limited to 'drivers/md/dm-switch.c')
-rw-r--r-- | drivers/md/dm-switch.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/md/dm-switch.c b/drivers/md/dm-switch.c index 09a688b3d48c..c40e0954cec8 100644 --- a/drivers/md/dm-switch.c +++ b/drivers/md/dm-switch.c @@ -137,13 +137,23 @@ static void switch_get_position(struct switch_ctx *sctx, unsigned long region_nr *bit *= sctx->region_table_entry_bits; } +static unsigned switch_region_table_read(struct switch_ctx *sctx, unsigned long region_nr) +{ + unsigned long region_index; + unsigned bit; + + switch_get_position(sctx, region_nr, ®ion_index, &bit); + + return (ACCESS_ONCE(sctx->region_table[region_index]) >> bit) & + ((1 << sctx->region_table_entry_bits) - 1); +} + /* * Find which path to use at given offset. */ static unsigned switch_get_path_nr(struct switch_ctx *sctx, sector_t offset) { - unsigned long region_index; - unsigned bit, path_nr; + unsigned path_nr; sector_t p; p = offset; @@ -152,9 +162,7 @@ static unsigned switch_get_path_nr(struct switch_ctx *sctx, sector_t offset) else sector_div(p, sctx->region_size); - switch_get_position(sctx, p, ®ion_index, &bit); - path_nr = (ACCESS_ONCE(sctx->region_table[region_index]) >> bit) & - ((1 << sctx->region_table_entry_bits) - 1); + path_nr = switch_region_table_read(sctx, p); /* This can only happen if the processor uses non-atomic stores. */ if (unlikely(path_nr >= sctx->nr_paths)) |