提交 2a86b3e7 编写于 作者: T Tejun Heo 提交者: Linus Torvalds

dlm: convert to idr_alloc()

Convert to the much saner new idr interface.  Error return values from
recover_idr_add() mix -1 and -errno.  The conversion doesn't change
that but it looks iffy.
Signed-off-by: NTejun Heo <tj@kernel.org>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 a1c36b16
...@@ -1183,7 +1183,7 @@ static void detach_lkb(struct dlm_lkb *lkb) ...@@ -1183,7 +1183,7 @@ static void detach_lkb(struct dlm_lkb *lkb)
static int create_lkb(struct dlm_ls *ls, struct dlm_lkb **lkb_ret) static int create_lkb(struct dlm_ls *ls, struct dlm_lkb **lkb_ret)
{ {
struct dlm_lkb *lkb; struct dlm_lkb *lkb;
int rv, id; int rv;
lkb = dlm_allocate_lkb(ls); lkb = dlm_allocate_lkb(ls);
if (!lkb) if (!lkb)
...@@ -1199,19 +1199,13 @@ static int create_lkb(struct dlm_ls *ls, struct dlm_lkb **lkb_ret) ...@@ -1199,19 +1199,13 @@ static int create_lkb(struct dlm_ls *ls, struct dlm_lkb **lkb_ret)
mutex_init(&lkb->lkb_cb_mutex); mutex_init(&lkb->lkb_cb_mutex);
INIT_WORK(&lkb->lkb_cb_work, dlm_callback_work); INIT_WORK(&lkb->lkb_cb_work, dlm_callback_work);
retry: idr_preload(GFP_NOFS);
rv = idr_pre_get(&ls->ls_lkbidr, GFP_NOFS);
if (!rv)
return -ENOMEM;
spin_lock(&ls->ls_lkbidr_spin); spin_lock(&ls->ls_lkbidr_spin);
rv = idr_get_new_above(&ls->ls_lkbidr, lkb, 1, &id); rv = idr_alloc(&ls->ls_lkbidr, lkb, 1, 0, GFP_NOWAIT);
if (!rv) if (rv >= 0)
lkb->lkb_id = id; lkb->lkb_id = rv;
spin_unlock(&ls->ls_lkbidr_spin); spin_unlock(&ls->ls_lkbidr_spin);
idr_preload_end();
if (rv == -EAGAIN)
goto retry;
if (rv < 0) { if (rv < 0) {
log_error(ls, "create_lkb idr error %d", rv); log_error(ls, "create_lkb idr error %d", rv);
......
...@@ -305,27 +305,26 @@ static int recover_idr_empty(struct dlm_ls *ls) ...@@ -305,27 +305,26 @@ static int recover_idr_empty(struct dlm_ls *ls)
static int recover_idr_add(struct dlm_rsb *r) static int recover_idr_add(struct dlm_rsb *r)
{ {
struct dlm_ls *ls = r->res_ls; struct dlm_ls *ls = r->res_ls;
int rv, id; int rv;
rv = idr_pre_get(&ls->ls_recover_idr, GFP_NOFS);
if (!rv)
return -ENOMEM;
idr_preload(GFP_NOFS);
spin_lock(&ls->ls_recover_idr_lock); spin_lock(&ls->ls_recover_idr_lock);
if (r->res_id) { if (r->res_id) {
spin_unlock(&ls->ls_recover_idr_lock); rv = -1;
return -1; goto out_unlock;
}
rv = idr_get_new_above(&ls->ls_recover_idr, r, 1, &id);
if (rv) {
spin_unlock(&ls->ls_recover_idr_lock);
return rv;
} }
r->res_id = id; rv = idr_alloc(&ls->ls_recover_idr, r, 1, 0, GFP_NOWAIT);
if (rv < 0)
goto out_unlock;
r->res_id = rv;
ls->ls_recover_list_count++; ls->ls_recover_list_count++;
dlm_hold_rsb(r); dlm_hold_rsb(r);
rv = 0;
out_unlock:
spin_unlock(&ls->ls_recover_idr_lock); spin_unlock(&ls->ls_recover_idr_lock);
return 0; idr_preload_end();
return rv;
} }
static void recover_idr_del(struct dlm_rsb *r) static void recover_idr_del(struct dlm_rsb *r)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册