• Christoph Hellwig's avatar
    btrfs: use kvcalloc in btrfs_get_dev_zone_info · 8fe97d47
    Christoph Hellwig authored
    Otherwise the kernel memory allocator seems to be unhappy about failing
    order 6 allocations for the zones array, that cause 100% reproducible
    mount failures in my qemu setup:
    
      [26.078981] mount: page allocation failure: order:6, mode:0x40dc0(GFP_KERNEL|__GFP_COMP|__GFP_ZERO), nodemask=(null)
      [26.079741] CPU: 0 PID: 2965 Comm: mount Not tainted 6.1.0-rc5+ #185
      [26.080181] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
      [26.080950] Call Trace:
      [26.081132]  <TASK>
      [26.081291]  dump_stack_lvl+0x56/0x6f
      [26.081554]  warn_alloc+0x117/0x140
      [26.081808]  ? __alloc_pages_direct_compact+0x1b5/0x300
      [26.082174]  __alloc_pages_slowpath.constprop.0+0xd0e/0xde0
      [26.082569]  __alloc_pages+0x32a/0x340
      [26.082836]  __kmalloc_large_node+0x4d/0xa0
      [26.083133]  ? trace_kmalloc+0x29/0xd0
      [26.083399]  kmalloc_large+0x14/0x60
      [26.083654]  btrfs_get_dev_zone_info+0x1b9/0xc00
      [26.083980]  ? _raw_spin_unlock_irqrestore+0x28/0x50
      [26.084328]  btrfs_get_dev_zone_info_all_devices+0x54/0x80
      [26.084708]  open_ctree+0xed4/0x1654
      [26.084974]  btrfs_mount_root.cold+0x12/0xde
      [26.085288]  ? lock_is_held_type+0xe2/0x140
      [26.085603]  legacy_get_tree+0x28/0x50
      [26.085876]  vfs_get_tree+0x1d/0xb0
      [26.086139]  vfs_kern_mount.part.0+0x6c/0xb0
      [26.086456]  btrfs_mount+0x118/0x3a0
      [26.086728]  ? lock_is_held_type+0xe2/0x140
      [26.087043]  legacy_get_tree+0x28/0x50
      [26.087323]  vfs_get_tree+0x1d/0xb0
      [26.087587]  path_mount+0x2ba/0xbe0
      [26.087850]  ? _raw_spin_unlock_irqrestore+0x38/0x50
      [26.088217]  __x64_sys_mount+0xfe/0x140
      [26.088506]  do_syscall_64+0x35/0x80
      [26.088776]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    Fixes: 5b316468 ("btrfs: get zone information of zoned block devices")
    CC: stable@vger.kernel.org # 5.15+
    Reviewed-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
    Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    8fe97d47
zoned.c 59.6 KB