Thread (2 messages) 2 messages, 1 author, 2020-03-31

Re: [PATCH] raid5: use kmalloc_array() for GFP_NOIO flag

From: Coly Li <hidden>
Date: 2020-03-31 11:05:14

On 2020/3/30 11:40 下午, Coly Li wrote:
quoted hunk ↗ jump to hunk
Commit b330e6a49dc3 ("md: convert to kvmalloc") uses kvmalloc_array()
to allocate memory with GFP_NOIO flag in resize_chunks() via function
scribble_alloc(),
2269	err = scribble_alloc(percpu, new_disks,
2270			     new_sectors / STRIPE_SECTORS,
2271			     GFP_NOIO);

Indeed kvmalloc() inside kvmalloc_array() does not accept non GFP_KERNEL
compatible flags, it means GFP_NOIO will make kvmalloc_node() call
kmalloc_node() instead, which is not the above listed code wants.

For md raid1 and raid10 code, such allocation just simply calls
kmalloc_array(), which is enough and works fine. This patch removes
the misleading kvmalloc_array() and simply uses kmalloc_array() as
md raid1 and raid10 code do.

Fixes: b330e6a49dc3 ("md: convert to kvmalloc")
Signed-off-by: Coly Li <redacted>
Cc: Kent Overstreet <redacted>
Cc: Michal Hocko <mhocko@suse.com>
---
 drivers/md/raid5.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index ba00e9877f02..dda2701290bf 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -2235,7 +2235,7 @@ static int scribble_alloc(struct raid5_percpu *percpu,
 		sizeof(addr_conv_t) * (num+2);
 	void *scribble;
 
-	scribble = kvmalloc_array(cnt, obj_size, flags);
+	scribble = kmalloc_array(cnt, obj_size, flags);
 	if (!scribble)
 		return -ENOMEM;
 
I will post another version to use memalloc_noio_save()/restore() scope
APIs. Please ignore this patch.

Thanks.
-- 

Coly Li
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help