]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msgr: fix up global_seq handling a bit
authorSage Weil <sage@newdream.net>
Fri, 4 Jul 2008 15:03:51 +0000 (08:03 -0700)
committerSage Weil <sage@newdream.net>
Fri, 4 Jul 2008 15:03:51 +0000 (08:03 -0700)
src/kernel/messenger.c
src/msg/SimpleMessenger.cc

index b30c25761a2b4174181bf6db83050162454c5785..4a21f490a0ab16bd2c6da297297bc358f4e8a45e 100644 (file)
@@ -614,19 +614,6 @@ static void ceph_fault(struct ceph_connection *con)
        spin_unlock(&con->out_queue_lock);
 }
 
-
-static u32 get_global_seq(struct ceph_messenger *msgr, u32 gt)
-{
-       u32 ret;
-       spin_lock(&msgr->global_seq_lock);
-       if (msgr->global_seq < gt)
-               msgr->global_seq = gt;
-       ret = ++msgr->global_seq;
-       spin_unlock(&msgr->global_seq_lock);
-       return ret;
-}
-
-
 /*
  * non-blocking versions
  *
@@ -811,16 +798,27 @@ static void prepare_read_connect(struct ceph_connection *con)
        con->in_base_pos = 0;
 }
 
+static u32 get_global_seq(struct ceph_messenger *msgr, u32 gt)
+{
+       u32 ret;
+       spin_lock(&msgr->global_seq_lock);
+       if (msgr->global_seq < gt)
+               msgr->global_seq = gt;
+       ret = ++msgr->global_seq;
+       spin_unlock(&msgr->global_seq_lock);
+       return ret;
+}
+
 static void prepare_write_connect(struct ceph_messenger *msgr,
                                  struct ceph_connection *con)
 {
+       con->out_global_seq = cpu_to_le32(con->global_seq);
+       con->out_connect_seq = cpu_to_le32(con->connect_seq);
+
        con->out_kvec[0].iov_base = &msgr->inst.addr;
        con->out_kvec[0].iov_len = sizeof(msgr->inst.addr);
-       con->global_seq = get_global_seq(msgr, 0);
-       con->out_global_seq = cpu_to_le32(con->global_seq);
        con->out_kvec[1].iov_base = &con->out_global_seq;
        con->out_kvec[1].iov_len = 4;
-       con->out_connect_seq = cpu_to_le32(con->connect_seq);
        con->out_kvec[2].iov_base = &con->out_connect_seq;
        con->out_kvec[2].iov_len = 4;
        con->out_kvec_left = 3;
@@ -833,7 +831,9 @@ static void prepare_write_connect(struct ceph_messenger *msgr,
 static void prepare_write_connect_retry(struct ceph_messenger *msgr,
                                        struct ceph_connection *con)
 {
+       con->out_global_seq = cpu_to_le32(con->global_seq);
        con->out_connect_seq = cpu_to_le32(con->connect_seq);
+
        con->out_kvec[0].iov_base = &con->out_global_seq;
        con->out_kvec[0].iov_len = 4;
        con->out_kvec[1].iov_base = &con->out_connect_seq;
@@ -900,6 +900,7 @@ more:
        if (con->sock == 0) {
                if (test_and_clear_bit(STANDBY, &con->state))
                        con->connect_seq++;
+               con->global_seq = get_global_seq(msgr, 0);
                prepare_write_connect(msgr, con);
                prepare_read_connect(con);
                set_bit(CONNECTING, &con->state);
index a0327a308667ae6e630f1775a85c3015b0156b6b..dbf222ac7b9c4b7ec26cc5f1734c815713d777ba 100644 (file)
@@ -884,7 +884,7 @@ int Rank::Pipe::accept()
       }
 
       assert(peer_cseq > existing->connect_seq);
-      assert(peer_gseq > existing->peer_global_seq);
+      assert(peer_gseq >= existing->peer_global_seq);
       if (existing->connect_seq == 0) {
        dout(10) << "accept we reset (peer sent cseq " << peer_cseq 
                 << ", " << existing << ".cseq = " << existing->connect_seq