mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-11 15:14:03 +08:00
drbd: take error path in drbd_adm_down if interrupted by signal
drbd_adm_down() does adm_detach(), which can fail with various error codes, or be interrupted by a signal. The interrupted by signal case was not properly handled, leading to block drbd0: ASSERT( mdev->state.disk == D_DISKLESS && mdev->state.conn == C_STANDALONE ) in drbd/drbd_worker.c and further to destroying objects while still in use, and resulting crashes. Detect the interruption, and take the error path out. Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
This commit is contained in:
parent
9a278a7906
commit
27012382bc
@ -3188,7 +3188,7 @@ int drbd_adm_down(struct sk_buff *skb, struct genl_info *info)
|
|||||||
/* detach */
|
/* detach */
|
||||||
idr_for_each_entry(&adm_ctx.tconn->volumes, mdev, i) {
|
idr_for_each_entry(&adm_ctx.tconn->volumes, mdev, i) {
|
||||||
retcode = adm_detach(mdev, 0);
|
retcode = adm_detach(mdev, 0);
|
||||||
if (retcode < SS_SUCCESS) {
|
if (retcode < SS_SUCCESS || retcode > NO_ERROR) {
|
||||||
drbd_msg_put_info("failed to detach");
|
drbd_msg_put_info("failed to detach");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user