diff options
author | Ilya Dryomov <idryomov@gmail.com> | 2021-07-03 11:56:55 +0200 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2021-07-20 17:57:33 +0200 |
commit | 8798d070d416d18a75770fc19787e96705073f43 (patch) | |
tree | 6dac63e7869b10fa1ec52870d007823ca660bfdf /lib/mpi/mpi-sub-ui.c | |
parent | 2734d6c1b1a089fb593ef6a23d4b70903526fe0c (diff) |
rbd: always kick acquire on "acquired" and "released" notifications
Skipping the "lock has been released" notification if the lock owner
is not what we expect based on owner_cid can lead to I/O hangs.
One example is our own notifications: because owner_cid is cleared
in rbd_unlock(), when we get our own notification it is processed as
unexpected/duplicate and maybe_kick_acquire() isn't called. If a peer
that requested the lock then doesn't go through with acquiring it,
I/O requests that came in while the lock was being quiesced would
be stalled until another I/O request is submitted and kicks acquire
from rbd_img_exclusive_lock().
This makes the comment in rbd_release_lock() actually true: prior to
this change the canceled work was being requeued in response to the
"lock has been acquired" notification from rbd_handle_acquired_lock().
Cc: stable@vger.kernel.org # 5.3+
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Tested-by: Robin Geuze <robin.geuze@nl.team.blue>
Diffstat (limited to 'lib/mpi/mpi-sub-ui.c')
0 files changed, 0 insertions, 0 deletions