1 From: Jan Kara <jack@suse.cz>
2 Subject: ocfs2: Fix possible deadlock in ocfs2_global_read_dquot()
5 It is not possible to get a read lock and then try to get the same write lock
6 in one thread as that can block on downconvert being requested by other node
7 leading to deadlock. So first drop the quota lock for reading and only after
8 that get it for writing.
10 Signed-off-by: Jan Kara <jack@suse.cz>
12 fs/ocfs2/quota_global.c | 4 +++-
13 1 file changed, 3 insertions(+), 1 deletion(-)
15 --- a/fs/ocfs2/quota_global.c
16 +++ b/fs/ocfs2/quota_global.c
17 @@ -354,6 +354,7 @@ int ocfs2_global_read_dquot(struct dquot
18 OCFS2_DQUOT(dquot)->dq_originodes = dquot->dq_dqb.dqb_curinodes;
19 if (!dquot->dq_off) { /* No real quota entry? */
20 /* Upgrade to exclusive lock for allocation */
21 + ocfs2_qinfo_unlock(info, 0);
22 err = ocfs2_qinfo_lock(info, 1);
25 @@ -368,7 +369,8 @@ int ocfs2_global_read_dquot(struct dquot
28 ocfs2_qinfo_unlock(info, 1);
29 - ocfs2_qinfo_unlock(info, 0);
31 + ocfs2_qinfo_unlock(info, 0);