Thread (32 messages) 32 messages, 7 authors, 2023-08-02

Re: [PATCH v13 3/9] block: add emulation for copy

From: Kent Overstreet <kent.overstreet@linux.dev>
Date: 2023-08-02 06:31:41
Also in: dm-devel, linux-block, linux-fsdevel, linux-nvme, linux-scsi, lkml

On Tue, Aug 01, 2023 at 06:37:02PM +0530, Nitesh Shetty wrote:
On 23/07/20 09:50AM, Christoph Hellwig wrote:
quoted
quoted
+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?
No, kvmalloc should be the preferred approach here now: with large
folios, we're now getting better about doing more large memory
allocations and avoiding fragmentation, so in practice this won't be a
vmalloc allocation except in exceptional circumstances, and performance
will be better and the code will be simpler doing a single large
allocation.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help