From: Darrick J. Wong Date: Fri, 15 Oct 2021 20:28:14 +0000 (-0400) Subject: libxfs: fix crash on second attempt to initialize library X-Git-Tag: libxfs-5.14-sync_2021-10-16~53 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c1ab394af3c6e51f14ca04bf7d2a2881d3c55daf;p=thirdparty%2Fxfsprogs-dev.git libxfs: fix crash on second attempt to initialize library xfs_repair crashes when it tries to initialize the libxfs library but the initialization fails because the fs is already mounted: # xfs_repair /dev/sdd xfs_repair: /dev/sdd contains a mounted filesystem xfs_repair: urcu.c:553: urcu_memb_register_thread: Assertion `!URCU_TLS(rcu_reader).registered' failed. Aborted This is because libxfs_init() registers the main thread with liburcu, but doesn't unregister the thread if libxfs library initialization fails. When repair sets more dangerous options and tries again, the second initialization attempt causes liburcu to abort. Fix this by unregistering the thread with liburcu if libxfs initialization fails. Observed by running xfs/284. Fixes: e4da1b16 ("xfsprogs: introduce liburcu support") Signed-off-by: Darrick J. Wong Signed-off-by: Eric Sandeen --- diff --git a/libxfs/init.c b/libxfs/init.c index d0753ce5e..14911596c 100644 --- a/libxfs/init.c +++ b/libxfs/init.c @@ -407,8 +407,10 @@ done: unlink(rtpath); if (fd >= 0) close(fd); - if (!rval) + if (!rval) { libxfs_close_devices(a); + rcu_unregister_thread(); + } return rval; }