Re: [PATCH v11 2/9] block: Add copy offload support infrastructure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 23/05/30 01:29PM, Maurizio Lombardi wrote:
po 22. 5. 2023 v 13:17 odesílatel Nitesh Shetty <nj.shetty@xxxxxxxxxxx> napsal:

+static int __blkdev_copy_offload(struct block_device *bdev_in, loff_t pos_in,
+               struct block_device *bdev_out, loff_t pos_out, size_t len,
+               cio_iodone_t endio, void *private, gfp_t gfp_mask)
+{
+       struct cio *cio;
+       struct copy_ctx *ctx;
+       struct bio *read_bio, *write_bio;
+       struct page *token;
+       sector_t copy_len;
+       sector_t rem, max_copy_len;
+
+       cio = kzalloc(sizeof(struct cio), GFP_KERNEL);
+       if (!cio)
+               return -ENOMEM;
+       atomic_set(&cio->refcount, 0);
+       cio->waiter = current;
+       cio->endio = endio;
+       cio->private = private;
+
+       max_copy_len = min(bdev_max_copy_sectors(bdev_in),
+                       bdev_max_copy_sectors(bdev_out)) << SECTOR_SHIFT;
+
+       cio->pos_in = pos_in;
+       cio->pos_out = pos_out;
+       /* If there is a error, comp_len will be set to least successfully
+        * completed copied length
+        */
+       cio->comp_len = len;
+       for (rem = len; rem > 0; rem -= copy_len) {
+               copy_len = min(rem, max_copy_len);
+
+               token = alloc_page(gfp_mask);
+               if (unlikely(!token))
+                       goto err_token;

[...]

+err_token:
+       cio->comp_len = min_t(sector_t, cio->comp_len, (len - rem));
+       if (!atomic_read(&cio->refcount))
+               return -ENOMEM;
+       /* Wait for submitted IOs to complete */
+       return blkdev_copy_wait_completion(cio);
+}

Suppose the first call to "token = alloc_page()" fails (and
cio->refcount == 0), isn't "cio" going to be leaked here?

Maurizio


Agreed, will free it in "err_token", and will update next version.

Thank you,
Nitesh Shetty





[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux