diff options
Diffstat (limited to 'fs/dlm/ast.c')
| -rw-r--r-- | fs/dlm/ast.c | 25 | 
1 files changed, 5 insertions, 20 deletions
diff --git a/fs/dlm/ast.c b/fs/dlm/ast.c index 700ff2e0515a..1f2f70a1b824 100644 --- a/fs/dlm/ast.c +++ b/fs/dlm/ast.c @@ -36,23 +36,6 @@ void dlm_callback_set_last_ptr(struct dlm_callback **from,  	*from = to;  } -void dlm_purge_lkb_callbacks(struct dlm_lkb *lkb) -{ -	struct dlm_callback *cb, *safe; - -	list_for_each_entry_safe(cb, safe, &lkb->lkb_callbacks, list) { -		list_del(&cb->list); -		kref_put(&cb->ref, dlm_release_callback); -	} - -	clear_bit(DLM_IFL_CB_PENDING_BIT, &lkb->lkb_iflags); - -	/* invalidate */ -	dlm_callback_set_last_ptr(&lkb->lkb_last_cast, NULL); -	dlm_callback_set_last_ptr(&lkb->lkb_last_cb, NULL); -	lkb->lkb_last_bast_mode = -1; -} -  int dlm_enqueue_lkb_callback(struct dlm_lkb *lkb, uint32_t flags, int mode,  			     int status, uint32_t sbflags)  { @@ -181,10 +164,12 @@ void dlm_callback_work(struct work_struct *work)  	spin_lock(&lkb->lkb_cb_lock);  	rv = dlm_dequeue_lkb_callback(lkb, &cb); -	spin_unlock(&lkb->lkb_cb_lock); - -	if (WARN_ON_ONCE(rv == DLM_DEQUEUE_CALLBACK_EMPTY)) +	if (WARN_ON_ONCE(rv == DLM_DEQUEUE_CALLBACK_EMPTY)) { +		clear_bit(DLM_IFL_CB_PENDING_BIT, &lkb->lkb_iflags); +		spin_unlock(&lkb->lkb_cb_lock);  		goto out; +	} +	spin_unlock(&lkb->lkb_cb_lock);  	for (;;) {  		castfn = lkb->lkb_astfn;  |