From 28e1f0f2e77d1e02243746193cec92dbfcf24354 Mon Sep 17 00:00:00 2001 From: Philipp Reisner Date: Tue, 15 Mar 2011 16:56:18 +0100 Subject: [PATCH] --- yaml --- r: 345869 b: refs/heads/master c: 2325eb661f745ed543ef33642f5fe0dd6d1f0850 h: refs/heads/master i: 345867: 551ff7deae07c13e543c07eb70e74c1a2c42d9c7 v: v3 --- [refs] | 2 +- trunk/drivers/block/drbd/drbd_int.h | 1 + trunk/drivers/block/drbd/drbd_main.c | 5 +++++ trunk/drivers/block/drbd/drbd_receiver.c | 5 +++-- trunk/drivers/block/drbd/drbd_state.c | 4 ++-- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 05fb106e89ab..c23b8ed44e68 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 082a3439a2d34c465c2f5bc10a324fb4d96b2332 +refs/heads/master: 2325eb661f745ed543ef33642f5fe0dd6d1f0850 diff --git a/trunk/drivers/block/drbd/drbd_int.h b/trunk/drivers/block/drbd/drbd_int.h index 5fa7ba0b17de..278e7acc7f32 100644 --- a/trunk/drivers/block/drbd/drbd_int.h +++ b/trunk/drivers/block/drbd/drbd_int.h @@ -1595,6 +1595,7 @@ extern void _drbd_wait_ee_list_empty(struct drbd_conf *mdev, extern void drbd_set_recv_tcq(struct drbd_conf *mdev, int tcq_enabled); extern void _drbd_clear_done_ee(struct drbd_conf *mdev, struct list_head *to_be_freed); extern void conn_flush_workqueue(struct drbd_tconn *tconn); +extern int drbd_connected(int vnr, void *p, void *data); static inline void drbd_flush_workqueue(struct drbd_conf *mdev) { conn_flush_workqueue(mdev->tconn); diff --git a/trunk/drivers/block/drbd/drbd_main.c b/trunk/drivers/block/drbd/drbd_main.c index 40b7b93def75..79a0e042252f 100644 --- a/trunk/drivers/block/drbd/drbd_main.c +++ b/trunk/drivers/block/drbd/drbd_main.c @@ -2410,6 +2410,11 @@ enum drbd_ret_code conn_new_minor(struct drbd_tconn *tconn, unsigned int minor, } add_disk(disk); + /* inherit the connection state */ + mdev->state.conn = tconn->cstate; + if (mdev->state.conn == C_WF_REPORT_PARAMS) + drbd_connected(vnr, mdev, tconn); + return NO_ERROR; out_idr_remove_vol: diff --git a/trunk/drivers/block/drbd/drbd_receiver.c b/trunk/drivers/block/drbd/drbd_receiver.c index 3c739ab4de55..54f45fcf32b8 100644 --- a/trunk/drivers/block/drbd/drbd_receiver.c +++ b/trunk/drivers/block/drbd/drbd_receiver.c @@ -744,8 +744,9 @@ static int drbd_socket_okay(struct socket **sock) return false; } } - -static int drbd_connected(int vnr, void *p, void *data) +/* Gets called if a connection is established, or if a new minor gets created + in a connection */ +int drbd_connected(int vnr, void *p, void *data) { struct drbd_conf *mdev = (struct drbd_conf *)p; int ok = 1; diff --git a/trunk/drivers/block/drbd/drbd_state.c b/trunk/drivers/block/drbd/drbd_state.c index 0db6c4316f7e..886b996ec7b3 100644 --- a/trunk/drivers/block/drbd/drbd_state.c +++ b/trunk/drivers/block/drbd/drbd_state.c @@ -432,8 +432,8 @@ is_valid_soft_transition(union drbd_state os, union drbd_state ns) if (ns.conn == C_DISCONNECTING && os.conn == C_UNCONNECTED) rv = SS_IN_TRANSIENT_STATE; - if (ns.conn == os.conn && ns.conn == C_WF_REPORT_PARAMS) - rv = SS_IN_TRANSIENT_STATE; + /* if (ns.conn == os.conn && ns.conn == C_WF_REPORT_PARAMS) + rv = SS_IN_TRANSIENT_STATE; */ if ((ns.conn == C_VERIFY_S || ns.conn == C_VERIFY_T) && os.conn < C_CONNECTED) rv = SS_NEED_CONNECTION;