]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
dlm: convert to idr_alloc()
authorTejun Heo <tj@kernel.org>
Thu, 7 Feb 2013 01:31:49 +0000 (12:31 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Mon, 18 Feb 2013 05:47:37 +0000 (16:47 +1100)
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.

Only compile tested.

Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/dlm/lock.c
fs/dlm/recover.c

index f7501651762d59a6ac34007fdd9704fc9e40c4eb..1b1146670c4b9c881b1b3a40d62a01b150cecd9d 100644 (file)
@@ -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)
 {
        struct dlm_lkb *lkb;
-       int rv, id;
+       int rv;
 
        lkb = dlm_allocate_lkb(ls);
        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);
        INIT_WORK(&lkb->lkb_cb_work, dlm_callback_work);
 
- retry:
-       rv = idr_pre_get(&ls->ls_lkbidr, GFP_NOFS);
-       if (!rv)
-               return -ENOMEM;
-
+       idr_preload(GFP_NOFS);
        spin_lock(&ls->ls_lkbidr_spin);
-       rv = idr_get_new_above(&ls->ls_lkbidr, lkb, 1, &id);
-       if (!rv)
-               lkb->lkb_id = id;
+       rv = idr_alloc(&ls->ls_lkbidr, lkb, 1, 0, GFP_NOWAIT);
+       if (rv >= 0)
+               lkb->lkb_id = rv;
        spin_unlock(&ls->ls_lkbidr_spin);
-
-       if (rv == -EAGAIN)
-               goto retry;
+       idr_preload_end();
 
        if (rv < 0) {
                log_error(ls, "create_lkb idr error %d", rv);
index 236d1085d6a2eddadd756cae3c8dc1ad29df26eb..a6bc63f6e31baa6ac6be822c048206daa8b77ad4 100644 (file)
@@ -305,27 +305,26 @@ static int recover_idr_empty(struct dlm_ls *ls)
 static int recover_idr_add(struct dlm_rsb *r)
 {
        struct dlm_ls *ls = r->res_ls;
-       int rv, id;
-
-       rv = idr_pre_get(&ls->ls_recover_idr, GFP_NOFS);
-       if (!rv)
-               return -ENOMEM;
+       int rv;
 
+       idr_preload(GFP_NOFS);
        spin_lock(&ls->ls_recover_idr_lock);
        if (r->res_id) {
-               spin_unlock(&ls->ls_recover_idr_lock);
-               return -1;
-       }
-       rv = idr_get_new_above(&ls->ls_recover_idr, r, 1, &id);
-       if (rv) {
-               spin_unlock(&ls->ls_recover_idr_lock);
-               return rv;
+               rv = -1;
+               goto out_unlock;
        }
-       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++;
        dlm_hold_rsb(r);
+       rv = 0;
+out_unlock:
        spin_unlock(&ls->ls_recover_idr_lock);
-       return 0;
+       idr_preload_end();
+       return rv;
 }
 
 static void recover_idr_del(struct dlm_rsb *r)