Skip to content

Commit

Permalink
libceph: rename and export con->state states
Browse files Browse the repository at this point in the history
In preparation for msgr2, rename msgr1 specific states and move the
defines to the header file.

Also drop state transition comments.  They don't cover all possible
transitions (e.g. NEGOTIATING -> STANDBY, etc) and currently do more
harm than good.

Signed-off-by: Ilya Dryomov <[email protected]>
  • Loading branch information
idryomov committed Dec 14, 2020
1 parent 30be780 commit 6d7f62b
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 52 deletions.
12 changes: 11 additions & 1 deletion include/linux/ceph/messenger.h
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,16 @@ struct ceph_msg {
struct ceph_msgpool *pool;
};

/*
* connection states
*/
#define CEPH_CON_S_CLOSED 1
#define CEPH_CON_S_PREOPEN 2
#define CEPH_CON_S_V1_BANNER 3
#define CEPH_CON_S_V1_CONNECT_MSG 4
#define CEPH_CON_S_OPEN 5
#define CEPH_CON_S_STANDBY 6

/* ceph connection fault delay defaults, for exponential backoff */
#define BASE_DELAY_INTERVAL (HZ / 4)
#define MAX_DELAY_INTERVAL (15 * HZ)
Expand All @@ -257,7 +267,7 @@ struct ceph_connection {

struct ceph_messenger *msgr;

int state;
int state; /* CEPH_CON_S_* */
atomic_t sock_state;
struct socket *sock;
struct ceph_entity_addr peer_addr; /* peer address */
Expand Down
90 changes: 39 additions & 51 deletions net/ceph/messenger.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,16 +82,6 @@
#define CON_SOCK_STATE_CONNECTED 3 /* -> CLOSING or -> CLOSED */
#define CON_SOCK_STATE_CLOSING 4 /* -> CLOSED */

/*
* connection states
*/
#define CON_STATE_CLOSED 1 /* -> PREOPEN */
#define CON_STATE_PREOPEN 2 /* -> CONNECTING, CLOSED */
#define CON_STATE_CONNECTING 3 /* -> NEGOTIATING, CLOSED */
#define CON_STATE_NEGOTIATING 4 /* -> OPEN, CLOSED */
#define CON_STATE_OPEN 5 /* -> STANDBY, CLOSED */
#define CON_STATE_STANDBY 6 /* -> PREOPEN, CLOSED */

/*
* ceph_connection flag bits
*/
Expand Down Expand Up @@ -674,7 +664,7 @@ void ceph_con_close(struct ceph_connection *con)
{
mutex_lock(&con->mutex);
dout("con_close %p peer %s\n", con, ceph_pr_addr(&con->peer_addr));
con->state = CON_STATE_CLOSED;
con->state = CEPH_CON_S_CLOSED;

con_flag_clear(con, CON_FLAG_LOSSYTX); /* so we retry next connect */
con_flag_clear(con, CON_FLAG_KEEPALIVE_PENDING);
Expand All @@ -698,8 +688,8 @@ void ceph_con_open(struct ceph_connection *con,
mutex_lock(&con->mutex);
dout("con_open %p %s\n", con, ceph_pr_addr(addr));

WARN_ON(con->state != CON_STATE_CLOSED);
con->state = CON_STATE_PREOPEN;
WARN_ON(con->state != CEPH_CON_S_CLOSED);
con->state = CEPH_CON_S_PREOPEN;

con->peer_name.type = (__u8) entity_type;
con->peer_name.num = cpu_to_le64(entity_num);
Expand Down Expand Up @@ -739,7 +729,7 @@ void ceph_con_init(struct ceph_connection *con, void *private,
INIT_LIST_HEAD(&con->out_sent);
INIT_DELAYED_WORK(&con->work, ceph_con_workfn);

con->state = CON_STATE_CLOSED;
con->state = CEPH_CON_S_CLOSED;
}
EXPORT_SYMBOL(ceph_con_init);

Expand Down Expand Up @@ -2183,7 +2173,7 @@ static int process_connect(struct ceph_connection *con)
if (con->ops->peer_reset)
con->ops->peer_reset(con);
mutex_lock(&con->mutex);
if (con->state != CON_STATE_NEGOTIATING)
if (con->state != CEPH_CON_S_V1_CONNECT_MSG)
return -EAGAIN;
break;

Expand Down Expand Up @@ -2232,8 +2222,8 @@ static int process_connect(struct ceph_connection *con)
return -1;
}

WARN_ON(con->state != CON_STATE_NEGOTIATING);
con->state = CON_STATE_OPEN;
WARN_ON(con->state != CEPH_CON_S_V1_CONNECT_MSG);
con->state = CEPH_CON_S_OPEN;
con->auth_retry = 0; /* we authenticated; clear flag */
con->peer_global_seq = le32_to_cpu(con->in_reply.global_seq);
con->connect_seq++;
Expand Down Expand Up @@ -2583,16 +2573,16 @@ static int try_write(struct ceph_connection *con)
int ret = 1;

dout("try_write start %p state %d\n", con, con->state);
if (con->state != CON_STATE_PREOPEN &&
con->state != CON_STATE_CONNECTING &&
con->state != CON_STATE_NEGOTIATING &&
con->state != CON_STATE_OPEN)
if (con->state != CEPH_CON_S_PREOPEN &&
con->state != CEPH_CON_S_V1_BANNER &&
con->state != CEPH_CON_S_V1_CONNECT_MSG &&
con->state != CEPH_CON_S_OPEN)
return 0;

/* open the socket first? */
if (con->state == CON_STATE_PREOPEN) {
if (con->state == CEPH_CON_S_PREOPEN) {
BUG_ON(con->sock);
con->state = CON_STATE_CONNECTING;
con->state = CEPH_CON_S_V1_BANNER;

con_out_kvec_reset(con);
prepare_write_banner(con);
Expand Down Expand Up @@ -2646,7 +2636,7 @@ static int try_write(struct ceph_connection *con)
}

do_next:
if (con->state == CON_STATE_OPEN) {
if (con->state == CEPH_CON_S_OPEN) {
if (con_flag_test_and_clear(con, CON_FLAG_KEEPALIVE_PENDING)) {
prepare_write_keepalive(con);
goto more;
Expand Down Expand Up @@ -2680,26 +2670,25 @@ static int try_read(struct ceph_connection *con)

more:
dout("try_read start %p state %d\n", con, con->state);
if (con->state != CON_STATE_CONNECTING &&
con->state != CON_STATE_NEGOTIATING &&
con->state != CON_STATE_OPEN)
if (con->state != CEPH_CON_S_V1_BANNER &&
con->state != CEPH_CON_S_V1_CONNECT_MSG &&
con->state != CEPH_CON_S_OPEN)
return 0;

BUG_ON(!con->sock);

dout("try_read tag %d in_base_pos %d\n", (int)con->in_tag,
con->in_base_pos);

if (con->state == CON_STATE_CONNECTING) {
dout("try_read connecting\n");
if (con->state == CEPH_CON_S_V1_BANNER) {
ret = read_partial_banner(con);
if (ret <= 0)
goto out;
ret = process_banner(con);
if (ret < 0)
goto out;

con->state = CON_STATE_NEGOTIATING;
con->state = CEPH_CON_S_V1_CONNECT_MSG;

/*
* Received banner is good, exchange connection info.
Expand All @@ -2715,8 +2704,7 @@ static int try_read(struct ceph_connection *con)
goto out;
}

if (con->state == CON_STATE_NEGOTIATING) {
dout("try_read negotiating\n");
if (con->state == CEPH_CON_S_V1_CONNECT_MSG) {
ret = read_partial_connect(con);
if (ret <= 0)
goto out;
Expand All @@ -2726,7 +2714,7 @@ static int try_read(struct ceph_connection *con)
goto more;
}

WARN_ON(con->state != CON_STATE_OPEN);
WARN_ON(con->state != CEPH_CON_S_OPEN);

if (con->in_base_pos < 0) {
/*
Expand Down Expand Up @@ -2760,7 +2748,7 @@ static int try_read(struct ceph_connection *con)
break;
case CEPH_MSGR_TAG_CLOSE:
con_close_socket(con);
con->state = CON_STATE_CLOSED;
con->state = CEPH_CON_S_CLOSED;
goto out;
default:
goto bad_tag;
Expand All @@ -2785,7 +2773,7 @@ static int try_read(struct ceph_connection *con)
if (con->in_tag == CEPH_MSGR_TAG_READY)
goto more;
process_message(con);
if (con->state == CON_STATE_OPEN)
if (con->state == CEPH_CON_S_OPEN)
prepare_read_tag(con);
goto more;
}
Expand Down Expand Up @@ -2864,15 +2852,15 @@ static bool con_sock_closed(struct ceph_connection *con)
return false;

#define CASE(x) \
case CON_STATE_ ## x: \
case CEPH_CON_S_ ## x: \
con->error_msg = "socket closed (con state " #x ")"; \
break;

switch (con->state) {
CASE(CLOSED);
CASE(PREOPEN);
CASE(CONNECTING);
CASE(NEGOTIATING);
CASE(V1_BANNER);
CASE(V1_CONNECT_MSG);
CASE(OPEN);
CASE(STANDBY);
default:
Expand Down Expand Up @@ -2943,16 +2931,16 @@ static void ceph_con_workfn(struct work_struct *work)
dout("%s: con %p BACKOFF\n", __func__, con);
break;
}
if (con->state == CON_STATE_STANDBY) {
if (con->state == CEPH_CON_S_STANDBY) {
dout("%s: con %p STANDBY\n", __func__, con);
break;
}
if (con->state == CON_STATE_CLOSED) {
if (con->state == CEPH_CON_S_CLOSED) {
dout("%s: con %p CLOSED\n", __func__, con);
BUG_ON(con->sock);
break;
}
if (con->state == CON_STATE_PREOPEN) {
if (con->state == CEPH_CON_S_PREOPEN) {
dout("%s: con %p PREOPEN\n", __func__, con);
BUG_ON(con->sock);
}
Expand Down Expand Up @@ -3001,15 +2989,15 @@ static void con_fault(struct ceph_connection *con)
ceph_pr_addr(&con->peer_addr), con->error_msg);
con->error_msg = NULL;

WARN_ON(con->state != CON_STATE_CONNECTING &&
con->state != CON_STATE_NEGOTIATING &&
con->state != CON_STATE_OPEN);
WARN_ON(con->state != CEPH_CON_S_V1_BANNER &&
con->state != CEPH_CON_S_V1_CONNECT_MSG &&
con->state != CEPH_CON_S_OPEN);

ceph_con_reset_protocol(con);

if (con_flag_test(con, CON_FLAG_LOSSYTX)) {
dout("fault on LOSSYTX channel, marking CLOSED\n");
con->state = CON_STATE_CLOSED;
con->state = CEPH_CON_S_CLOSED;
return;
}

Expand All @@ -3022,10 +3010,10 @@ static void con_fault(struct ceph_connection *con)
!con_flag_test(con, CON_FLAG_KEEPALIVE_PENDING)) {
dout("fault %p setting STANDBY clearing WRITE_PENDING\n", con);
con_flag_clear(con, CON_FLAG_WRITE_PENDING);
con->state = CON_STATE_STANDBY;
con->state = CEPH_CON_S_STANDBY;
} else {
/* retry after a delay. */
con->state = CON_STATE_PREOPEN;
con->state = CEPH_CON_S_PREOPEN;
if (!con->delay) {
con->delay = BASE_DELAY_INTERVAL;
} else if (con->delay < MAX_DELAY_INTERVAL) {
Expand Down Expand Up @@ -3092,9 +3080,9 @@ static void msg_con_set(struct ceph_msg *msg, struct ceph_connection *con)
static void clear_standby(struct ceph_connection *con)
{
/* come back from STANDBY? */
if (con->state == CON_STATE_STANDBY) {
if (con->state == CEPH_CON_S_STANDBY) {
dout("clear_standby %p and ++connect_seq\n", con);
con->state = CON_STATE_PREOPEN;
con->state = CEPH_CON_S_PREOPEN;
con->connect_seq++;
WARN_ON(con_flag_test(con, CON_FLAG_WRITE_PENDING));
WARN_ON(con_flag_test(con, CON_FLAG_KEEPALIVE_PENDING));
Expand All @@ -3115,7 +3103,7 @@ void ceph_con_send(struct ceph_connection *con, struct ceph_msg *msg)

mutex_lock(&con->mutex);

if (con->state == CON_STATE_CLOSED) {
if (con->state == CEPH_CON_S_CLOSED) {
dout("con_send %p closed, dropping %p\n", con, msg);
ceph_msg_put(msg);
mutex_unlock(&con->mutex);
Expand Down Expand Up @@ -3456,7 +3444,7 @@ static int ceph_con_in_msg_alloc(struct ceph_connection *con,
mutex_unlock(&con->mutex);
msg = con->ops->alloc_msg(con, hdr, skip);
mutex_lock(&con->mutex);
if (con->state != CON_STATE_OPEN) {
if (con->state != CEPH_CON_S_OPEN) {
if (msg)
ceph_msg_put(msg);
return -EAGAIN;
Expand Down

0 comments on commit 6d7f62b

Please sign in to comment.