]> git.hungrycats.org Git - linux/commit
scsi: sd_zbc: Use kvzalloc() to allocate REPORT ZONES buffer
authorJohannes Thumshirn <johannes.thumshirn@wdc.com>
Wed, 30 Oct 2024 11:02:53 +0000 (12:02 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sun, 3 Nov 2024 00:37:01 +0000 (20:37 -0400)
commit7ce3e6107103214d354a16729a472f588be60572
tree3cadc8579004883f757e6810a7074859e5ae6103
parentcb7e509c4e0197f63717fee54fb41c4990ba8d3a
scsi: sd_zbc: Use kvzalloc() to allocate REPORT ZONES buffer

We have two reports of failed memory allocation in btrfs' code which is
calling into report zones.

Both of these reports have the following signature coming from
__vmalloc_area_node():

 kworker/u17:5: vmalloc error: size 0, failed to allocate pages, mode:0x10dc2(GFP_KERNEL|__GFP_HIGHMEM|__GFP_NORETRY|__GFP_ZERO), nodemask=(null),cpuset=/,mems_allowed=0

Further debugging showed these where allocations of one sector (512
bytes) and at least one of the reporter's systems where low on memory,
so going through the overhead of allocating a vm area failed.

Switching the allocation from __vmalloc() to kvzalloc() avoids the
overhead of vmalloc() on small allocations and succeeds.

Note: the buffer is already freed using kvfree() so there's no need to
adjust the free path.

Cc: Qu Wenru <wqu@suse.com>
Cc: Naohiro Aota <naohiro.aota@wdc.com>
Link: https://github.com/kdave/btrfs-progs/issues/779
Link: https://github.com/kdave/btrfs-progs/issues/915
Fixes: 23a50861adda ("scsi: sd_zbc: Cleanup sd_zbc_alloc_report_buffer()")
Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Link: https://lore.kernel.org/r/20241030110253.11718-1-jth@kernel.org
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/sd_zbc.c