On Tue, Oct 30, 2018 at 10:44:34AM -0700, Darrick J. Wong wrote: > On Tue, Oct 30, 2018 at 10:20:41PM +1100, Dave Chinner wrote: > > From: Dave Chinner <dchinner@xxxxxxxxxx> > > > > To enable phase 6 parallelisation, we need to protect the bad inode > > list from concurrent modification and/or access. Wrap it with a > > mutex and clean up the nasty typedefs. > > > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> > > --- > > repair/dir2.c | 32 +++++++++++++++++++++----------- > > 1 file changed, 21 insertions(+), 11 deletions(-) > > > > diff --git a/repair/dir2.c b/repair/dir2.c > > index ba5763ed3d26..a73a675b97c8 100644 > > --- a/repair/dir2.c > > +++ b/repair/dir2.c > > @@ -20,40 +20,50 @@ > > * Known bad inode list. These are seen when the leaf and node > > * block linkages are incorrect. > > */ > > -typedef struct dir2_bad { > > +struct dir2_bad { > > xfs_ino_t ino; > > struct dir2_bad *next; > > -} dir2_bad_t; > > +}; > > Just out of curiosity, how fast does this linked list grow? In theory > we could hoist scrub/bitmap.c to libfrog and turn this into a bitmap, > but that probably depends on how often we find inodes with bad link > counts...? And admittedly, avlnodes aren't cheap either... Never seen it in profiles, so I don't see it as problem we need to solve at this point. The dir_hash code, OTOH.... Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx