summaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd/drbd_receiver.c
diff options
context:
space:
mode:
authorPhilipp Reisner2012-04-06 12:07:34 +0200
committerPhilipp Reisner2012-11-08 16:58:26 +0100
commita1096a6e9da7885ec9e11d93aa459685a33fa4d9 (patch)
tree36ee9aba8823ed51b0c71176df5f2b891ba0c06a /drivers/block/drbd/drbd_receiver.c
parentdrbd: Fixed processing of disk-barrier, disk-flushes and disk-drain (diff)
downloadkernel-qcow2-linux-a1096a6e9da7885ec9e11d93aa459685a33fa4d9.tar.gz
kernel-qcow2-linux-a1096a6e9da7885ec9e11d93aa459685a33fa4d9.tar.xz
kernel-qcow2-linux-a1096a6e9da7885ec9e11d93aa459685a33fa4d9.zip
drbd: Delay/reject other state changes while establishing a connection
Changes to the role and disk state should be delayed or rejected while we establish a connection. This is necessary, since the peer will base its resync decision on the UUIDs and the state we sent in the drbd_connect() function. The most prominent example for this race is becoming primary after sending state and UUIDs and before the state changes to C_WF_CONNECTION. Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_receiver.c')
-rw-r--r--drivers/block/drbd/drbd_receiver.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index e8cd4c4acc65..7b690342efa6 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -848,6 +848,7 @@ static int conn_connect(struct drbd_tconn *tconn)
struct net_conf *nc;
int vnr, timeout, try, h, ok;
bool discard_my_data;
+ enum drbd_state_rv rv;
if (conn_request_state(tconn, NS(conn, C_WF_CONNECTION), CS_VERBOSE) < SS_SUCCESS)
return -2;
@@ -1008,6 +1009,8 @@ retry:
if (drbd_send_protocol(tconn) == -EOPNOTSUPP)
return -1;
+ set_bit(STATE_SENT, &tconn->flags);
+
rcu_read_lock();
idr_for_each_entry(&tconn->volumes, mdev, vnr) {
kref_get(&mdev->kref);
@@ -1024,8 +1027,11 @@ retry:
}
rcu_read_unlock();
- if (conn_request_state(tconn, NS(conn, C_WF_REPORT_PARAMS), CS_VERBOSE) < SS_SUCCESS)
+ rv = conn_request_state(tconn, NS(conn, C_WF_REPORT_PARAMS), CS_VERBOSE);
+ if (rv < SS_SUCCESS) {
+ clear_bit(STATE_SENT, &tconn->flags);
return 0;
+ }
drbd_thread_start(&tconn->asender);
span class='oid'>1da177e4c3f4
1da177e4c3f4
1da177e4c3f4




1da177e4c3f4




1da177e4c3f4








1da177e4c3f4
1da177e4c3f4
1da177e4c3f4
1da177e4c3f4
1da177e4c3f4















1da177e4c3f4


















1da177e4c3f4












1da177e4c3f4



















































































b80ca4f7ee36 ^
1da177e4c3f4

1da177e4c3f4
1da177e4c3f4











421e33d0045a ^
1da177e4c3f4
421e33d0045a ^
1da177e4c3f4





1da177e4c3f4

1da177e4c3f4











421e33d0045a ^















1da177e4c3f4
421e33d0045a ^






1da177e4c3f4














































































c3af1715928c ^
1da177e4c3f4











































1bfa11db712c ^
1da177e4c3f4




fd65e5e93cbd ^
1da177e4c3f4









f281233d3eba ^
1da177e4c3f4


fd65e5e93cbd ^
1da177e4c3f4




413e6e18b483 ^

1da177e4c3f4
















f281233d3eba ^

1da177e4c3f4

1da177e4c3f4


1da177e4c3f4

1da177e4c3f4













413e6e18b483 ^


























































1da177e4c3f4
fd65e5e93cbd ^
1da177e4c3f4










1da177e4c3f4






413e6e18b483 ^



6e9a4738c9fa ^
1da177e4c3f4
fd65e5e93cbd ^

1da177e4c3f4
413e6e18b483 ^



1da177e4c3f4







1da177e4c3f4




1da177e4c3f4
413e6e18b483 ^



1da177e4c3f4
413e6e18b483 ^





1da177e4c3f4
1da177e4c3f4

413e6e18b483 ^








1da177e4c3f4
1da177e4c3f4
1da177e4c3f4
413e6e18b483 ^








1da177e4c3f4

1da177e4c3f4




413e6e18b483 ^




1da177e4c3f4



cd00b7f5d814 ^

413e6e18b483 ^



1da177e4c3f4











413e6e18b483 ^



1da177e4c3f4



413e6e18b483 ^







1da177e4c3f4
413e6e18b483 ^

1da177e4c3f4
413e6e18b483 ^





1da177e4c3f4
413e6e18b483 ^












1da177e4c3f4

1da177e4c3f4












8fa728a26886 ^






1da177e4c3f4








94d0e7b80596 ^






1da177e4c3f4








68b3aa7c9805 ^






1da177e4c3f4








df0ae2497dde ^






1da177e4c3f4

























8af50dcd22aa ^















1da177e4c3f4





7d12e780e003 ^
1da177e4c3f4








2dbb04c65561 ^
1da177e4c3f4



8af50dcd22aa ^
1da177e4c3f4









2dbb04c65561 ^
1da177e4c3f4
8af50dcd22aa ^
1da177e4c3f4











7a34766fdcec ^
1da177e4c3f4






7a34766fdcec ^








1da177e4c3f4


7a34766fdcec ^
1da177e4c3f4



7a34766fdcec ^
1da177e4c3f4
7a34766fdcec ^


1da177e4c3f4
7a34766fdcec ^








1da177e4c3f4






































db5ed4dfd5dd ^
1da177e4c3f4
db5ed4dfd5dd ^
1da177e4c3f4

7a34766fdcec ^

1da177e4c3f4
1da177e4c3f4



7a34766fdcec ^
1da177e4c3f4


7a34766fdcec ^
1da177e4c3f4






2dbb04c65561 ^
7a34766fdcec ^
1da177e4c3f4

2dbb04c65561 ^
1da177e4c3f4


1da177e4c3f4






1da177e4c3f4

























413e6e18b483 ^

1da177e4c3f4



1da177e4c3f4





5c1da582b3a9 ^
1da177e4c3f4

1da177e4c3f4

413e6e18b483 ^


1da177e4c3f4













3ef49a3b45c3 ^
1da177e4c3f4


























































2b55cac3d2d9 ^
1da177e4c3f4




5c1da582b3a9 ^
1da177e4c3f4




3ef49a3b45c3 ^
5c1da582b3a9 ^
1da177e4c3f4
3ef49a3b45c3 ^
1da177e4c3f4




















1da177e4c3f4









6f039790510f ^
1da177e4c3f4




1da177e4c3f4
1da177e4c3f4








1da177e4c3f4



























1da177e4c3f4



1da177e4c3f4
2dbb04c65561 ^
1da177e4c3f4






























2dbb04c65561 ^

1da177e4c3f4






1da177e4c3f4
421e33d0045a ^
























































1da177e4c3f4

























































































































421e33d0045a ^

1bfa11db712c ^


1da177e4c3f4
421e33d0045a ^




1da177e4c3f4
1bfa11db712c ^


1da177e4c3f4
1bfa11db712c ^
0ce49d6da993 ^
1bfa11db712c ^
1da177e4c3f4



1bfa11db712c ^
1da177e4c3f4




421e33d0045a ^
1da177e4c3f4

421e33d0045a ^
1bfa11db712c ^
1da177e4c3f4





421e33d0045a ^
1bfa11db712c ^


1da177e4c3f4










421e33d0045a ^



1bfa11db712c ^


1da177e4c3f4
1bfa11db712c ^
0ce49d6da993 ^
1bfa11db712c ^
1da177e4c3f4

cadbd4a5e36d ^
1da177e4c3f4











1bfa11db712c ^
1da177e4c3f4
1bfa11db712c ^
1da177e4c3f4








cadbd4a5e36d ^
1da177e4c3f4






























cadbd4a5e36d ^
1da177e4c3f4

cadbd4a5e36d ^
1da177e4c3f4





1bfa11db712c ^
1da177e4c3f4
















cadbd4a5e36d ^
1da177e4c3f4



1bfa11db712c ^
1da177e4c3f4

2b55cac3d2d9 ^
1da177e4c3f4



cadbd4a5e36d ^
1da177e4c3f4
1bfa11db712c ^
1da177e4c3f4











421e33d0045a ^
5c79d6154f33 ^
1da177e4c3f4




































































































































7a34766fdcec ^



1da177e4c3f4
7a34766fdcec ^
1da177e4c3f4
1da177e4c3f4

7a34766fdcec ^

1da177e4c3f4


























0888f4c33128 ^


1da177e4c3f4








0888f4c33128 ^





1da177e4c3f4







af5741c6de4f ^
1da177e4c3f4




















7a34766fdcec ^
1da177e4c3f4


7a34766fdcec ^
1da177e4c3f4

7a34766fdcec ^


1da177e4c3f4
7a34766fdcec ^

1da177e4c3f4





7a34766fdcec ^
1da177e4c3f4

af5741c6de4f ^
7a34766fdcec ^

1da177e4c3f4



7a34766fdcec ^
1da177e4c3f4


7a34766fdcec ^
1da177e4c3f4

7a34766fdcec ^
1da177e4c3f4




7a34766fdcec ^

1da177e4c3f4

7a34766fdcec ^
1da177e4c3f4











































1da177e4c3f4