On Mon, May 23, 2022 at 10:35:56PM -0700, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > If log recovery fails, we free the memory used by the buffer > cancellation buckets, but we don't actually traverse each bucket list to > free the individual xfs_buf_cancel objects. This leads to a memory > leak, as reported by kmemleak in xfs/051: > > unreferenced object 0xffff888103629560 (size 32): > comm "mount", pid 687045, jiffies 4296935916 (age 10.752s) > hex dump (first 32 bytes): > 08 d3 0a 01 00 00 00 00 08 00 00 00 01 00 00 00 ................ > d0 f5 0b 92 81 88 ff ff 80 64 64 25 81 88 ff ff .........dd%.... > backtrace: > [<ffffffffa0317c83>] kmem_alloc+0x73/0x140 [xfs] > [<ffffffffa03234a9>] xlog_recover_buf_commit_pass1+0x139/0x200 [xfs] > [<ffffffffa032dc27>] xlog_recover_commit_trans+0x307/0x350 [xfs] > [<ffffffffa032df15>] xlog_recovery_process_trans+0xa5/0xe0 [xfs] > [<ffffffffa032e12d>] xlog_recover_process_data+0x8d/0x140 [xfs] > [<ffffffffa032e49d>] xlog_do_recovery_pass+0x19d/0x740 [xfs] > [<ffffffffa032f22d>] xlog_do_log_recovery+0x6d/0x150 [xfs] > [<ffffffffa032f343>] xlog_do_recover+0x33/0x1d0 [xfs] > [<ffffffffa032faba>] xlog_recover+0xda/0x190 [xfs] > [<ffffffffa03194bc>] xfs_log_mount+0x14c/0x360 [xfs] > [<ffffffffa030bfed>] xfs_mountfs+0x50d/0xa60 [xfs] > [<ffffffffa03124b5>] xfs_fs_fill_super+0x6a5/0x950 [xfs] > [<ffffffff812b92a5>] get_tree_bdev+0x175/0x280 > [<ffffffff812b7c3a>] vfs_get_tree+0x1a/0x80 > [<ffffffff812e366f>] path_mount+0x6ff/0xaa0 > [<ffffffff812e3b13>] __x64_sys_mount+0x103/0x140 > > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> > Reviewed-by: Christoph Hellwig <hch@xxxxxx> > --- > fs/xfs/xfs_buf_item_recover.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) Looks good. Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx> -- Dave Chinner david@xxxxxxxxxxxxx