block: ensure bio_alloc_map_data() deals with ITER_UBUF correctly
authorJens Axboe <axboe@kernel.dk>
Tue, 28 Mar 2023 21:10:31 +0000 (15:10 -0600)
committerJens Axboe <axboe@kernel.dk>
Wed, 29 Mar 2023 14:55:18 +0000 (08:55 -0600)
This helper blindly copies the iovec, even if we don't have one.
Make this case a bit smarter by only doing so if we have an iovec
array to copy.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-map.c

index 9137d16..3bfcad6 100644 (file)
@@ -29,10 +29,11 @@ static struct bio_map_data *bio_alloc_map_data(struct iov_iter *data,
        bmd = kmalloc(struct_size(bmd, iov, data->nr_segs), gfp_mask);
        if (!bmd)
                return NULL;
-       memcpy(bmd->iov, data->iov, sizeof(struct iovec) * data->nr_segs);
        bmd->iter = *data;
-       if (iter_is_iovec(data))
+       if (iter_is_iovec(data)) {
+               memcpy(bmd->iov, data->iov, sizeof(struct iovec) * data->nr_segs);
                bmd->iter.iov = bmd->iov;
+       }
        return bmd;
 }