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: Tejun Heo <tj@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
a1c36b166b
commit
2a86b3e74f
@@ -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)
|
|||||||
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)
|
|||||||
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);
|
rv = idr_alloc(&ls->ls_recover_idr, r, 1, 0, GFP_NOWAIT);
|
||||||
if (rv) {
|
if (rv < 0)
|
||||||
spin_unlock(&ls->ls_recover_idr_lock);
|
goto out_unlock;
|
||||||
return rv;
|
|
||||||
}
|
r->res_id = rv;
|
||||||
r->res_id = id;
|
|
||||||
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)
|
||||||
|
Reference in New Issue
Block a user