]> www.infradead.org Git - users/hch/block.git/commitdiff
block: add a blk_integrity_copy helper
authorChristoph Hellwig <hch@lst.de>
Thu, 9 Jun 2022 06:25:44 +0000 (08:25 +0200)
committerChristoph Hellwig <hch@lst.de>
Thu, 9 Jun 2022 07:36:52 +0000 (09:36 +0200)
Add a helper to copy the integrity configuration from one gendisk to
another to prepare for further refactoring.

Signed-off-by: Christoph Hellwig <hch@lst.de>
block/blk-integrity.c
drivers/md/dm-table.c
drivers/md/md.c
include/linux/blk-integrity.h

index a6f31596010d88c22f69f36256d8e43cb389ea41..fdd925abf4829d3237449281c9e763f9f5a12851 100644 (file)
@@ -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
index 0e833a154b31dfc87e9c1bf7713a36dd8ae596f7..9bdbddbb8f557f5d94743a68ec8e15aae0115df3 100644 (file)
@@ -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;
        }
 
index 8273ac5eef06a30fd9ccfcdc7b33a241a07f9f3d..c1d6165ec6da9457ee87b5c3867c2268fc547027 100644 (file)
@@ -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) ||
index 1c9ccfe38edf87667974a3fa4559a96893f79add..23bf81bfc7237c427367e8c8ce327992f9b777c1 100644 (file)
@@ -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)
 {
 }