Skip to content
  1. Dec 22, 2023
    • Long Li's avatar
      xfs: fix perag leak when growfs fails · 78239218
      Long Li authored
      During growfs, if new ag in memory has been initialized, however
      sb_agcount has not been updated, if an error occurs at this time it
      will cause perag leaks as follows, these new AGs will not been freed
      during umount , because of these new AGs are not visible(that is
      included in mp->m_sb.sb_agcount).
      
      unreferenced object 0xffff88810be40200 (size 512):
        comm "xfs_growfs", pid 857, jiffies 4294909093
        hex dump (first 32 bytes):
          00 c0 c1 05 81 88 ff ff 04 00 00 00 00 00 00 00  ................
          01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        backtrace (crc 381741e2):
          [<ffffffff8191aef6>] __kmalloc+0x386/0x4f0
          [<ffffffff82553e65>] kmem_alloc+0xb5/0x2f0
          [<ffffffff8238dac5>] xfs_initialize_perag+0xc5/0x810
          [<ffffffff824f679c>] xfs_growfs_data+0x9bc/0xbc0
          [<ffffffff8250b90e>] xfs_file_ioctl+0x5fe/0x14d0
          [<ffffffff81aa5194>] __x64_sys_ioctl+0x144/0x1c0
          [<ffffffff83c3d81f>] do_syscall_64+0x3f/0xe0
          [<ffffffff83e00087>] entry_SYSCALL_64_after_hwframe+0x62/0x6a
      unreferenced object 0xffff88810be40800 (size 512):
        comm "xfs_growfs", pid 857, jiffies 4294909093
        hex dump (first 32 bytes):
          20 00 00 00 00 00 00 00 57 ef be dc 00 00 00 00   .......W.......
          10 08 e4 0b 81 88 ff ff 10 08 e4 0b 81 88 ff ff  ................
        backtrace (crc bde50e2d):
          [<ffffffff8191b43a>] __kmalloc_node+0x3da/0x540
          [<ffffffff81814489>] kvmalloc_node+0x99/0x160
          [<ffffffff8286acff>] bucket_table_alloc.isra.0+0x5f/0x400
          [<ffffffff8286bdc5>] rhashtable_init+0x405/0x760
          [<ffffffff8238dda3>] xfs_initialize_perag+0x3a3/0x810
          [<ffffffff824f679c>] xfs_growfs_data+0x9bc/0xbc0
          [<ffffffff8250b90e>] xfs_file_ioctl+0x5fe/0x14d0
          [<ffffffff81aa5194>] __x64_sys_ioctl+0x144/0x1c0
          [<ffffffff83c3d81f>] do_syscall_64+0x3f/0xe0
          [<ffffffff83e00087>] entry_SYSCALL_64_after_hwframe+0x62/0x6a
      
      Factor out xfs_free_unused_perag_range() from xfs_initialize_perag(),
      used for freeing unused perag within a specified range in error handling,
      included in the error path of the growfs failure.
      
      Fixes: 1c1c6ebc
      
       ("xfs: Replace per-ag array with a radix tree")
      Signed-off-by: default avatarLong Li <leo.lilong@huawei.com>
      Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
      Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
      78239218
    • Long Li's avatar
      xfs: add lock protection when remove perag from radix tree · 07afd317
      Long Li authored
      
      
      Take mp->m_perag_lock for deletions from the perag radix tree in
      xfs_initialize_perag to prevent racing with tagging operations.
      Lookups are fine - they are RCU protected so already deal with the
      tree changing shape underneath the lookup - but tagging operations
      require the tree to be stable while the tags are propagated back up
      to the root.
      
      Right now there's nothing stopping radix tree tagging from operating
      while a growfs operation is progress and adding/removing new entries
      into the radix tree.
      
      Hence we can have traversals that require a stable tree occurring at
      the same time we are removing unused entries from the radix tree which
      causes the shape of the tree to change.
      
      Likely this hasn't caused a problem in the past because we are only
      doing append addition and removal so the active AG part of the tree
      is not changing shape, but that doesn't mean it is safe. Just making
      the radix tree modifications serialise against each other is obviously
      correct.
      
      Signed-off-by: default avatarLong Li <leo.lilong@huawei.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Reviewed-by: default avatar"Darrick J. Wong" <djwong@kernel.org>
      Signed-off-by: default avatarChandan Babu R <chandanbabu@kernel.org>
      07afd317
  2. Dec 16, 2023