block: add a blk_nointegrity_register helper
authorChristoph Hellwig <hch@lst.de>
Thu, 9 Jun 2022 07:34:12 +0000 (09:34 +0200)
committerChristoph Hellwig <hch@lst.de>
Thu, 9 Jun 2022 07:35:31 +0000 (09:35 +0200)
Add a simple helper for drivers that want to register non-integrity
metadata and swith dm-integrity and btt over to use it.

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

index 820ee4c304f99fc818ee388c973e4135d5d01302..a6f31596010d88c22f69f36256d8e43cb389ea41 100644 (file)
@@ -390,6 +390,23 @@ void blk_integrity_init(struct gendisk *disk)
 #endif
 }
 
+void blk_nointegrity_register(struct gendisk *disk, unsigned char meta_size,
+               u8 interval_exp)
+{
+       struct blk_integrity *bi = &disk->queue->integrity;
+
+       bi->flags = 0;
+       bi->profile = &nop_profile;
+       bi->tuple_size = meta_size;
+       bi->tag_size = meta_size;
+       if (interval_exp)
+               bi->interval_exp = interval_exp;
+       else
+               bi->interval_exp = ilog2(queue_logical_block_size(disk->queue));
+       blk_integrity_init(disk);
+}
+EXPORT_SYMBOL(blk_nointegrity_register);
+
 /**
  * blk_integrity_register - Register a gendisk as being integrity-capable
  * @disk:      struct gendisk pointer to make integrity-aware
index a88539c8f3b39db3dd55ed22ffb0bff69f6806dc..e4b02182e3b73e8e74ac7c5d2c01e0e23ffb8f4b 100644 (file)
@@ -3506,14 +3506,9 @@ try_smaller_buffer:
 static void dm_integrity_set(struct dm_target *ti, struct dm_integrity_c *ic)
 {
        struct gendisk *disk = dm_disk(dm_table_get_md(ti->table));
-       struct blk_integrity bi;
 
-       memset(&bi, 0, sizeof(bi));
-       bi.tuple_size = ic->tag_size;
-       bi.tag_size = bi.tuple_size;
-       bi.interval_exp = ic->sb->log2_sectors_per_block + SECTOR_SHIFT;
-
-       blk_integrity_register(disk, &bi);
+       blk_nointegrity_register(disk, ic->tag_size,
+                       ic->sb->log2_sectors_per_block + SECTOR_SHIFT);
        blk_queue_max_integrity_segments(disk->queue, UINT_MAX);
 }
 
index 2597e82cd7c3f161ec42494466a795c205b6865c..308e1711c8fa328204a1bcb4b3b4d09f30b91081 100644 (file)
@@ -1513,24 +1513,6 @@ static const struct block_device_operations btt_fops = {
        .getgeo =               btt_getgeo,
 };
 
-static int nd_integrity_init(struct gendisk *disk, unsigned long meta_size)
-{
-       struct blk_integrity bi;
-
-       if (meta_size == 0)
-               return 0;
-
-       memset(&bi, 0, sizeof(bi));
-
-       bi.tuple_size = meta_size;
-       bi.tag_size = meta_size;
-
-       blk_integrity_register(disk, &bi);
-       blk_queue_max_integrity_segments(disk->queue, 1);
-
-       return 0;
-}
-
 static int btt_blk_init(struct btt *btt)
 {
        struct nd_btt *nd_btt = btt->nd_btt;
@@ -1551,9 +1533,8 @@ static int btt_blk_init(struct btt *btt)
        blk_queue_flag_set(QUEUE_FLAG_NONROT, btt->btt_disk->queue);
 
        if (btt_meta_size(btt) && IS_ENABLED(CONFIG_BLK_DEV_INTEGRITY)) {
-               rc = nd_integrity_init(btt->btt_disk, btt_meta_size(btt));
-               if (rc)
-                       goto out_cleanup_disk;
+               blk_nointegrity_register(btt->btt_disk, btt_meta_size(btt), 0);
+               blk_queue_max_integrity_segments(btt->btt_disk->queue, 1);
        }
 
        set_capacity(btt->btt_disk, btt->nlba * btt->sector_size >> 9);
index 0149efdac878155e4d5f377bd40ad72eb1f7ea3b..1c9ccfe38edf87667974a3fa4559a96893f79add 100644 (file)
@@ -37,6 +37,8 @@ struct blk_integrity_profile {
 
 #ifdef CONFIG_BLK_DEV_INTEGRITY
 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_unregister(struct gendisk *);
 int blk_integrity_compare(struct gendisk *, struct gendisk *);
 int blk_rq_map_integrity_sg(struct request_queue *, struct bio *,
@@ -145,6 +147,10 @@ static inline void blk_integrity_register(struct gendisk *d,
                                         struct blk_integrity *b)
 {
 }
+static inline void blk_nointegrity_register(struct gendisk *disk,
+               unsigned char meta_size, u8 interval_exp)
+{
+}
 static inline void blk_integrity_unregister(struct gendisk *d)
 {
 }