On Tue, 14 Oct 2014 20:13:26 +0100 Al Viro <viro@xxxxxxxxxxxxxxxxxx> wrote: > On Tue, Oct 14, 2014 at 07:11:34AM -0400, Jeff Layton wrote: > > > Ugh. Now that I've sent the patch, I think this is bogus, so I'll go > > ahead and NAK it myself... > > > > The problem is not the s_active counter, but the fact that grab_super > > bumps the s_count unconditionally. So, this code seems to be using the > > hlist_unhashed check to verify that it's ok to bump the s_count there. > > > > That said, I don't quite get why it uses that as the check -- would it > > not be more straightforward to simply have grab_super and other callers > > check for a 0->1 transition of the s_count? > > Because there might be *other* holders of ->s_count waiting to run down. > Basically, you reintroduce a nasty livelock that way. Once the > superblock is past the shutdown, ->s_count can go only down. Somebody > might be holding it while waiting for ->s_umount to be acquired, but > all such processes will detect that it's dead as soon as they get > ->s_umount, drop it and drop ->s_count. Allowing e.g. grab_super() to > _increment_ ->s_count and try to get ->s_umount at that stage would > reopen a livelock we used to have. Ok, got it. Thanks for the clarification, Al! -- Jeff Layton <jlayton@xxxxxxxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html