Message ID | 20230503102719epcms2p457434fefd535ee43d502eff854227919@epcms2p4 (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Change the integrity configuration method in block | expand |
Hi Jinyoung, kernel test robot noticed the following build errors: [auto build test ERROR on axboe-block/for-next] [also build test ERROR on mkp-scsi/for-next jejb-scsi/for-next linus/master v6.3 next-20230428] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Jinyoung-CHOI/block-blk-integiry-add-helper-functions-for-bio_integrity_add_page/20230503-183015 base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next patch link: https://lore.kernel.org/r/20230503102719epcms2p457434fefd535ee43d502eff854227919%40epcms2p4 patch subject: [PATCH 14/15] block: blk-integrity: change sg-table configuration method for integrity config: um-i386_defconfig (https://download.01.org/0day-ci/archive/20230503/202305032213.JHLycY4F-lkp@intel.com/config) compiler: gcc-11 (Debian 11.3.0-12) 11.3.0 reproduce (this is a W=1 build): # https://github.com/intel-lab-lkp/linux/commit/7e4810d74ca92ed35bbc73cb09a4baa1dacfbc96 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Jinyoung-CHOI/block-blk-integiry-add-helper-functions-for-bio_integrity_add_page/20230503-183015 git checkout 7e4810d74ca92ed35bbc73cb09a4baa1dacfbc96 # save the config file mkdir build_dir && cp config build_dir/.config make W=1 O=build_dir ARCH=um SUBARCH=i386 olddefconfig make W=1 O=build_dir ARCH=um SUBARCH=i386 SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> | Link: https://lore.kernel.org/oe-kbuild-all/202305032213.JHLycY4F-lkp@intel.com/ All errors (new ones prefixed by >>): In file included from include/linux/blk-integrity.h:5, from block/blk-merge.c:9: include/linux/blk-mq.h: In function 'blk_rq_bio_prep': include/linux/blk-mq.h:972:19: error: 'struct request' has no member named 'nr_integrity_segments' 972 | rq->nr_integrity_segments = bio_integrity(bio)->bip_vcnt; | ^~ include/linux/blk-mq.h:972:63: warning: dereferencing 'void *' pointer 972 | rq->nr_integrity_segments = bio_integrity(bio)->bip_vcnt; | ^~ include/linux/blk-mq.h:972:63: error: request for member 'bip_vcnt' in something not a structure or union block/blk-merge.c: At top level: >> block/blk-merge.c:536:5: error: redefinition of 'blk_rq_map_integrity_sg' 536 | int blk_rq_map_integrity_sg(struct request_queue *q, struct bio *bio, | ^~~~~~~~~~~~~~~~~~~~~~~ In file included from block/blk-merge.c:9: include/linux/blk-integrity.h:132:19: note: previous definition of 'blk_rq_map_integrity_sg' with type 'int(struct request_queue *, struct bio *, struct scatterlist *)' 132 | static inline int blk_rq_map_integrity_sg(struct request_queue *q, | ^~~~~~~~~~~~~~~~~~~~~~~ block/blk-merge.c: In function 'blk_rq_map_integrity_sg': >> block/blk-merge.c:546:56: error: 'struct bio' has no member named 'bi_integrity' 546 | struct bio_integrity_payload *bip = bio->bi_integrity; | ^~ >> block/blk-merge.c:548:17: error: implicit declaration of function 'bip_for_each_mp_bvec'; did you mean 'for_each_mp_bvec'? [-Werror=implicit-function-declaration] 548 | bip_for_each_mp_bvec(iv, bip, iter) { | ^~~~~~~~~~~~~~~~~~~~ | for_each_mp_bvec >> block/blk-merge.c:548:52: error: expected ';' before '{' token 548 | bip_for_each_mp_bvec(iv, bip, iter) { | ^~ | ; block/blk-merge.c:543:14: warning: unused variable 'new_bio' [-Wunused-variable] 543 | bool new_bio = false; | ^~~~~~~ block/blk-merge.c:539:28: warning: unused variable 'ivprv' [-Wunused-variable] 539 | struct bio_vec iv, ivprv = { NULL }; | ^~~~~ cc1: some warnings being treated as errors vim +/blk_rq_map_integrity_sg +536 block/blk-merge.c 526 527 /** 528 * blk_rq_map_integrity_sg - Map integrity metadata into a scatterlist 529 * @q: request queue 530 * @bio: bio with integrity metadata attached 531 * @sglist: target scatterlist 532 * 533 * Description: Map the integrity vectors in request into a scatterlist. 534 * The scatterlist must be big enough to hold all elements. 535 */ > 536 int blk_rq_map_integrity_sg(struct request_queue *q, struct bio *bio, 537 struct scatterlist *sglist) 538 { 539 struct bio_vec iv, ivprv = { NULL }; 540 struct scatterlist *sg = NULL; 541 unsigned int nsegs = 0; 542 struct bvec_iter iter; 543 bool new_bio = false; 544 545 for_each_bio(bio) { > 546 struct bio_integrity_payload *bip = bio->bi_integrity; 547 > 548 bip_for_each_mp_bvec(iv, bip, iter) { 549 /* 550 * Only try to merge bvecs from two bios given we 551 * have done bio internal merge when adding pages 552 * to bio 553 */ 554 if (new_bio && 555 __blk_segment_map_sg_merge(q, &iv, &ivprv, &sg)) 556 goto next_iv; 557 558 if (iv.bv_offset + iv.bv_len <= PAGE_SIZE) 559 nsegs += __blk_bvec_map_sg(iv, sglist, &sg); 560 else 561 nsegs += blk_bvec_map_sg(q, &iv, sglist, &sg); 562 next_iv: 563 new_bio = false; 564 } 565 566 if (likely(bip->bip_iter.bi_size)) { 567 ivprv = iv; 568 new_bio = true; 569 } 570 } 571 572 if (sg) 573 sg_mark_end(sg); 574 575 return nsegs; 576 } 577 EXPORT_SYMBOL(blk_rq_map_integrity_sg); 578
Hi Jinyoung, kernel test robot noticed the following build warnings: [auto build test WARNING on axboe-block/for-next] [also build test WARNING on mkp-scsi/for-next jejb-scsi/for-next linus/master v6.3 next-20230428] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Jinyoung-CHOI/block-blk-integiry-add-helper-functions-for-bio_integrity_add_page/20230503-183015 base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next patch link: https://lore.kernel.org/r/20230503102719epcms2p457434fefd535ee43d502eff854227919%40epcms2p4 patch subject: [PATCH 14/15] block: blk-integrity: change sg-table configuration method for integrity config: x86_64-defconfig (https://download.01.org/0day-ci/archive/20230504/202305040333.EHY8r49K-lkp@intel.com/config) compiler: gcc-11 (Debian 11.3.0-12) 11.3.0 reproduce (this is a W=1 build): # https://github.com/intel-lab-lkp/linux/commit/7e4810d74ca92ed35bbc73cb09a4baa1dacfbc96 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Jinyoung-CHOI/block-blk-integiry-add-helper-functions-for-bio_integrity_add_page/20230503-183015 git checkout 7e4810d74ca92ed35bbc73cb09a4baa1dacfbc96 # save the config file mkdir build_dir && cp config build_dir/.config make W=1 O=build_dir ARCH=x86_64 olddefconfig make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> | Link: https://lore.kernel.org/oe-kbuild-all/202305040333.EHY8r49K-lkp@intel.com/ All warnings (new ones prefixed by >>): In file included from include/linux/blk-integrity.h:5, from block/blk-merge.c:9: include/linux/blk-mq.h: In function 'blk_rq_bio_prep': include/linux/blk-mq.h:972:19: error: 'struct request' has no member named 'nr_integrity_segments' 972 | rq->nr_integrity_segments = bio_integrity(bio)->bip_vcnt; | ^~ include/linux/blk-mq.h:972:63: warning: dereferencing 'void *' pointer 972 | rq->nr_integrity_segments = bio_integrity(bio)->bip_vcnt; | ^~ include/linux/blk-mq.h:972:63: error: request for member 'bip_vcnt' in something not a structure or union block/blk-merge.c: At top level: block/blk-merge.c:536:5: error: redefinition of 'blk_rq_map_integrity_sg' 536 | int blk_rq_map_integrity_sg(struct request_queue *q, struct bio *bio, | ^~~~~~~~~~~~~~~~~~~~~~~ In file included from block/blk-merge.c:9: include/linux/blk-integrity.h:132:19: note: previous definition of 'blk_rq_map_integrity_sg' with type 'int(struct request_queue *, struct bio *, struct scatterlist *)' 132 | static inline int blk_rq_map_integrity_sg(struct request_queue *q, | ^~~~~~~~~~~~~~~~~~~~~~~ block/blk-merge.c: In function 'blk_rq_map_integrity_sg': block/blk-merge.c:546:56: error: 'struct bio' has no member named 'bi_integrity' 546 | struct bio_integrity_payload *bip = bio->bi_integrity; | ^~ block/blk-merge.c:548:17: error: implicit declaration of function 'bip_for_each_mp_bvec'; did you mean 'for_each_mp_bvec'? [-Werror=implicit-function-declaration] 548 | bip_for_each_mp_bvec(iv, bip, iter) { | ^~~~~~~~~~~~~~~~~~~~ | for_each_mp_bvec block/blk-merge.c:548:52: error: expected ';' before '{' token 548 | bip_for_each_mp_bvec(iv, bip, iter) { | ^~ | ; >> block/blk-merge.c:543:14: warning: unused variable 'new_bio' [-Wunused-variable] 543 | bool new_bio = false; | ^~~~~~~ >> block/blk-merge.c:539:28: warning: unused variable 'ivprv' [-Wunused-variable] 539 | struct bio_vec iv, ivprv = { NULL }; | ^~~~~ cc1: some warnings being treated as errors vim +/new_bio +543 block/blk-merge.c 526 527 /** 528 * blk_rq_map_integrity_sg - Map integrity metadata into a scatterlist 529 * @q: request queue 530 * @bio: bio with integrity metadata attached 531 * @sglist: target scatterlist 532 * 533 * Description: Map the integrity vectors in request into a scatterlist. 534 * The scatterlist must be big enough to hold all elements. 535 */ 536 int blk_rq_map_integrity_sg(struct request_queue *q, struct bio *bio, 537 struct scatterlist *sglist) 538 { > 539 struct bio_vec iv, ivprv = { NULL }; 540 struct scatterlist *sg = NULL; 541 unsigned int nsegs = 0; 542 struct bvec_iter iter; > 543 bool new_bio = false; 544 545 for_each_bio(bio) { 546 struct bio_integrity_payload *bip = bio->bi_integrity; 547 548 bip_for_each_mp_bvec(iv, bip, iter) { 549 /* 550 * Only try to merge bvecs from two bios given we 551 * have done bio internal merge when adding pages 552 * to bio 553 */ 554 if (new_bio && 555 __blk_segment_map_sg_merge(q, &iv, &ivprv, &sg)) 556 goto next_iv; 557 558 if (iv.bv_offset + iv.bv_len <= PAGE_SIZE) 559 nsegs += __blk_bvec_map_sg(iv, sglist, &sg); 560 else 561 nsegs += blk_bvec_map_sg(q, &iv, sglist, &sg); 562 next_iv: 563 new_bio = false; 564 } 565 566 if (likely(bip->bip_iter.bi_size)) { 567 ivprv = iv; 568 new_bio = true; 569 } 570 } 571 572 if (sg) 573 sg_mark_end(sg); 574 575 return nsegs; 576 } 577 EXPORT_SYMBOL(blk_rq_map_integrity_sg); 578
diff --git a/block/blk-integrity.c b/block/blk-integrity.c index 64407b412947..c50954652177 100644 --- a/block/blk-integrity.c +++ b/block/blk-integrity.c @@ -55,58 +55,6 @@ int blk_rq_count_integrity_sg(struct request_queue *q, struct bio *bio) } EXPORT_SYMBOL(blk_rq_count_integrity_sg); -/** - * blk_rq_map_integrity_sg - Map integrity metadata into a scatterlist - * @q: request queue - * @bio: bio with integrity metadata attached - * @sglist: target scatterlist - * - * Description: Map the integrity vectors in request into a - * scatterlist. The scatterlist must be big enough to hold all - * elements. I.e. sized using blk_rq_count_integrity_sg(). - */ -int blk_rq_map_integrity_sg(struct request_queue *q, struct bio *bio, - struct scatterlist *sglist) -{ - struct bio_vec iv, ivprv = { NULL }; - struct scatterlist *sg = NULL; - unsigned int segments = 0; - struct bvec_iter iter; - int prev = 0; - - bio_for_each_integrity_vec(iv, bio, iter) { - - if (prev) { - if (!biovec_phys_mergeable(q, &ivprv, &iv)) - goto new_segment; - if (sg->length + iv.bv_len > queue_max_segment_size(q)) - goto new_segment; - - sg->length += iv.bv_len; - } else { -new_segment: - if (!sg) - sg = sglist; - else { - sg_unmark_end(sg); - sg = sg_next(sg); - } - - sg_set_page(sg, iv.bv_page, iv.bv_len, iv.bv_offset); - segments++; - } - - prev = 1; - ivprv = iv; - } - - if (sg) - sg_mark_end(sg); - - return segments; -} -EXPORT_SYMBOL(blk_rq_map_integrity_sg); - /** * blk_integrity_compare - Compare integrity profile of two disks * @gd1: Disk to compare diff --git a/block/blk-merge.c b/block/blk-merge.c index c6a0958e8df1..71539d88ffe6 100644 --- a/block/blk-merge.c +++ b/block/blk-merge.c @@ -524,6 +524,58 @@ __blk_segment_map_sg_merge(struct request_queue *q, struct bio_vec *bvec, return true; } +/** + * blk_rq_map_integrity_sg - Map integrity metadata into a scatterlist + * @q: request queue + * @bio: bio with integrity metadata attached + * @sglist: target scatterlist + * + * Description: Map the integrity vectors in request into a scatterlist. + * The scatterlist must be big enough to hold all elements. + */ +int blk_rq_map_integrity_sg(struct request_queue *q, struct bio *bio, + struct scatterlist *sglist) +{ + struct bio_vec iv, ivprv = { NULL }; + struct scatterlist *sg = NULL; + unsigned int nsegs = 0; + struct bvec_iter iter; + bool new_bio = false; + + for_each_bio(bio) { + struct bio_integrity_payload *bip = bio->bi_integrity; + + bip_for_each_mp_bvec(iv, bip, iter) { + /* + * Only try to merge bvecs from two bios given we + * have done bio internal merge when adding pages + * to bio + */ + if (new_bio && + __blk_segment_map_sg_merge(q, &iv, &ivprv, &sg)) + goto next_iv; + + if (iv.bv_offset + iv.bv_len <= PAGE_SIZE) + nsegs += __blk_bvec_map_sg(iv, sglist, &sg); + else + nsegs += blk_bvec_map_sg(q, &iv, sglist, &sg); + next_iv: + new_bio = false; + } + + if (likely(bip->bip_iter.bi_size)) { + ivprv = iv; + new_bio = true; + } + } + + if (sg) + sg_mark_end(sg); + + return nsegs; +} +EXPORT_SYMBOL(blk_rq_map_integrity_sg); + static int __blk_bios_map_sg(struct request_queue *q, struct bio *bio, struct scatterlist *sglist, struct scatterlist **sg)
Previously, a bio_vec of bip was made of one page in the block layer, and sg_list was generated using hw information in lld. This is done in the block layer and the bio_vec has been changed to multi-page, so it is changed to configure the sg-table using the existing api, such as the sg-table setting for the bio. (e.g. multi-page map) Cc: Christoph Hellwig <hch@lst.de> Cc: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Jinyoung Choi <j-young.choi@samsung.com> --- block/blk-integrity.c | 52 ------------------------------------------- block/blk-merge.c | 52 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 52 deletions(-)