[PATCH v13 3/9] block: add emulation for copy
Nitesh Shetty
nj.shetty at samsung.com
Tue Aug 1 06:07:02 PDT 2023
On 23/07/20 09:50AM, Christoph Hellwig wrote:
>> +static void *blkdev_copy_alloc_buf(sector_t req_size, sector_t *alloc_size,
>> + gfp_t gfp_mask)
>> +{
>> + int min_size = PAGE_SIZE;
>> + void *buf;
>> +
>> + while (req_size >= min_size) {
>> + buf = kvmalloc(req_size, gfp_mask);
>> + if (buf) {
>> + *alloc_size = req_size;
>> + return buf;
>> + }
>> + /* retry half the requested size */
>> + req_size >>= 1;
>> + }
>> +
>> + return NULL;
>
>Is there any good reason for using vmalloc instead of a bunch
>of distcontiguous pages?
>
kvmalloc seemed convenient for the purpose.
We will need to call alloc_page in a loop to guarantee discontigous pages.
Do you prefer that over kvmalloc?
>> + ctx = kzalloc(sizeof(struct copy_ctx), gfp_mask);
>> + if (!ctx)
>> + goto err_ctx;
>
>I'd suspect it would be better to just allocte a single buffer and
>only have a single outstanding copy. That will reduce the bandwith
>you can theoretically get, but copies tend to be background operations
>anyway. It will reduce the required memory, and thus the chance for
>this operation to fail on a loaded system. It will also dramatically
>reduce the effect on memory managment.
>
Next version will have that change.
Thank You,
Nitesh Shetty
More information about the Linux-nvme
mailing list