From d3d1da2e27442e87314164aaef107435d8e2f337 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 21 Jan 2008 20:34:24 -0800 Subject: [PATCH] a few client/mds reconnect fixes --- src/kernel/mds_client.c | 3 ++- src/kernel/messenger.c | 1 + src/mds/SessionMap.cc | 5 ++++- src/mds/journal.cc | 1 + src/start.sh | 1 + 5 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/kernel/mds_client.c b/src/kernel/mds_client.c index 0a94574ef8315..e468bc4678b30 100644 --- a/src/kernel/mds_client.c +++ b/src/kernel/mds_client.c @@ -829,7 +829,8 @@ void send_mds_reconnect(struct ceph_mds_client *mdsc, int mds) dout(10, " adding cap %p on ino %lx\n", cap, ci->vfs_inode.i_ino); ceph_encode_64(&p, end, ci->vfs_inode.i_ino); rec = p; - BUG_ON(p + sizeof(*rec) > end); + p += sizeof(*rec); + BUG_ON(p > end); rec->wanted = cpu_to_le32(ceph_caps_wanted(ci)); rec->issued = cpu_to_le32(ceph_caps_issued(ci)); rec->size = cpu_to_le64(ci->i_wr_size); diff --git a/src/kernel/messenger.c b/src/kernel/messenger.c index d831812379e35..17d7c4c6166b7 100644 --- a/src/kernel/messenger.c +++ b/src/kernel/messenger.c @@ -972,6 +972,7 @@ static void try_accept(struct work_struct *work) dout(5, "accepted connection \n"); new_con->in_tag = CEPH_MSGR_TAG_READY; + new_con->connect_seq = 1; set_bit(ACCEPTING, &new_con->state); clear_bit(NEW,&new_con->state); prepare_write_accept_announce(msgr, new_con); diff --git a/src/mds/SessionMap.cc b/src/mds/SessionMap.cc index f0b0685ba42bb..543fdac06285c 100644 --- a/src/mds/SessionMap.cc +++ b/src/mds/SessionMap.cc @@ -61,7 +61,7 @@ void SessionMap::load(Context *onload) void SessionMap::_load_finish(bufferlist &bl) { bufferlist::iterator blp = bl.begin(); - decode(blp); + decode(blp); // note: this sets last_cap_renew = now() dout(10) << "_load_finish v " << version << ", " << session_map.size() << " sessions, " << bl.length() << " bytes" @@ -132,6 +132,8 @@ void SessionMap::encode(bufferlist& bl) void SessionMap::decode(bufferlist::iterator& p) { + utime_t now = g_clock.now(); + ::_decode_simple(version, p); __u32 n; ::_decode_simple(n, p); @@ -139,5 +141,6 @@ void SessionMap::decode(bufferlist::iterator& p) Session *s = new Session; s->_decode(p); session_map[s->inst.name] = s; + s->last_cap_renew = now; } } diff --git a/src/mds/journal.cc b/src/mds/journal.cc index d743196d79cc5..d28ee0b3fead0 100644 --- a/src/mds/journal.cc +++ b/src/mds/journal.cc @@ -480,6 +480,7 @@ void ESession::replay(MDS *mds) assert(mds->sessionmap.version == cmapv); if (open) { Session *session = mds->sessionmap.get_or_add_session(client_inst); + session->last_cap_renew = g_clock.now(); mds->sessionmap.set_state(session, Session::STATE_OPEN); } else { Session *session = mds->sessionmap.get_session(client_inst.name); diff --git a/src/start.sh b/src/start.sh index f77c005d50d63..91794d8f1b5ae 100755 --- a/src/start.sh +++ b/src/start.sh @@ -1,4 +1,5 @@ #!/bin/sh +rm core* ./stop.sh ./mkmonmap `host \`hostname -f\`|cut -d ' ' -f 4`:12345 # your IP here; any unused port will do ./cmon --mkfs --mon 0 & -- 2.39.5