mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
dlm: another call to confirm_master in receive_request_reply
When a failed request (EBADR or ENOTBLK) is unlocked/canceled instead of retried, there may be other lkb's waiting on the rsb_lookup list for it to complete. A call to confirm_master() is needed to move on to the next waiting lkb since the current one won't be retried. Signed-off-by: David Teigland <teigland@redhat.com>
This commit is contained in:
parent
601342ce02
commit
aec64e1be2
@ -1940,8 +1940,11 @@ static void confirm_master(struct dlm_rsb *r, int error)
|
||||
break;
|
||||
|
||||
case -EAGAIN:
|
||||
/* the remote master didn't queue our NOQUEUE request;
|
||||
make a waiting lkb the first_lkid */
|
||||
case -EBADR:
|
||||
case -ENOTBLK:
|
||||
/* the remote request failed and won't be retried (it was
|
||||
a NOQUEUE, or has been canceled/unlocked); make a waiting
|
||||
lkb the first_lkid */
|
||||
|
||||
r->res_first_lkid = 0;
|
||||
|
||||
@ -3382,6 +3385,7 @@ static void receive_request_reply(struct dlm_ls *ls, struct dlm_message *ms)
|
||||
if (is_overlap(lkb)) {
|
||||
/* we'll ignore error in cancel/unlock reply */
|
||||
queue_cast_overlap(r, lkb);
|
||||
confirm_master(r, result);
|
||||
unhold_lkb(lkb); /* undoes create_lkb() */
|
||||
} else
|
||||
_request_lock(r, lkb);
|
||||
|
Loading…
Reference in New Issue
Block a user