]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ceph: fix request time stamp encoding
authorYan, Zheng <zyan@redhat.com>
Fri, 1 Apr 2016 17:38:08 +0000 (10:38 -0700)
committerLuis Henriques <luis.henriques@canonical.com>
Mon, 11 Apr 2016 08:51:43 +0000 (09:51 +0100)
commit 1f041a89b4f22cf2e701514f4b8f73a8b1e06a3e upstream.

struct timespec uses 'long' to present second and nanosecond. 'long'
is 64 bits on 64bits machine. ceph MDS expects time stamp to be
encoded as struct ceph_timespec, which uses 'u32' to present second
and nanosecond.

Signed-off-by: Yan, Zheng <zyan@redhat.com>
BugLink: http://tracker.ceph.com/issues/15302
BugLink: http://bugs.launchpad.net/bugs/1564950
[ kamal: backport to 3.16-stable: no time stamp in __prepare_send_request() ]
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
fs/ceph/mds_client.c

index 63f2bc82f4afb8d83a0ec9f3885c8c14b3274e88..6b6f11b8f36ac5dcf6fb110b544599a0922f6ebd 100644 (file)
@@ -1841,7 +1841,11 @@ static struct ceph_msg *create_request_message(struct ceph_mds_client *mdsc,
        head->num_releases = cpu_to_le16(releases);
 
        /* time stamp */
-       ceph_encode_copy(&p, &req->r_stamp, sizeof(req->r_stamp));
+       {
+               struct ceph_timespec ts;
+               ceph_encode_timespec(&ts, &req->r_stamp);
+               ceph_encode_copy(&p, &ts, sizeof(ts));
+       }
 
        BUG_ON(p > end);
        msg->front.iov_len = p - msg->front.iov_base;