Hi Nitesh,

kernel test robot noticed the following build warnings:

[auto build test WARNING on f7dc24b3413851109c4047b22997bd0d95ed52a2]

url:    
https://github.com/intel-lab-lkp/linux/commits/Nitesh-Shetty/block-Introduce-queue-limits-and-sysfs-for-copy-offload-support/20230811-192259
base:   f7dc24b3413851109c4047b22997bd0d95ed52a2
patch link:    
https://lore.kernel.org/r/20230811105300.15889-8-nj.shetty%40samsung.com
patch subject: [PATCH v14 07/11] nvme: add copy offload support
config: arm64-randconfig-r013-20230812 
(https://download.01.org/0day-ci/archive/20230812/202308120736.od5pc9vy-...@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 
4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce: 
(https://download.01.org/0day-ci/archive/20230812/202308120736.od5pc9vy-...@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <l...@intel.com>
| Closes: 
https://lore.kernel.org/oe-kbuild-all/202308120736.od5pc9vy-...@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/nvme/host/core.c:782:2: warning: variable 'dst_lba' is used 
>> uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
     782 |         __rq_for_each_bio(bio, req) {
         |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/blk-mq.h:1008:6: note: expanded from macro '__rq_for_each_bio'
    1008 |         if ((rq->bio))                  \
         |             ^~~~~~~~~
   drivers/nvme/host/core.c:804:33: note: uninitialized use occurs here
     804 |         cmnd->copy.sdlba = cpu_to_le64(dst_lba);
         |                                        ^~~~~~~
   include/linux/byteorder/generic.h:86:21: note: expanded from macro 
'cpu_to_le64'
      86 | #define cpu_to_le64 __cpu_to_le64
         |                     ^
   include/uapi/linux/byteorder/little_endian.h:32:51: note: expanded from 
macro '__cpu_to_le64'
      32 | #define __cpu_to_le64(x) ((__force __le64)(__u64)(x))
         |                                                   ^
   drivers/nvme/host/core.c:782:2: note: remove the 'if' if its condition is 
always true
     782 |         __rq_for_each_bio(bio, req) {
         |         ^
   include/linux/blk-mq.h:1008:2: note: expanded from macro '__rq_for_each_bio'
    1008 |         if ((rq->bio))                  \
         |         ^
   drivers/nvme/host/core.c:772:13: note: initialize the variable 'dst_lba' to 
silence this warning
     772 |         u64 dst_lba, src_lba, n_lba;
         |                    ^
         |                     = 0
   1 warning generated.


vim +782 drivers/nvme/host/core.c

   765  
   766  static inline blk_status_t nvme_setup_copy_offload(struct nvme_ns *ns,
   767                                                     struct request *req,
   768                                                     struct nvme_command 
*cmnd)
   769  {
   770          struct nvme_copy_range *range = NULL;
   771          struct bio *bio;
   772          u64 dst_lba, src_lba, n_lba;
   773          u16 nr_range = 1, control = 0, seg = 1;
   774  
   775          if (blk_rq_nr_phys_segments(req) != COPY_MAX_SEGMENTS)
   776                  return BLK_STS_IOERR;
   777  
   778          /*
   779           * First bio contains information about source and last bio 
contains
   780           * information about destination.
   781           */
 > 782          __rq_for_each_bio(bio, req) {
   783                  if (seg == blk_rq_nr_phys_segments(req)) {
   784                          dst_lba = nvme_sect_to_lba(ns, 
bio->bi_iter.bi_sector);
   785                          if (n_lba != bio->bi_iter.bi_size >> 
ns->lba_shift)
   786                                  return BLK_STS_IOERR;
   787                  } else {
   788                          src_lba = nvme_sect_to_lba(ns, 
bio->bi_iter.bi_sector);
   789                          n_lba = bio->bi_iter.bi_size >> ns->lba_shift;
   790                  }
   791                  seg++;
   792          }
   793  
   794          if (req->cmd_flags & REQ_FUA)
   795                  control |= NVME_RW_FUA;
   796  
   797          if (req->cmd_flags & REQ_FAILFAST_DEV)
   798                  control |= NVME_RW_LR;
   799  
   800          memset(cmnd, 0, sizeof(*cmnd));
   801          cmnd->copy.opcode = nvme_cmd_copy;
   802          cmnd->copy.nsid = cpu_to_le32(ns->head->ns_id);
   803          cmnd->copy.control = cpu_to_le16(control);
   804          cmnd->copy.sdlba = cpu_to_le64(dst_lba);
   805          cmnd->copy.nr_range = 0;
   806  
   807          range = kmalloc_array(nr_range, sizeof(*range),
   808                                GFP_ATOMIC | __GFP_NOWARN);
   809          if (!range)
   810                  return BLK_STS_RESOURCE;
   811  
   812          range[0].slba = cpu_to_le64(src_lba);
   813          range[0].nlb = cpu_to_le16(n_lba - 1);
   814  
   815          req->special_vec.bv_page = virt_to_page(range);
   816          req->special_vec.bv_offset = offset_in_page(range);
   817          req->special_vec.bv_len = sizeof(*range) * nr_range;
   818          req->rq_flags |= RQF_SPECIAL_PAYLOAD;
   819  
   820          return BLK_STS_OK;
   821  }
   822  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel

Reply via email to