On Thu, Aug 31, 2017 at 01:12:55PM -0700, Darrick J. Wong wrote: > When the (threaded) inode scanner iterates the blocks of a bmbt tree and > wants to record the bmbt blocks in the in-core rmap database, we have to > take the ag_lock for the AG that the bmbt block is in, or else we can > accidentally corrupt the rmap slab by calling slab_add from two threads. > > Reported-by: matorola@xxxxxxxxx > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> Looks good, Reviewed-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx> > --- > repair/scan.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/repair/scan.c b/repair/scan.c > index 6c9f5e7..ccf60a6 100644 > --- a/repair/scan.c > +++ b/repair/scan.c > @@ -386,7 +386,10 @@ _("bad state %d, inode %" PRIu64 " bmap block 0x%" PRIx64 "\n"), > > /* Record BMBT blocks in the reverse-mapping data. */ > if (check_dups && collect_rmaps) { > + agno = XFS_FSB_TO_AGNO(mp, bno); > + pthread_mutex_lock(&ag_locks[agno].lock); > error = rmap_add_bmbt_rec(mp, ino, whichfork, bno); > + pthread_mutex_unlock(&ag_locks[agno].lock); > if (error) > do_error( > _("couldn't add inode %"PRIu64" bmbt block %"PRIu64" reverse-mapping data."), > -- > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Carlos -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html