aboutsummaryrefslogtreecommitdiffstats
path: root/fs/dlm/recover.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/dlm/recover.c')
-rw-r--r--fs/dlm/recover.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/fs/dlm/recover.c b/fs/dlm/recover.c
index aedea28a86a1..b2856e701641 100644
--- a/fs/dlm/recover.c
+++ b/fs/dlm/recover.c
@@ -351,23 +351,20 @@ static struct dlm_rsb *recover_idr_find(struct dlm_ls *ls, uint64_t id)
351 return r; 351 return r;
352} 352}
353 353
354static int recover_idr_clear_rsb(int id, void *p, void *data) 354static void recover_idr_clear(struct dlm_ls *ls)
355{ 355{
356 struct dlm_ls *ls = data; 356 struct dlm_rsb *r;
357 struct dlm_rsb *r = p; 357 int id;
358 358
359 r->res_id = 0; 359 spin_lock(&ls->ls_recover_idr_lock);
360 r->res_recover_locks_count = 0;
361 ls->ls_recover_list_count--;
362 360
363 dlm_put_rsb(r); 361 idr_for_each_entry(&ls->ls_recover_idr, r, id) {
364 return 0; 362 r->res_id = 0;
365} 363 r->res_recover_locks_count = 0;
364 ls->ls_recover_list_count--;
366 365
367static void recover_idr_clear(struct dlm_ls *ls) 366 dlm_put_rsb(r);
368{ 367 }
369 spin_lock(&ls->ls_recover_idr_lock);
370 idr_for_each(&ls->ls_recover_idr, recover_idr_clear_rsb, ls);
371 idr_remove_all(&ls->ls_recover_idr); 368 idr_remove_all(&ls->ls_recover_idr);
372 369
373 if (ls->ls_recover_list_count != 0) { 370 if (ls->ls_recover_list_count != 0) {