Skip to content

Commit 6170697

Browse files
Mikulas PatockaMike Snitzer
authored andcommitted
dm: introduce the target flag mempool_needs_integrity
This commit introduces the dm target flag mempool_needs_integrity. When the flag is set, device mapper will call bioset_integrity_create on it's bio sets. The target can then call bio_integrity_alloc on the bios allocated from the table's mempool. Signed-off-by: Mikulas Patocka <[email protected]> Signed-off-by: Mike Snitzer <[email protected]>
1 parent d176fad commit 6170697

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

drivers/md/dm-table.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,6 +1050,7 @@ static int dm_table_alloc_md_mempools(struct dm_table *t, struct mapped_device *
10501050
unsigned int min_pool_size = 0, pool_size;
10511051
struct dm_md_mempools *pools;
10521052
unsigned int bioset_flags = 0;
1053+
bool mempool_needs_integrity = t->integrity_supported;
10531054

10541055
if (unlikely(type == DM_TYPE_NONE)) {
10551056
DMERR("no table type is set, can't allocate mempools");
@@ -1074,6 +1075,8 @@ static int dm_table_alloc_md_mempools(struct dm_table *t, struct mapped_device *
10741075

10751076
per_io_data_size = max(per_io_data_size, ti->per_io_data_size);
10761077
min_pool_size = max(min_pool_size, ti->num_flush_bios);
1078+
1079+
mempool_needs_integrity |= ti->mempool_needs_integrity;
10771080
}
10781081
pool_size = max(dm_get_reserved_bio_based_ios(), min_pool_size);
10791082
front_pad = roundup(per_io_data_size,
@@ -1083,13 +1086,13 @@ static int dm_table_alloc_md_mempools(struct dm_table *t, struct mapped_device *
10831086
__alignof__(struct dm_io)) + DM_IO_BIO_OFFSET;
10841087
if (bioset_init(&pools->io_bs, pool_size, io_front_pad, bioset_flags))
10851088
goto out_free_pools;
1086-
if (t->integrity_supported &&
1089+
if (mempool_needs_integrity &&
10871090
bioset_integrity_create(&pools->io_bs, pool_size))
10881091
goto out_free_pools;
10891092
init_bs:
10901093
if (bioset_init(&pools->bs, pool_size, front_pad, 0))
10911094
goto out_free_pools;
1092-
if (t->integrity_supported &&
1095+
if (mempool_needs_integrity &&
10931096
bioset_integrity_create(&pools->bs, pool_size))
10941097
goto out_free_pools;
10951098

include/linux/device-mapper.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,12 @@ struct dm_target {
405405
* support it.
406406
*/
407407
bool flush_bypasses_map:1;
408+
409+
/*
410+
* Set if the target calls bio_integrity_alloc on bios received
411+
* in the map method.
412+
*/
413+
bool mempool_needs_integrity:1;
408414
};
409415

410416
void *dm_per_bio_data(struct bio *bio, size_t data_size);

0 commit comments

Comments
 (0)