Hi Nitesh,

url:    
https://github.com/0day-ci/linux/commits/Nitesh-Shetty/block-make-bio_map_kern-non-static/20220207-231407
base:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git 
for-next
config: i386-randconfig-m021-20220207 
(https://download.01.org/0day-ci/archive/20220209/202202090703.u5ribmin-...@intel.com/config)
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 <l...@intel.com>
Reported-by: Dan Carpenter <dan.carpen...@oracle.com>

smatch warnings:
block/blk-lib.c:272 blk_copy_offload() warn: possible memory leak of 'ctx'

vim +/ctx +272 block/blk-lib.c

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://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org

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

Reply via email to