From 2151249eaabb48151cff6364adb4054b3497d62d Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Thu, 22 Sep 2016 10:44:41 -0400 Subject: dm bitset: add dm_bitset_new() A more efficient way of creating a populated bitset. Signed-off-by: Joe Thornber Signed-off-by: Mike Snitzer --- drivers/md/persistent-data/dm-bitset.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'drivers/md/persistent-data/dm-bitset.h') diff --git a/drivers/md/persistent-data/dm-bitset.h b/drivers/md/persistent-data/dm-bitset.h index 017c0d42cdbf..a08636898a43 100644 --- a/drivers/md/persistent-data/dm-bitset.h +++ b/drivers/md/persistent-data/dm-bitset.h @@ -92,6 +92,22 @@ void dm_disk_bitset_init(struct dm_transaction_manager *tm, */ int dm_bitset_empty(struct dm_disk_bitset *info, dm_block_t *new_root); +/* + * Creates a new bitset populated with values provided by a callback + * function. This is more efficient than creating an empty bitset, + * resizing, and then setting values since that process incurs a lot of + * copying. + * + * info - describes the array + * root - the root block of the array on disk + * size - the number of entries in the array + * fn - the callback + * context - passed to the callback + */ +typedef int (*bit_value_fn)(uint32_t index, bool *value, void *context); +int dm_bitset_new(struct dm_disk_bitset *info, dm_block_t *root, + uint32_t size, bit_value_fn fn, void *context); + /* * Resize the bitset. * -- cgit v1.2.3