On Wed, Feb 09, 2022 at 10:48:44AM +0300, Dan Carpenter wrote:
> Hi Nitesh,
> 
> url:    
> https://protect2.fireeye.com/v1/url?k=483798a4-17aca1b5-483613eb-0cc47a31cdbc-db5fd22936f47f46&q=1&e=e5a0c082-878d-4bbf-be36-3c8e34773475&u=https%3A%2F%2Fgithub.com%2F0day-ci%2Flinux%2Fcommits%2FNitesh-Shetty%2Fblock-make-bio_map_kern-non-static%2F20220207-231407
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git 
> for-next
> config: i386-randconfig-m021-20220207 
> (https://protect2.fireeye.com/v1/url?k=24e309ba-7b7830ab-24e282f5-0cc47a31cdbc-9cc4e76aaefa8c0d&q=1&e=e5a0c082-878d-4bbf-be36-3c8e34773475&u=https%3A%2F%2Fdownload.01.org%2F0day-ci%2Farchive%2F20220209%2F202202090703.U5riBMIn-lkp%40intel.com%2Fconfig)
> compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <[email protected]>
> Reported-by: Dan Carpenter <[email protected]>
> 
> smatch warnings:
> block/blk-lib.c:272 blk_copy_offload() warn: possible memory leak of 'ctx'
> 
> vim +/ctx +272 block/blk-lib.c
>

acked

> 12a9801a7301f1 Nitesh Shetty 2022-02-07  185  int blk_copy_offload(struct 
> block_device *src_bdev, int nr_srcs,
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  186                  struct 
> range_entry *rlist, struct block_device *dst_bdev, gfp_t gfp_mask)
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  187  {
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  188          struct request_queue 
> *sq = bdev_get_queue(src_bdev);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  189          struct request_queue 
> *dq = bdev_get_queue(dst_bdev);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  190          struct bio *read_bio, 
> *write_bio;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  191          struct copy_ctx *ctx;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  192          struct cio *cio;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  193          struct page *token;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  194          sector_t src_blk, 
> copy_len, dst_blk;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  195          sector_t remaining, 
> max_copy_len = LONG_MAX;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  196          int ri = 0, ret = 0;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  197  
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  198          cio = 
> kzalloc(sizeof(struct cio), GFP_KERNEL);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  199          if (!cio)
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  200                  return -ENOMEM;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  201          
> atomic_set(&cio->refcount, 0);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  202          cio->rlist = rlist;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  203  
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  204          max_copy_len = 
> min3(max_copy_len, (sector_t)sq->limits.max_copy_sectors,
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  205                          
> (sector_t)dq->limits.max_copy_sectors);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  206          max_copy_len = 
> min3(max_copy_len, (sector_t)sq->limits.max_copy_range_sectors,
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  207                          
> (sector_t)dq->limits.max_copy_range_sectors) << SECTOR_SHIFT;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  208  
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  209          for (ri = 0; ri < 
> nr_srcs; ri++) {
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  210                  
> cio->rlist[ri].comp_len = rlist[ri].len;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  211                  for (remaining 
> = rlist[ri].len, src_blk = rlist[ri].src, dst_blk = rlist[ri].dst;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  212                          
> remaining > 0;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  213                          
> remaining -= copy_len, src_blk += copy_len, dst_blk += copy_len) {
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  214                          
> copy_len = min(remaining, max_copy_len);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  215  
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  216                          token = 
> alloc_page(gfp_mask);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  217                          if 
> (unlikely(!token)) {
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  218                                  
> ret = -ENOMEM;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  219                                  
> goto err_token;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  220                          }
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  221  
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  222                          
> read_bio = bio_alloc(src_bdev, 1, REQ_OP_READ | REQ_COPY | REQ_NOMERGE,
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  223                                  
>         gfp_mask);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  224                          if 
> (!read_bio) {
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  225                                  
> ret = -ENOMEM;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  226                                  
> goto err_read_bio;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  227                          }
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  228                          
> read_bio->bi_iter.bi_sector = src_blk >> SECTOR_SHIFT;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  229                          
> read_bio->bi_iter.bi_size = copy_len;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  230                          
> __bio_add_page(read_bio, token, PAGE_SIZE, 0);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  231                          ret = 
> submit_bio_wait(read_bio);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  232                          if 
> (ret) {
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  233                                  
> bio_put(read_bio);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  234                                  
> goto err_read_bio;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  235                          }
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  236                          
> bio_put(read_bio);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  237                          ctx = 
> kzalloc(sizeof(struct copy_ctx), gfp_mask);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  238                          if 
> (!ctx) {
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  239                                  
> ret = -ENOMEM;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  240                                  
> goto err_read_bio;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  241                          }
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  242                          
> ctx->cio = cio;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  243                          
> ctx->range_idx = ri;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  244                          
> ctx->start_sec = rlist[ri].src;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  245  
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  246                          
> write_bio = bio_alloc(dst_bdev, 1, REQ_OP_WRITE | REQ_COPY | REQ_NOMERGE,
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  247                                  
>         gfp_mask);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  248                          if 
> (!write_bio) {
> 
> Please call kfree(ctx) before the goto.
> 
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  249                                  
> ret = -ENOMEM;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  250                                  
> goto err_read_bio;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  251                          }
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  252  
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  253                          
> write_bio->bi_iter.bi_sector = dst_blk >> SECTOR_SHIFT;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  254                          
> write_bio->bi_iter.bi_size = copy_len;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  255                          
> __bio_add_page(write_bio, token, PAGE_SIZE, 0);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  256                          
> write_bio->bi_end_io = bio_copy_end_io;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  257                          
> write_bio->bi_private = ctx;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  258                          
> atomic_inc(&cio->refcount);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  259                          
> submit_bio(write_bio);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  260                  }
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  261          }
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  262  
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  263          /* Wait for completion 
> of all IO's*/
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  264          return 
> cio_await_completion(cio);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  265  
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  266  err_read_bio:
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  267          __free_page(token);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  268  err_token:
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  269          rlist[ri].comp_len = 
> min_t(sector_t, rlist[ri].comp_len, (rlist[ri].len - remaining));
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  270  
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  271          cio->io_err = ret;
> 12a9801a7301f1 Nitesh Shetty 2022-02-07 @272          return 
> cio_await_completion(cio);
> 12a9801a7301f1 Nitesh Shetty 2022-02-07  273  }
> 
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://protect2.fireeye.com/v1/url?k=4cd82b59-13431248-4cd9a016-0cc47a31cdbc-7ef30a0abcb321a3&q=1&e=e5a0c082-878d-4bbf-be36-3c8e34773475&u=https%3A%2F%2Flists.01.org%2Fhyperkitty%2Flist%2Fkbuild-all%40lists.01.org
> 
> 
> 

--
Thank you
Nitesh
--
dm-devel mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/dm-devel

Reply via email to