• Heinz Mauelshagen's avatar
    dm cache mq: fix memory allocation failure for large cache devices · 14f398ca
    Heinz Mauelshagen authored
    The memory allocated for the multiqueue policy's hash table doesn't need
    to be physically contiguous.  Use vzalloc() instead of kzalloc().
    Fedora has been carrying this fix since 10/10/2013.
    
    Failure seen during creation of a 10TB cached device with a 2048 sector
    block size and 411GB cache size:
    
     dmsetup: page allocation failure: order:9, mode:0x10c0d0
     CPU: 11 PID: 29235 Comm: dmsetup Not tainted 3.10.4 #3
     Hardware name: Supermicro X8DTL/X8DTL, BIOS 2.1a       12/30/2011
      000000000010c0d0 ffff880090941898 ffffffff81387ab4 ffff880090941928
      ffffffff810bb26f 0000000000000009 000000000010c0d0 ffff880090941928
      ffffffff81385dbc ffffffff815f3840 ffffffff00000000 000002000010c0d0
     Call Trace:
      [<ffffffff81387ab4>] dump_stack+0x19/0x1b
      [<ffffffff810bb26f>] warn_alloc_failed+0x110/0x124
      [<ffffffff81385dbc>] ? __alloc_pages_direct_compact+0x17c/0x18e
      [<ffffffff810bda2e>] __alloc_pages_nodemask+0x6c7/0x75e
      [<ffffffff810bdad7>] __get_free_pages+0x12/0x3f
      [<ffffffff810ea148>] kmalloc_order_trace+0x29/0x88
      [<ffffffff810ec1fd>] __kmalloc+0x36/0x11b
      [<ffffffffa031eeed>] ? mq_create+0x1dc/0x2cf [dm_cache_mq]
      [<ffffffffa031efc0>] mq_create+0x2af/0x2cf [dm_cache_mq]
      [<ffffffffa0314605>] dm_cache_policy_create+0xa7/0xd2 [dm_cache]
      [<ffffffffa0312530>] ? cache_ctr+0x245/0xa13 [dm_cache]
      [<ffffffffa031263e>] cache_ctr+0x353/0xa13 [dm_cache]
      [<ffffffffa012b916>] dm_table_add_target+0x227/0x2ce [dm_mod]
      [<ffffffffa012e8e4>] table_load+0x286/0x2ac [dm_mod]
      [<ffffffffa012e65e>] ? dev_wait+0x8a/0x8a [dm_mod]
      [<ffffffffa012e324>] ctl_ioctl+0x39a/0x3c2 [dm_mod]
      [<ffffffffa012e35a>] dm_ctl_ioctl+0xe/0x12 [dm_mod]
      [<ffffffff81101181>] vfs_ioctl+0x21/0x34
      [<ffffffff811019d3>] do_vfs_ioctl+0x3b1/0x3f4
      [<ffffffff810f4d2e>] ? ____fput+0x9/0xb
      [<ffffffff81050b6c>] ? task_work_run+0x7e/0x92
      [<ffffffff81101a68>] SyS_ioctl+0x52/0x82
      [<ffffffff81391d92>] system_call_fastpath+0x16/0x1b
    Signed-off-by: default avatarHeinz Mauelshagen <heinzm@redhat.com>
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    Cc: stable@vger.kernel.org
    14f398ca
dm-cache-policy-mq.c 30.4 KB