浏览代码

ceph: update to mon client protocol v15

The mon request headers now include session_mon information that must
be properly initialized.

Signed-off-by: Sage Weil <sage@newdream.net>
Sage Weil 15 年之前
父节点
当前提交
13e38c8ae7
共有 3 个文件被更改,包括 19 次插入10 次删除
  1. 12 7
      fs/ceph/ceph_fs.h
  2. 1 1
      fs/ceph/messenger.c
  3. 6 2
      fs/ceph/mon_client.c

+ 12 - 7
fs/ceph/ceph_fs.h

@@ -37,10 +37,10 @@
  */
 #define CEPH_OSD_PROTOCOL     7 /* cluster internal */
 #define CEPH_MDS_PROTOCOL     9 /* cluster internal */
-#define CEPH_MON_PROTOCOL     4 /* cluster internal */
+#define CEPH_MON_PROTOCOL     5 /* cluster internal */
 #define CEPH_OSDC_PROTOCOL   20 /* server/client */
 #define CEPH_MDSC_PROTOCOL   29 /* server/client */
-#define CEPH_MONC_PROTOCOL   14 /* server/client */
+#define CEPH_MONC_PROTOCOL   15 /* server/client */
 
 
 #define CEPH_INO_ROOT  1
@@ -118,9 +118,14 @@ struct ceph_file_layout {
 #define CEPH_MSG_OSD_OP           42
 #define CEPH_MSG_OSD_OPREPLY      43
 
+struct ceph_mon_request_header {
+	__le64 have_version;
+	__le16 session_mon;
+	__le64 session_mon_tid;
+} __attribute__ ((packed));
 
 struct ceph_mon_statfs {
-	__le64 have_version;
+	struct ceph_mon_request_header monhdr;
 	struct ceph_fsid fsid;
 	__le64 tid;
 } __attribute__ ((packed));
@@ -138,22 +143,22 @@ struct ceph_mon_statfs_reply {
 } __attribute__ ((packed));
 
 struct ceph_osd_getmap {
-	__le64 have_version;
+	struct ceph_mon_request_header monhdr;
 	struct ceph_fsid fsid;
 	__le32 start;
 } __attribute__ ((packed));
 
 struct ceph_mds_getmap {
-	__le64 have_version;
+	struct ceph_mon_request_header monhdr;
 	struct ceph_fsid fsid;
 } __attribute__ ((packed));
 
 struct ceph_client_mount {
-	__le64 have_version;
+	struct ceph_mon_request_header monhdr;
 } __attribute__ ((packed));
 
 struct ceph_mon_subscribe_item {
-	__le64 have;
+	__le64 have_version;	__le64 have;
 	__u8 onetime;
 } __attribute__ ((packed));
 

+ 1 - 1
fs/ceph/messenger.c

@@ -857,7 +857,7 @@ out:
 static int verify_hello(struct ceph_connection *con)
 {
 	if (memcmp(con->in_banner, CEPH_BANNER, strlen(CEPH_BANNER))) {
-		pr_err("connect to/from %s has bad banner\n",
+		pr_err("connect to %s got bad banner\n",
 		       pr_addr(&con->peer_addr.in_addr));
 		con->error_msg = "protocol error, bad banner";
 		return -1;

+ 6 - 2
fs/ceph/mon_client.c

@@ -273,7 +273,9 @@ static void __request_mount(struct ceph_mon_client *monc)
 	if (IS_ERR(msg))
 		return;
 	h = msg->front.iov_base;
-	h->have_version = 0;
+	h->monhdr.have_version = 0;
+	h->monhdr.session_mon = cpu_to_le16(-1);
+	h->monhdr.session_mon_tid = 0;
 	ceph_con_send(monc->con, msg);
 }
 
@@ -422,7 +424,9 @@ static int send_statfs(struct ceph_mon_client *monc,
 		return PTR_ERR(msg);
 	req->request = msg;
 	h = msg->front.iov_base;
-	h->have_version = 0;
+	h->monhdr.have_version = 0;
+	h->monhdr.session_mon = cpu_to_le16(-1);
+	h->monhdr.session_mon_tid = 0;
 	h->fsid = monc->monmap->fsid;
 	h->tid = cpu_to_le64(req->tid);
 	ceph_con_send(monc->con, msg);