From 932858280cc6106d4780ea950c1a61d45c9c1715 Mon Sep 17 00:00:00 2001 From: Christoph Hellwig Date: Thu, 9 Jun 2022 08:25:44 +0200 Subject: [PATCH] block: add a blk_integrity_copy helper Add a helper to copy the integrity configuration from one gendisk to another to prepare for further refactoring. Signed-off-by: Christoph Hellwig --- block/blk-integrity.c | 8 ++++++++ drivers/md/dm-table.c | 3 +-- drivers/md/md.c | 3 +-- include/linux/blk-integrity.h | 4 ++++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/block/blk-integrity.c b/block/blk-integrity.c index a6f31596010d..fdd925abf482 100644 --- a/block/blk-integrity.c +++ b/block/blk-integrity.c @@ -433,6 +433,14 @@ void blk_integrity_register(struct gendisk *disk, struct blk_integrity *template } EXPORT_SYMBOL(blk_integrity_register); +void blk_integrity_copy(struct gendisk *to, struct gendisk *from) +{ + memcpy(&to->queue->integrity, &from->queue->integrity, + sizeof(to->queue->integrity)); + blk_integrity_init(to); +} +EXPORT_SYMBOL(blk_integrity_copy); + /** * blk_integrity_unregister - Unregister block integrity profile * @disk: disk whose integrity profile to unregister diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index 0e833a154b31..9bdbddbb8f55 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c @@ -1169,8 +1169,7 @@ static int dm_table_register_integrity(struct dm_table *t) * Register integrity profile during table load; we can do * this because the final profile must match during resume. */ - blk_integrity_register(dm_disk(md), - blk_get_integrity(template_disk)); + blk_integrity_copy(dm_disk(md), template_disk); return 0; } diff --git a/drivers/md/md.c b/drivers/md/md.c index 8273ac5eef06..c1d6165ec6da 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -2333,8 +2333,7 @@ int md_integrity_register(struct mddev *mddev) * All component devices are integrity capable and have matching * profiles, register the common profile for the md device. */ - blk_integrity_register(mddev->gendisk, - bdev_get_integrity(reference->bdev)); + blk_integrity_copy(mddev->gendisk, reference->bdev->bd_disk); pr_debug("md: data integrity enabled on %s\n", mdname(mddev)); if (bioset_integrity_create(&mddev->bio_set, BIO_POOL_SIZE) || diff --git a/include/linux/blk-integrity.h b/include/linux/blk-integrity.h index 1c9ccfe38edf..23bf81bfc723 100644 --- a/include/linux/blk-integrity.h +++ b/include/linux/blk-integrity.h @@ -39,6 +39,7 @@ struct blk_integrity_profile { void blk_integrity_register(struct gendisk *, struct blk_integrity *); void blk_nointegrity_register(struct gendisk *disk, unsigned char meta_size, u8 interval_exp); +void blk_integrity_copy(struct gendisk *to, struct gendisk *from); void blk_integrity_unregister(struct gendisk *); int blk_integrity_compare(struct gendisk *, struct gendisk *); int blk_rq_map_integrity_sg(struct request_queue *, struct bio *, @@ -151,6 +152,9 @@ static inline void blk_nointegrity_register(struct gendisk *disk, unsigned char meta_size, u8 interval_exp) { } +static inline void blk_integrity_copy(struct gendisk *to, struct gendisk *from) +{ +} static inline void blk_integrity_unregister(struct gendisk *d) { } -- 2.50.1