Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 359370
b: refs/heads/master
c: 2a86b3e
h: refs/heads/master
v: v3
  • Loading branch information
Tejun Heo authored and Linus Torvalds committed Feb 28, 2013
1 parent 90bb91d commit 71fb116
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 27 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a1c36b166be76763cfab1a4308a00d6ffd8a2cc0
refs/heads/master: 2a86b3e74f12bcdd13ceb1bf333bc2d5f43b3c02
18 changes: 6 additions & 12 deletions trunk/fs/dlm/lock.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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);
Expand Down
27 changes: 13 additions & 14 deletions trunk/fs/dlm/recover.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 71fb116

Please sign in to comment.