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 files changed, 3 insertions(+), 1 deletions(-)
15 diff --git a/fs/ocfs2/quota_global.c b/fs/ocfs2/quota_global.c
16 index 1ed0f7c..edfa60c 100644
17 --- a/fs/ocfs2/quota_global.c
18 +++ b/fs/ocfs2/quota_global.c
19 @@ -421,6 +421,7 @@ int ocfs2_global_read_dquot(struct dquot *dquot)
20 OCFS2_DQUOT(dquot)->dq_originodes = dquot->dq_dqb.dqb_curinodes;
21 if (!dquot->dq_off) { /* No real quota entry? */
22 /* Upgrade to exclusive lock for allocation */
23 + ocfs2_qinfo_unlock(info, 0);
24 err = ocfs2_qinfo_lock(info, 1);
27 @@ -435,7 +436,8 @@ int ocfs2_global_read_dquot(struct dquot *dquot)
30 ocfs2_qinfo_unlock(info, 1);
31 - ocfs2_qinfo_unlock(info, 0);
33 + ocfs2_qinfo_unlock(info, 0);