]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/ceph/mds_client.c
ceph: only set message data pointers if non-empty
[karo-tx-linux.git] / fs / ceph / mds_client.c
index 3b2aa8702ae0fa4adefb962dd9a07c15ddc18327..600d770d70f7a6725bf72d94e952d52aa210c02b 100644 (file)
@@ -1721,7 +1721,11 @@ static struct ceph_msg *create_request_message(struct ceph_mds_client *mdsc,
        msg->front.iov_len = p - msg->front.iov_base;
        msg->hdr.front_len = cpu_to_le32(msg->front.iov_len);
 
-       ceph_msg_data_set_pages(msg, req->r_pages, req->r_data_len, 0);
+       if (req->r_data_len) {
+               /* outbound data set only by ceph_sync_setxattr() */
+               BUG_ON(!req->r_pages);
+               ceph_msg_data_set_pages(msg, req->r_pages, req->r_data_len, 0);
+       }
 
        msg->hdr.data_len = cpu_to_le32(req->r_data_len);
        msg->hdr.data_off = cpu_to_le16(0);
@@ -2603,10 +2607,13 @@ static void send_mds_reconnect(struct ceph_mds_client *mdsc,
                        goto fail;
        }
 
-       ceph_msg_data_set_pagelist(reply, pagelist);
        if (recon_state.flock)
                reply->hdr.version = cpu_to_le16(2);
-       reply->hdr.data_len = cpu_to_le32(pagelist->length);
+       if (pagelist->length) {
+               /* set up outbound data if we have any */
+               reply->hdr.data_len = cpu_to_le32(pagelist->length);
+               ceph_msg_data_set_pagelist(reply, pagelist);
+       }
        ceph_con_send(&session->s_con, reply);
 
        mutex_unlock(&session->s_mutex);