diff options
| -rw-r--r-- | fs/ceph/messenger.c | 11 | ||||
| -rw-r--r-- | fs/ceph/messenger.h | 1 |
2 files changed, 11 insertions, 1 deletions
diff --git a/fs/ceph/messenger.c b/fs/ceph/messenger.c index a3a8f368845b..cd4fadb6491a 100644 --- a/fs/ceph/messenger.c +++ b/fs/ceph/messenger.c | |||
| @@ -492,7 +492,14 @@ static void prepare_write_message(struct ceph_connection *con) | |||
| 492 | list_move_tail(&m->list_head, &con->out_sent); | 492 | list_move_tail(&m->list_head, &con->out_sent); |
| 493 | } | 493 | } |
| 494 | 494 | ||
| 495 | m->hdr.seq = cpu_to_le64(++con->out_seq); | 495 | /* |
| 496 | * only assign outgoing seq # if we haven't sent this message | ||
| 497 | * yet. if it is requeued, resend with it's original seq. | ||
| 498 | */ | ||
| 499 | if (m->needs_out_seq) { | ||
| 500 | m->hdr.seq = cpu_to_le64(++con->out_seq); | ||
| 501 | m->needs_out_seq = false; | ||
| 502 | } | ||
| 496 | 503 | ||
| 497 | dout("prepare_write_message %p seq %lld type %d len %d+%d+%d %d pgs\n", | 504 | dout("prepare_write_message %p seq %lld type %d len %d+%d+%d %d pgs\n", |
| 498 | m, con->out_seq, le16_to_cpu(m->hdr.type), | 505 | m, con->out_seq, le16_to_cpu(m->hdr.type), |
| @@ -1986,6 +1993,8 @@ void ceph_con_send(struct ceph_connection *con, struct ceph_msg *msg) | |||
| 1986 | 1993 | ||
| 1987 | BUG_ON(msg->front.iov_len != le32_to_cpu(msg->hdr.front_len)); | 1994 | BUG_ON(msg->front.iov_len != le32_to_cpu(msg->hdr.front_len)); |
| 1988 | 1995 | ||
| 1996 | msg->needs_out_seq = true; | ||
| 1997 | |||
| 1989 | /* queue */ | 1998 | /* queue */ |
| 1990 | mutex_lock(&con->mutex); | 1999 | mutex_lock(&con->mutex); |
| 1991 | BUG_ON(!list_empty(&msg->list_head)); | 2000 | BUG_ON(!list_empty(&msg->list_head)); |
diff --git a/fs/ceph/messenger.h b/fs/ceph/messenger.h index a343dae73cdc..a5caf91cc971 100644 --- a/fs/ceph/messenger.h +++ b/fs/ceph/messenger.h | |||
| @@ -86,6 +86,7 @@ struct ceph_msg { | |||
| 86 | struct kref kref; | 86 | struct kref kref; |
| 87 | bool front_is_vmalloc; | 87 | bool front_is_vmalloc; |
| 88 | bool more_to_follow; | 88 | bool more_to_follow; |
| 89 | bool needs_out_seq; | ||
| 89 | int front_max; | 90 | int front_max; |
| 90 | 91 | ||
| 91 | struct ceph_msgpool *pool; | 92 | struct ceph_msgpool *pool; |
