]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
ceph: update CAPRELEASE message format
authorJohn Spray <john.spray@redhat.com>
Thu, 16 Oct 2014 11:06:27 +0000 (12:06 +0100)
committerJohn Spray <john.spray@redhat.com>
Thu, 30 Oct 2014 13:47:55 +0000 (13:47 +0000)
Version 2 includes the new osd epoch barrier
field.

Signed-off-by: John Spray <john.spray@redhat.com>
fs/ceph/mds_client.c
fs/ceph/mds_client.h

index cb9a2a173d3a9a07adbacbdcba45804659af26d2..0caacc29b628bf023c660a99b9931fc85148ff15 100644 (file)
@@ -1510,12 +1510,25 @@ void ceph_send_cap_releases(struct ceph_mds_client *mdsc,
                            struct ceph_mds_session *session)
 {
        struct ceph_msg *msg;
+       u32             *cap_barrier;
 
        dout("send_cap_releases mds%d\n", session->s_mds);
        spin_lock(&session->s_cap_lock);
        while (!list_empty(&session->s_cap_releases_done)) {
                msg = list_first_entry(&session->s_cap_releases_done,
                                 struct ceph_msg, list_head);
+
+               BUG_ON(msg->front.iov_len + sizeof(*cap_barrier) > \
+                      PAGE_CACHE_SIZE);
+
+               // Append cap_barrier field
+               cap_barrier = msg->front.iov_base + msg->front.iov_len;
+               *cap_barrier = cpu_to_le32(mdsc->cap_epoch_barrier);
+               msg->front.iov_len += sizeof(*cap_barrier);
+
+               msg->hdr.version = cpu_to_le16(2);
+               msg->hdr.compat_version = cpu_to_le16(1);
+
                list_del_init(&msg->list_head);
                spin_unlock(&session->s_cap_lock);
                msg->hdr.front_len = cpu_to_le32(msg->front.iov_len);
index 7b405689964db1f254fb7d160bde191b601378c0..b9412a88a7a6bd33bb860054cb04c28865573e09 100644 (file)
@@ -92,10 +92,14 @@ struct ceph_mds_reply_info_parsed {
 
 /*
  * cap releases are batched and sent to the MDS en masse.
+ *
+ * Account for per-message overhead of mds_cap_release header
+ * and u32 for osd epoch barrier trailing field.
  */
 #define CEPH_CAPS_PER_RELEASE ((PAGE_CACHE_SIZE -                      \
-                               sizeof(struct ceph_mds_cap_release)) /  \
-                              sizeof(struct ceph_mds_cap_item))
+                               sizeof(struct ceph_mds_cap_release) -   \
+                               sizeof(u32)) /  \
+                               sizeof(struct ceph_mds_cap_item))
 
 
 /*