On 11/30/23 8:20 AM, Dongyun Liu wrote: > diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c > index d77d3664ca08..ee6c22c50e09 100644 > --- a/drivers/block/zram/zram_drv.c > +++ b/drivers/block/zram/zram_drv.c > @@ -514,7 +514,7 @@ static ssize_t backing_dev_store(struct device *dev, > > nr_pages = i_size_read(inode) >> PAGE_SHIFT; > bitmap_sz = BITS_TO_LONGS(nr_pages) * sizeof(long); > - bitmap = kvzalloc(bitmap_sz, GFP_KERNEL); > + bitmap = kmalloc(bitmap_sz, GFP_ATOMIC); > if (!bitmap) { > err = -ENOMEM; > goto out; Outside of this moving from a zeroed alloc to one that does not, the change looks woefully incomplete. Why does this allocation need to be GFP_ATOMIC, and: 1) file_name = kmalloc(PATH_MAX, GFP_KERNEL); does not 2) filp_open() -> getname_kernel() -> __getname() does not 3) filp_open() -> getname_kernel() does not 4) bdev_open_by_dev() does not IOW, you have a slew of GFP_KERNEL allocations in there, and you probably just patched the largest one. But the core issue remains. The whole handling of backing_dev_store() looks pretty broken. -- Jens Axboe