On 2020/3/30 11:40 下午, Coly Li wrote: > 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 <colyli@xxxxxxx> > Cc: Kent Overstreet <kent.overstreet@xxxxxxxxx> > Cc: Michal Hocko <mhocko@xxxxxxxx> > --- > 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