From: Christoph Hellwig Date: Thu, 9 Jun 2022 07:34:12 +0000 (+0200) Subject: block: add a blk_nointegrity_register helper X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=1cc06a1659b6a6f22238cdfd9c607c43f2105ddb;p=users%2Fhch%2Fblock.git block: add a blk_nointegrity_register helper 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 --- diff --git a/block/blk-integrity.c b/block/blk-integrity.c index 820ee4c304f9..a6f31596010d 100644 --- a/block/blk-integrity.c +++ b/block/blk-integrity.c @@ -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 diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c index a88539c8f3b3..e4b02182e3b7 100644 --- a/drivers/md/dm-integrity.c +++ b/drivers/md/dm-integrity.c @@ -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); } diff --git a/drivers/nvdimm/btt.c b/drivers/nvdimm/btt.c index 2597e82cd7c3..308e1711c8fa 100644 --- a/drivers/nvdimm/btt.c +++ b/drivers/nvdimm/btt.c @@ -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); diff --git a/include/linux/blk-integrity.h b/include/linux/blk-integrity.h index 0149efdac878..1c9ccfe38edf 100644 --- a/include/linux/blk-integrity.h +++ b/include/linux/blk-integrity.h @@ -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) { }