[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 34d024f843
. 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>
This commit is contained in:

committed by
Mark Fasheh

parent
c69991aac7
commit
539d826409
@@ -204,6 +204,8 @@ struct ocfs2_super
|
||||
|
||||
struct ocfs2_slot_info *slot_info;
|
||||
|
||||
u32 *slot_recovery_generations;
|
||||
|
||||
spinlock_t node_map_lock;
|
||||
|
||||
u64 root_blkno;
|
||||
|
Reference in New Issue
Block a user