aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/ocfs2/dlmglue.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
index f92612e4b9d6..474e57f834e6 100644
--- a/fs/ocfs2/dlmglue.c
+++ b/fs/ocfs2/dlmglue.c
@@ -1390,6 +1390,7 @@ static int __ocfs2_cluster_lock(struct ocfs2_super *osb,
1390 unsigned int gen; 1390 unsigned int gen;
1391 int noqueue_attempted = 0; 1391 int noqueue_attempted = 0;
1392 int dlm_locked = 0; 1392 int dlm_locked = 0;
1393 int kick_dc = 0;
1393 1394
1394 if (!(lockres->l_flags & OCFS2_LOCK_INITIALIZED)) { 1395 if (!(lockres->l_flags & OCFS2_LOCK_INITIALIZED)) {
1395 mlog_errno(-EINVAL); 1396 mlog_errno(-EINVAL);
@@ -1524,7 +1525,12 @@ update_holders:
1524unlock: 1525unlock:
1525 lockres_clear_flags(lockres, OCFS2_LOCK_UPCONVERT_FINISHING); 1526 lockres_clear_flags(lockres, OCFS2_LOCK_UPCONVERT_FINISHING);
1526 1527
1528 /* ocfs2_unblock_lock reques on seeing OCFS2_LOCK_UPCONVERT_FINISHING */
1529 kick_dc = (lockres->l_flags & OCFS2_LOCK_BLOCKED);
1530
1527 spin_unlock_irqrestore(&lockres->l_lock, flags); 1531 spin_unlock_irqrestore(&lockres->l_lock, flags);
1532 if (kick_dc)
1533 ocfs2_wake_downconvert_thread(osb);
1528out: 1534out:
1529 /* 1535 /*
1530 * This is helping work around a lock inversion between the page lock 1536 * This is helping work around a lock inversion between the page lock