What | Removed | Added |
---|---|---|
Status | IN_PROGRESS | RESOLVED |
Resolution | --- | FIXED |
This is NOT a ocfs2 caused bug. It really looks like a dead lock problem, but actually that's not the truth. The ultimate cause of this problem is that block device blocks the node1 process before it could finish reading a block, but unfortunately, meanwhile, the process also holds the lock of global bitmap. And when node1 is blocked, node2 and node3 also need to lock global bitmap, so, they all hangs. Code path of node1's locking global bitmap: --->ocfs2_local_alloc_slide_window ------->ocfs2_local_alloc_reserve_for_window ----------->ocfs2_reserve_cluster_bitmap_bits ---------------->ocfs2_reserve_suballoc_bits -------------------->ocfs2_inode_lock(alloc_inode, &bh, 1); //here, alloc_inode represents the global bitmap.