diff options
Diffstat (limited to 'fs/ocfs2/dlm/dlmrecovery.c')
-rw-r--r-- | fs/ocfs2/dlm/dlmrecovery.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c index 773bd32bfd8c..0b5adca1b178 100644 --- a/fs/ocfs2/dlm/dlmrecovery.c +++ b/fs/ocfs2/dlm/dlmrecovery.c | |||
@@ -787,6 +787,7 @@ static int dlm_request_all_locks(struct dlm_ctxt *dlm, u8 request_from, | |||
787 | { | 787 | { |
788 | struct dlm_lock_request lr; | 788 | struct dlm_lock_request lr; |
789 | int ret; | 789 | int ret; |
790 | int status; | ||
790 | 791 | ||
791 | mlog(0, "\n"); | 792 | mlog(0, "\n"); |
792 | 793 | ||
@@ -800,13 +801,15 @@ static int dlm_request_all_locks(struct dlm_ctxt *dlm, u8 request_from, | |||
800 | 801 | ||
801 | // send message | 802 | // send message |
802 | ret = o2net_send_message(DLM_LOCK_REQUEST_MSG, dlm->key, | 803 | ret = o2net_send_message(DLM_LOCK_REQUEST_MSG, dlm->key, |
803 | &lr, sizeof(lr), request_from, NULL); | 804 | &lr, sizeof(lr), request_from, &status); |
804 | 805 | ||
805 | /* negative status is handled by caller */ | 806 | /* negative status is handled by caller */ |
806 | if (ret < 0) | 807 | if (ret < 0) |
807 | mlog(ML_ERROR, "%s: Error %d send LOCK_REQUEST to node %u " | 808 | mlog(ML_ERROR, "%s: Error %d send LOCK_REQUEST to node %u " |
808 | "to recover dead node %u\n", dlm->name, ret, | 809 | "to recover dead node %u\n", dlm->name, ret, |
809 | request_from, dead_node); | 810 | request_from, dead_node); |
811 | else | ||
812 | ret = status; | ||
810 | // return from here, then | 813 | // return from here, then |
811 | // sleep until all received or error | 814 | // sleep until all received or error |
812 | return ret; | 815 | return ret; |
@@ -2328,6 +2331,14 @@ static void dlm_do_local_recovery_cleanup(struct dlm_ctxt *dlm, u8 dead_node) | |||
2328 | } else if (res->owner == dlm->node_num) { | 2331 | } else if (res->owner == dlm->node_num) { |
2329 | dlm_free_dead_locks(dlm, res, dead_node); | 2332 | dlm_free_dead_locks(dlm, res, dead_node); |
2330 | __dlm_lockres_calc_usage(dlm, res); | 2333 | __dlm_lockres_calc_usage(dlm, res); |
2334 | } else if (res->owner == DLM_LOCK_RES_OWNER_UNKNOWN) { | ||
2335 | if (test_bit(dead_node, res->refmap)) { | ||
2336 | mlog(0, "%s:%.*s: dead node %u had a ref, but had " | ||
2337 | "no locks and had not purged before dying\n", | ||
2338 | dlm->name, res->lockname.len, | ||
2339 | res->lockname.name, dead_node); | ||
2340 | dlm_lockres_clear_refmap_bit(dlm, res, dead_node); | ||
2341 | } | ||
2331 | } | 2342 | } |
2332 | spin_unlock(&res->spinlock); | 2343 | spin_unlock(&res->spinlock); |
2333 | } | 2344 | } |