[PATCH 2/2] ocfs2: Fix race between mount and recovery
authorSunil Mushran <sunil.mushran@oracle.com>
Tue, 15 Jul 2008 00:31:10 +0000 (17:31 -0700)
committerMark Fasheh <mfasheh@suse.com>
Thu, 31 Jul 2008 23:21:14 +0000 (16:21 -0700)
commit539d8264093560b917ee3afe4c7f74e5da09d6a5
tree1fce83387272c0b2d61bd945769f4984aa5e79ce
parentc69991aac71a8beb57c11d651c7fd4b24c32aa8b
[PATCH 2/2] ocfs2: Fix race between mount and recovery

As the fs recovery is asynchronous, there is a small chance that another
node can mount (and thus recover) the slot before the recovery thread
gets to it.

If this happens, the recovery thread will block indefinitely on the
journal/slot lock as that lock will be held for the duration of the mount
(by design) by the node assigned to that slot.

The solution implemented is to keep track of the journal replays using
a recovery generation in the journal inode, which will be incremented by the
thread replaying that journal. The recovery thread, before attempting the
blocking lock on the journal/slot lock, will compare the generation on disk
with what it has cached and skip recovery if it does not match.

This bug appears to have been inadvertently introduced during the mount/umount
vote removal by mainline commit 34d024f84345807bf44163fac84e921513dde323. In the
mount voting scheme, the messaging would indirectly indicate that the slot
was being recovered.

Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
fs/ocfs2/journal.c
fs/ocfs2/journal.h
fs/ocfs2/ocfs2.h
fs/ocfs2/super.c