Index: drbd_receiver.c =================================================================== --- drbd_receiver.c (revision 2603) +++ drbd_receiver.c (working copy) @@ -1668,7 +1668,7 @@ peer = mdev->p_uuid[Bitmap] & 1; ch_peer = mdev->p_uuid[UUID_SIZE]; - ch_self = drbd_bm_total_weight(mdev); + ch_self = mdev->comm_bm_set; switch ( mdev->net_conf->after_sb_0p ) { case Consensus: Index: drbd_main.c =================================================================== --- drbd_main.c (revision 2603) +++ drbd_main.c (working copy) @@ -1288,7 +1288,8 @@ : 0; } - p.uuid[UUID_SIZE] = cpu_to_be64(drbd_bm_total_weight(mdev)); + mdev->comm_bm_set = drbd_bm_total_weight(mdev); + p.uuid[UUID_SIZE] = cpu_to_be64(mdev->comm_bm_set); uuid_flags |= mdev->net_conf->want_lose ? 1 : 0; uuid_flags |= test_bit(CRASHED_PRIMARY, &mdev->flags) ? 2 : 0; p.uuid[UUID_FLAGS] = cpu_to_be64(uuid_flags); Index: drbd_int.h =================================================================== --- drbd_int.h (revision 2603) +++ drbd_int.h (working copy) @@ -853,6 +853,7 @@ unsigned int peer_seq; spinlock_t peer_seq_lock; int minor; + unsigned long comm_bm_set; // communicated number of set bits. }; static inline drbd_dev *minor_to_mdev(int minor)