Commit d50eee21 authored by Philipp Reisner's avatar Philipp Reisner

drbd: Extracted after_conn_state_ch() out of after_state_ch()

Signed-off-by: default avatarPhilipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: default avatarLars Ellenberg <lars.ellenberg@linbit.com>
parent 2a67d8b9
...@@ -45,10 +45,6 @@ static void after_state_ch(struct drbd_conf *mdev, union drbd_state os, ...@@ -45,10 +45,6 @@ static void after_state_ch(struct drbd_conf *mdev, union drbd_state os,
union drbd_state ns, enum chg_state_flags flags); union drbd_state ns, enum chg_state_flags flags);
static void after_conn_state_ch(struct drbd_tconn *tconn, union drbd_state os, static void after_conn_state_ch(struct drbd_tconn *tconn, union drbd_state os,
union drbd_state ns, enum chg_state_flags flags); union drbd_state ns, enum chg_state_flags flags);
static enum drbd_state_rv is_valid_state(struct drbd_conf *, union drbd_state);
static enum drbd_state_rv is_valid_soft_transition(union drbd_state, union drbd_state);
static union drbd_state sanitize_state(struct drbd_conf *mdev, union drbd_state os,
union drbd_state ns, const char **warn_sync_abort);
/** /**
* cl_wide_st_chg() - true if the state change is a cluster wide one * cl_wide_st_chg() - true if the state change is a cluster wide one
...@@ -98,6 +94,15 @@ void drbd_force_state(struct drbd_conf *mdev, ...@@ -98,6 +94,15 @@ void drbd_force_state(struct drbd_conf *mdev,
drbd_change_state(mdev, CS_HARD, mask, val); drbd_change_state(mdev, CS_HARD, mask, val);
} }
static enum drbd_state_rv is_valid_state(struct drbd_conf *, union drbd_state);
static enum drbd_state_rv is_valid_state_transition(struct drbd_conf *,
union drbd_state,
union drbd_state);
static union drbd_state sanitize_state(struct drbd_conf *mdev, union drbd_state os,
union drbd_state ns, const char **warn_sync_abort);
int drbd_send_state_req(struct drbd_conf *,
union drbd_state, union drbd_state);
static enum drbd_state_rv static enum drbd_state_rv
_req_st_cond(struct drbd_conf *mdev, union drbd_state mask, _req_st_cond(struct drbd_conf *mdev, union drbd_state mask,
union drbd_state val) union drbd_state val)
...@@ -123,7 +128,7 @@ _req_st_cond(struct drbd_conf *mdev, union drbd_state mask, ...@@ -123,7 +128,7 @@ _req_st_cond(struct drbd_conf *mdev, union drbd_state mask,
if (!rv) { if (!rv) {
rv = is_valid_state(mdev, ns); rv = is_valid_state(mdev, ns);
if (rv == SS_SUCCESS) { if (rv == SS_SUCCESS) {
rv = is_valid_soft_transition(os, ns); rv = is_valid_state_transition(mdev, ns, os);
if (rv == SS_SUCCESS) if (rv == SS_SUCCESS)
rv = SS_UNKNOWN_ERROR; /* cont waiting, otherwise fail. */ rv = SS_UNKNOWN_ERROR; /* cont waiting, otherwise fail. */
} }
...@@ -166,7 +171,7 @@ drbd_req_state(struct drbd_conf *mdev, union drbd_state mask, ...@@ -166,7 +171,7 @@ drbd_req_state(struct drbd_conf *mdev, union drbd_state mask,
if (cl_wide_st_chg(mdev, os, ns)) { if (cl_wide_st_chg(mdev, os, ns)) {
rv = is_valid_state(mdev, ns); rv = is_valid_state(mdev, ns);
if (rv == SS_SUCCESS) if (rv == SS_SUCCESS)
rv = is_valid_soft_transition(os, ns); rv = is_valid_state_transition(mdev, ns, os);
spin_unlock_irqrestore(&mdev->tconn->req_lock, flags); spin_unlock_irqrestore(&mdev->tconn->req_lock, flags);
if (rv < SS_SUCCESS) { if (rv < SS_SUCCESS) {
...@@ -339,13 +344,14 @@ is_valid_state(struct drbd_conf *mdev, union drbd_state ns) ...@@ -339,13 +344,14 @@ is_valid_state(struct drbd_conf *mdev, union drbd_state ns)
} }
/** /**
* is_valid_soft_transition() - Returns an SS_ error code if the state transition is not possible * is_valid_state_transition() - Returns an SS_ error code if the state transition is not possible
* @mdev: DRBD device. * @mdev: DRBD device.
* @ns: new state. * @ns: new state.
* @os: old state. * @os: old state.
*/ */
static enum drbd_state_rv static enum drbd_state_rv
is_valid_soft_transition(union drbd_state os, union drbd_state ns) is_valid_state_transition(struct drbd_conf *mdev, union drbd_state ns,
union drbd_state os)
{ {
enum drbd_state_rv rv = SS_SUCCESS; enum drbd_state_rv rv = SS_SUCCESS;
...@@ -651,9 +657,9 @@ __drbd_set_state(struct drbd_conf *mdev, union drbd_state ns, ...@@ -651,9 +657,9 @@ __drbd_set_state(struct drbd_conf *mdev, union drbd_state ns,
this happen...*/ this happen...*/
if (is_valid_state(mdev, os) == rv) if (is_valid_state(mdev, os) == rv)
rv = is_valid_soft_transition(os, ns); rv = is_valid_state_transition(mdev, ns, os);
} else } else
rv = is_valid_soft_transition(os, ns); rv = is_valid_state_transition(mdev, ns, os);
} }
if (rv < SS_SUCCESS) { if (rv < SS_SUCCESS) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment