On Tue, Mar 24, 2020 at 08:24:49PM -0700, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > > The dirattr btree checking code uses the altpath substructure of the > dirattr state structure to check the sibling pointers of dir/attr tree > blocks. At the end of sibling checks, xfs_da3_path_shift could have > changed multiple levels of buffer pointers in the altpath structure. > Although we release the leaf level buffer, this isn't enough -- we also > need to release the node buffers that are unique to the altpath. > > Not releasing all of the altpath buffers leaves them locked to the > transaction. This is suboptimal because we should release resources > when we don't need them anymore. Fix the function to loop all levels of > the altpath, and fix the return logic so that we always run the loop. > > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > --- > fs/xfs/scrub/dabtree.c | 42 +++++++++++++++++++++++++----------------- > 1 file changed, 25 insertions(+), 17 deletions(-) looks reasonable. Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx> -- Dave Chinner david@xxxxxxxxxxxxx