Merge branch 'master' of git://1984.lsi.us.es/nf
[cascardo/linux.git] / fs / dlm / lock.c
index f750165..1b11466 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);