There was some broken keepalive code using a dead variable. Shift to using the proper bit flag.
Unified · Split
| @@ -161,7 +161,6 @@ struct ceph_connection { · 160 unmodified lines | ||
| 161 | 161 | struct list_head out_queue; |
| 162 | 162 | struct list_head out_sent; /* sending or sent but unacked */ |
| 163 | 163 | u64 out_seq; /* last message queued for send */ |
| 164 | − bool out_keepalive_pending; | |
| 165 | 164 | |
| 166 | 165 | u64 in_seq, in_seq_acked; /* last message received, acked */ |
| 167 | 166 | |
| @@ -336,7 +336,6 @@ static void reset_connection(struct ceph_connection *con) · 335 unmodified lines | ||
| 336 | 336 | ceph_msg_put(con->out_msg); |
| 337 | 337 | con->out_msg = NULL; |
| 338 | 338 | } |
| 339 | − con->out_keepalive_pending = false; | |
| 340 | 339 | con->in_seq = 0; |
| 341 | 340 | con->in_seq_acked = 0; |
| 342 | 341 | } |
| @@ -2019,10 +2018,10 @@ static void ceph_fault(struct ceph_connection *con) · 1676 unmodified lines | ||
| 2019 | 2018 | /* Requeue anything that hasn't been acked */ |
| 2020 | 2019 | list_splice_init(&con->out_sent, &con->out_queue); |
| 2021 | 2020 | |
| 2022 | − /* If there are no messages in the queue, place the connection | |
| 2023 | − * in a STANDBY state (i.e., don't try to reconnect just yet). */ | |
| 2024 | − if (list_empty(&con->out_queue) && !con->out_keepalive_pending) { | |
| 2025 | − dout("fault setting STANDBY\n"); | |
| 2021 | + /* If there are no messages queued or keepalive pending, place | |
| 2022 | + * the connection in a STANDBY state */ | |
| 2023 | + if (list_empty(&con->out_queue) && | |
| 2024 | + !test_bit(KEEPALIVE_PENDING, &con->state)) { | |
| 2026 | 2025 | set_bit(STANDBY, &con->state); |
| 2027 | 2026 | } else { |
| 2028 | 2027 | /* retry after a delay. */ |