On Mon, Dec 15, 2014 at 02:51:09PM -0800, Andrew Morton wrote:
> From: Junxiao Bi <[email protected]>
> Subject: ocfs2: fix journal commit deadlock
> 
> For buffer write, page lock will be got in write_begin and released in
> write_end, in ocfs2_write_end_nolock(), before it unlock the page in
> ocfs2_free_write_ctxt(), it calls ocfs2_run_deallocs(), this will ask for
> the read lock of journal->j_trans_barrier.  Holding page lock and ask for
> journal->j_trans_barrier breaks the locking order.
> 
> This will cause a deadlock with journal commit threads, ocfs2cmt will get
> write lock of journal->j_trans_barrier first, then it wakes up kjournald2
> to do the commit work, at last it waits until done.  To commit journal,
> kjournald2 needs flushing data first, it needs get the cache page lock.
> 
> Since some ocfs2 cluster locks are holding by write process, this
> deadlock may hung the whole cluster.
> 
> unlock pages before ocfs2_run_deallocs() can fix the locking order, also
> put unlock before ocfs2_commit_trans() to make page lock is unlocked
> before j_trans_barrier to preserve unlocking order.
> 
> Signed-off-by: Junxiao Bi <[email protected]>
> Reviewed-by: Wengang Wang <[email protected]>
> Cc: <[email protected]>
> Cc: Mark Fasheh <[email protected]>
> Cc: Joel Becker <[email protected]>
> Signed-off-by: Andrew Morton <[email protected]>

Reviewed-by: Mark Fasheh <[email protected]>
        --Mark

--
Mark Fasheh
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to