Re: [PATCH 3/5] ceph: only set message data pointers if non-empty

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tuesday, March 5, 2013 at 5:53 AM, Alex Elder wrote:
> The ceph file system doesn't typically send information in the
> data portion of a message. (It relies on some functionality
> exported by the osd client to read and write page data.)
> 
> There are two spots it does send data though. The value assigned to
> an extended attribute is held in one or more pages allocated by
> ceph_sync_setxattr(). Eventually those pages are assigned to a
> request message in create_request_message().
> 
> The second spot is when sending a reconnect message, where a
> ceph pagelist is used to build up an array of snaprealm_reconnect
> structures to send to the mds.
> 
> Change it so we only assign the outgoing data information for
> these messages if there is outgoing data to send.
> 
> This is related to:
> http://tracker.ceph.com/issues/4284
> 
> Signed-off-by: Alex Elder <elder@xxxxxxxxxxx>
> ---
> fs/ceph/mds_client.c | 14 +++++++++++---
> 1 file changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
> index 42400ce..ae83aa9 100644
> --- a/fs/ceph/mds_client.c
> +++ b/fs/ceph/mds_client.c
> @@ -1718,7 +1718,12 @@ 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_num_pages, 0);
> + if (req->r_num_pages) {
> + /* outbound data set only by ceph_sync_setxattr() */
> + BUG_ON(!req->r_pages);
> + ceph_msg_data_set_pages(msg, req->r_pages,
> + req->r_num_pages, 0);
> + }
> 
> msg->hdr.data_len = cpu_to_le32(req->r_data_len);
> msg->hdr.data_off = cpu_to_le16(0);
> @@ -2599,10 +2604,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);
> 
Reviewed-by: Greg Farnum <greg@xxxxxxxxxxx>
Software Engineer #42 @ http://inktank.com | http://ceph.com

--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux