ceph: include time stamp in replayed MDS requests
authorYan, Zheng <zheng.z.yan@intel.com>
Tue, 1 Jul 2014 08:54:34 +0000 (16:54 +0800)
committerIlya Dryomov <ilya.dryomov@inktank.com>
Tue, 8 Jul 2014 11:08:46 +0000 (15:08 +0400)
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
fs/ceph/mds_client.c

index 92a2548..0225523 100644 (file)
@@ -1904,6 +1904,7 @@ static int __prepare_send_request(struct ceph_mds_client *mdsc,
             req->r_tid, ceph_mds_op_name(req->r_op), req->r_attempts);
 
        if (req->r_got_unsafe) {
+               void *p;
                /*
                 * Replay.  Do not regenerate message (and rebuild
                 * paths, etc.); just use the original message.
@@ -1924,8 +1925,13 @@ static int __prepare_send_request(struct ceph_mds_client *mdsc,
 
                /* remove cap/dentry releases from message */
                rhead->num_releases = 0;
-               msg->hdr.front_len = cpu_to_le32(req->r_request_release_offset);
-               msg->front.iov_len = req->r_request_release_offset;
+
+               /* time stamp */
+               p = msg->front.iov_base + req->r_request_release_offset;
+               ceph_encode_copy(&p, &req->r_stamp, sizeof(req->r_stamp));
+
+               msg->front.iov_len = p - msg->front.iov_base;
+               msg->hdr.front_len = cpu_to_le32(msg->front.iov_len);
                return 0;
        }