Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2a86b3e7 authored by Tejun Heo's avatar Tejun Heo Committed by Linus Torvalds
Browse files

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: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent a1c36b16
Loading
Loading
Loading
Loading
+6 −12
Original line number Original line Diff line number Diff line
@@ -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);
+13 −14
Original line number Original line Diff line number Diff line
@@ -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)