On Fri, Sep 11, 2015 at 02:55:32PM -0400, Brian Foster wrote: > The LSN validation helper is called in the I/O verifier codepath for > metadata that embed a last-modification LSN. While the codepath exists, > this is not used in userspace as in the kernel because the former > doesn't have an active log. > > xfs_repair does need to check the validity of the LSN metadata with > respect to the on-disk log, however. Use the LSN validation mechanism to > track the largest LSN that has been seen. Export the value so repair can > use it once it has processed the entire filesystem. Note that the helper > continues to always return true to preserve existing behavior. > > Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx> .... > +xfs_lsn_t libxfs_max_lsn = 0; > +pthread_mutex_t libxfs_max_lsn_lock = PTHREAD_MUTEX_INITIALIZER; > + > void > xfs_detect_invalid_lsn( > struct xfs_mount *mp, > xfs_lsn_t lsn) > { > + int cycle = CYCLE_LSN(lsn); > + int block = BLOCK_LSN(lsn); > + int max_cycle; > + int max_block; > + > + if (lsn == NULLCOMMITLSN) > + return; > + > + pthread_mutex_lock(&libxfs_max_lsn_lock); > + > + max_cycle = CYCLE_LSN(libxfs_max_lsn); > + max_block = BLOCK_LSN(libxfs_max_lsn); > + > + if ((cycle > max_cycle) || > + (cycle == max_cycle && block > max_block)) > + libxfs_max_lsn = lsn; > + > + pthread_mutex_unlock(&libxfs_max_lsn_lock); This will have the same lock contention problems that the kernel code would have had - my repair scalablity tests regularly reach over 1GB/s of metadata being prefetched through tens of threads, so this is going have a significant impact on performance in those tests.... Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs