Message ID | 20230307141520.793891-8-ming.lei@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | io_uring/ublk: add IORING_OP_FUSED_CMD | expand |
Hi Ming, I love your patch! Perhaps something to improve: [auto build test WARNING on axboe-block/for-next] [also build test WARNING on char-misc/char-misc-testing char-misc/char-misc-next char-misc/char-misc-linus linus/master v6.3-rc2 next-20230314] [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/Ming-Lei/io_uring-add-IO_URING_F_FUSED-and-prepare-for-supporting-OP_FUSED_CMD/20230307-222928 base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-next patch link: https://lore.kernel.org/r/20230307141520.793891-8-ming.lei%40redhat.com patch subject: [PATCH V2 07/17] block: ublk_drv: add common exit handling config: microblaze-randconfig-s033-20230308 (https://download.01.org/0day-ci/archive/20230315/202303150036.BLkTgToJ-lkp@intel.com/config) compiler: microblaze-linux-gcc (GCC) 12.1.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.4-39-gce1a6720-dirty # https://github.com/intel-lab-lkp/linux/commit/53855edaeebdbd21c916cbb864ac45cb64def9cd git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Ming-Lei/io_uring-add-IO_URING_F_FUSED-and-prepare-for-supporting-OP_FUSED_CMD/20230307-222928 git checkout 53855edaeebdbd21c916cbb864ac45cb64def9cd # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=microblaze olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=microblaze SHELL=/bin/bash drivers/block/ 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/202303150036.BLkTgToJ-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/block/ublk_drv.c:665:21: sparse: sparse: incorrect type in assignment (different base types) @@ expected int res @@ got restricted blk_status_t @@ drivers/block/ublk_drv.c:665:21: sparse: expected int res drivers/block/ublk_drv.c:665:21: sparse: got restricted blk_status_t >> drivers/block/ublk_drv.c:696:33: sparse: sparse: incorrect type in argument 2 (different base types) @@ expected restricted blk_status_t [usertype] error @@ got int res @@ drivers/block/ublk_drv.c:696:33: sparse: expected restricted blk_status_t [usertype] error drivers/block/ublk_drv.c:696:33: sparse: got int res vim +665 drivers/block/ublk_drv.c 651 652 /* todo: handle partial completion */ 653 static void ublk_complete_rq(struct request *req) 654 { 655 struct ublk_queue *ubq = req->mq_hctx->driver_data; 656 struct ublk_io *io = &ubq->ios[req->tag]; 657 unsigned int unmapped_bytes; 658 int res = BLK_STS_OK; 659 660 /* failed read IO if nothing is read */ 661 if (!io->res && req_op(req) == REQ_OP_READ) 662 io->res = -EIO; 663 664 if (io->res < 0) { > 665 res = errno_to_blk_status(io->res); 666 goto exit; 667 } 668 669 /* 670 * FLUSH, DISCARD or WRITE_ZEROES usually won't return bytes returned, so end them 671 * directly. 672 * 673 * Both the two needn't unmap. 674 */ 675 if (req_op(req) != REQ_OP_READ && req_op(req) != REQ_OP_WRITE) 676 goto exit; 677 678 /* for READ request, writing data in iod->addr to rq buffers */ 679 unmapped_bytes = ublk_unmap_io(ubq, req, io); 680 681 /* 682 * Extremely impossible since we got data filled in just before 683 * 684 * Re-read simply for this unlikely case. 685 */ 686 if (unlikely(unmapped_bytes < io->res)) 687 io->res = unmapped_bytes; 688 689 if (blk_update_request(req, BLK_STS_OK, io->res)) 690 blk_mq_requeue_request(req, true); 691 else 692 __blk_mq_end_request(req, BLK_STS_OK); 693 694 return; 695 exit: > 696 blk_mq_end_request(req, res); 697 } 698
diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index 2778c14a8407..c03728c13eea 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -655,14 +655,15 @@ static void ublk_complete_rq(struct request *req) struct ublk_queue *ubq = req->mq_hctx->driver_data; struct ublk_io *io = &ubq->ios[req->tag]; unsigned int unmapped_bytes; + int res = BLK_STS_OK; /* failed read IO if nothing is read */ if (!io->res && req_op(req) == REQ_OP_READ) io->res = -EIO; if (io->res < 0) { - blk_mq_end_request(req, errno_to_blk_status(io->res)); - return; + res = errno_to_blk_status(io->res); + goto exit; } /* @@ -671,10 +672,8 @@ static void ublk_complete_rq(struct request *req) * * Both the two needn't unmap. */ - if (req_op(req) != REQ_OP_READ && req_op(req) != REQ_OP_WRITE) { - blk_mq_end_request(req, BLK_STS_OK); - return; - } + if (req_op(req) != REQ_OP_READ && req_op(req) != REQ_OP_WRITE) + goto exit; /* for READ request, writing data in iod->addr to rq buffers */ unmapped_bytes = ublk_unmap_io(ubq, req, io); @@ -691,6 +690,10 @@ static void ublk_complete_rq(struct request *req) blk_mq_requeue_request(req, true); else __blk_mq_end_request(req, BLK_STS_OK); + + return; +exit: + blk_mq_end_request(req, res); } /*