浏览代码

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>
Lars Ellenberg 15 年之前
父节点
当前提交
0b33a9164a
共有 1 个文件被更改,包括 3 次插入1 次删除
  1. 3 1
      drivers/block/drbd/drbd_receiver.c

+ 3 - 1
drivers/block/drbd/drbd_receiver.c

@@ -3499,8 +3499,10 @@ static void drbdd(struct drbd_conf *mdev)
 
 	while (get_t_state(&mdev->receiver) == Running) {
 		drbd_thread_current_set_cpu(mdev);
-		if (!drbd_recv_header(mdev, header))
+		if (!drbd_recv_header(mdev, header)) {
+			drbd_force_state(mdev, NS(conn, C_PROTOCOL_ERROR));
 			break;
+		}
 
 		if (header->command < P_MAX_CMD)
 			handler = drbd_cmd_handler[header->command];