aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block
diff options
context:
space:
mode:
authorLars Ellenberg <lars.ellenberg@linbit.com>2009-11-16 09:58:04 -0500
committerPhilipp Reisner <philipp.reisner@linbit.com>2009-11-24 12:12:13 -0500
commit0b33a9164aca6332bf4a117af5528dea9675d782 (patch)
treeed825f7c748a362429aebcdb82ce836d1fcd31b0 /drivers/block
parent6c6c7951be7652f86109f2193651b78d90907c0d (diff)
add missing state change on corrupt packet header in drbd_recv_header
Otherwise the 'state fixup' in the receiver will change to Unconnected, but the receiver will terminate itself, and any attempt at 'down'ing that drbd later will block forever. see also Bugz. #259 Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block')
-rw-r--r--drivers/block/drbd/drbd_receiver.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index 9bbc509443e5..fb29a75053ef 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -3499,8 +3499,10 @@ static void drbdd(struct drbd_conf *mdev)
3499 3499
3500 while (get_t_state(&mdev->receiver) == Running) { 3500 while (get_t_state(&mdev->receiver) == Running) {
3501 drbd_thread_current_set_cpu(mdev); 3501 drbd_thread_current_set_cpu(mdev);
3502 if (!drbd_recv_header(mdev, header)) 3502 if (!drbd_recv_header(mdev, header)) {
3503 drbd_force_state(mdev, NS(conn, C_PROTOCOL_ERROR));
3503 break; 3504 break;
3505 }
3504 3506
3505 if (header->command < P_MAX_CMD) 3507 if (header->command < P_MAX_CMD)
3506 handler = drbd_cmd_handler[header->command]; 3508 handler = drbd_cmd_handler[header->command];