]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
drbd: add debugging assert to make sure the protocol is clean
authorLars Ellenberg <lars.ellenberg@linbit.com>
Fri, 17 Dec 2010 20:06:18 +0000 (21:06 +0100)
committerPhilipp Reisner <philipp.reisner@linbit.com>
Thu, 10 Mar 2011 10:43:34 +0000 (11:43 +0100)
We expect to only receive the recently introduced "set out of sync"
packets in specific states. If we receive them in different states, that
may confuse the resync process to the point where it won't terminate, or
think it made negative progress.

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
drivers/block/drbd/drbd_receiver.c

index be7fc67eeeca7bb085a0327abd17b5afd2a4217a..f0a0f66fbe6805f89934f0b5a9816ec3872113e3 100644 (file)
@@ -3599,6 +3599,16 @@ static int receive_out_of_sync(struct drbd_conf *mdev, enum drbd_packets cmd, un
 {
        struct p_block_desc *p = &mdev->data.rbuf.block_desc;
 
+       switch (mdev->state.conn) {
+       case C_WF_SYNC_UUID:
+       case C_WF_BITMAP_T:
+       case C_BEHIND:
+                       break;
+       default:
+               dev_err(DEV, "ASSERT FAILED cstate = %s, expected: WFSyncUUID|WFBitMapT|Behind\n",
+                               drbd_conn_str(mdev->state.conn));
+       }
+
        drbd_set_out_of_sync(mdev, be64_to_cpu(p->sector), be32_to_cpu(p->blksize));
 
        return true;