aboutsummaryrefslogtreecommitdiffstats
path: root/fs/dlm/recover.c
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2012-06-05 16:55:19 -0400
committerDavid Teigland <teigland@redhat.com>2012-07-16 15:18:22 -0400
commitc503a62103c46d56447f56306b52be6f844689ba (patch)
treecfc821efb8d7cd73e411d25251607428769e6e9e /fs/dlm/recover.c
parent6d768177c282637a7943e72b4b2b148e7553ecf1 (diff)
dlm: fix conversion deadlock from recovery
The process of rebuilding locks on a new master during recovery could re-order the locks on the convert queue, creating an "in place" conversion deadlock that would not be resolved. Fix this by not considering queue order when granting conversions after recovery. Signed-off-by: David Teigland <teigland@redhat.com>
Diffstat (limited to 'fs/dlm/recover.c')
-rw-r--r--fs/dlm/recover.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/dlm/recover.c b/fs/dlm/recover.c
index 12702cc533b3..4a7a76e42fc3 100644
--- a/fs/dlm/recover.c
+++ b/fs/dlm/recover.c
@@ -804,6 +804,7 @@ static void recover_lvb(struct dlm_rsb *r)
804 804
805static void recover_conversion(struct dlm_rsb *r) 805static void recover_conversion(struct dlm_rsb *r)
806{ 806{
807 struct dlm_ls *ls = r->res_ls;
807 struct dlm_lkb *lkb; 808 struct dlm_lkb *lkb;
808 int grmode = -1; 809 int grmode = -1;
809 810
@@ -818,10 +819,15 @@ static void recover_conversion(struct dlm_rsb *r)
818 list_for_each_entry(lkb, &r->res_convertqueue, lkb_statequeue) { 819 list_for_each_entry(lkb, &r->res_convertqueue, lkb_statequeue) {
819 if (lkb->lkb_grmode != DLM_LOCK_IV) 820 if (lkb->lkb_grmode != DLM_LOCK_IV)
820 continue; 821 continue;
821 if (grmode == -1) 822 if (grmode == -1) {
823 log_debug(ls, "recover_conversion %x set gr to rq %d",
824 lkb->lkb_id, lkb->lkb_rqmode);
822 lkb->lkb_grmode = lkb->lkb_rqmode; 825 lkb->lkb_grmode = lkb->lkb_rqmode;
823 else 826 } else {
827 log_debug(ls, "recover_conversion %x set gr %d",
828 lkb->lkb_id, grmode);
824 lkb->lkb_grmode = grmode; 829 lkb->lkb_grmode = grmode;
830 }
825 } 831 }
826} 832}
827 833