From patchwork Tue Mar 5 13:52:59 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Elder X-Patchwork-Id: 2219261 Return-Path: X-Original-To: patchwork-ceph-devel@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 41002DF24C for ; Tue, 5 Mar 2013 13:53:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754968Ab3CENxF (ORCPT ); Tue, 5 Mar 2013 08:53:05 -0500 Received: from mail-ia0-f180.google.com ([209.85.210.180]:63122 "EHLO mail-ia0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754580Ab3CENxE (ORCPT ); Tue, 5 Mar 2013 08:53:04 -0500 Received: by mail-ia0-f180.google.com with SMTP id f27so5970321iae.39 for ; Tue, 05 Mar 2013 05:53:03 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:subject :references:in-reply-to:content-type:content-transfer-encoding :x-gm-message-state; bh=3R4hPI3Nq5NxKNNA3L7XFi+xxCEoAFoJIQ397m/Ea64=; b=oJZcBrVIFFEhKG7zlXju85bk9nfIxfgN75ONQdtwGMAu0xGgxW8cE9UwMydBD1rv9n kDg5p5WEe0g/I43Y65ovmUuKUhNoDNzhrtYyUeU20G+3r42cn0GF4YGvGC9dbS0K9rRm X5wuOY5mn4vzmRY7+iWiYrGof5mqVv8YclUBomypfBqV5vDS84tqd75/lPyhhIjE0vhL VmoJbQnG0hklvGFcl3UcEgqpJFz5pvf5uV5IGtIc9TkO/26Jmd7VNsERlIG+IhqRIhEq /L+Fow4ULNvPnKStTWLq/n03dMu0aLgFojgthwGexK6V4IIKDxIkcgd3y295ArevBTX2 zZdg== X-Received: by 10.50.56.236 with SMTP id d12mr6273311igq.92.1362491583284; Tue, 05 Mar 2013 05:53:03 -0800 (PST) Received: from [172.22.22.4] (c-71-195-31-37.hsd1.mn.comcast.net. [71.195.31.37]) by mx.google.com with ESMTPS id ua6sm15695930igb.0.2013.03.05.05.53.01 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 05 Mar 2013 05:53:02 -0800 (PST) Message-ID: <5135F8BB.5020108@inktank.com> Date: Tue, 05 Mar 2013 07:52:59 -0600 From: Alex Elder User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130221 Thunderbird/17.0.3 MIME-Version: 1.0 To: ceph-devel@vger.kernel.org Subject: [PATCH 2/5] libceph: isolate other message data fields References: <5135F859.1090606@inktank.com> In-Reply-To: <5135F859.1090606@inktank.com> X-Gm-Message-State: ALoCoQkpGAAzeO3hnacmwG/q+mqkVDS4H4tRrODmtHlD64smBonjKqXfATFdcPpYA4JGDUQy8x16 Sender: ceph-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: ceph-devel@vger.kernel.org Define ceph_msg_data_set_pagelist(), ceph_msg_data_set_bio(), and ceph_msg_data_set_trail() to clearly abstract the assignment the remaining data-related fields in a ceph message structure. Use the new functions in the osd client and mds client. This partially resolves: http://tracker.ceph.com/issues/4263 Signed-off-by: Alex Elder Reviewed-by: Josh Durgin --- fs/ceph/mds_client.c | 2 +- include/linux/ceph/messenger.h | 5 +++++ net/ceph/messenger.c | 28 ++++++++++++++++++++++++++++ net/ceph/osd_client.c | 6 +++--- 4 files changed, 37 insertions(+), 4 deletions(-) @@ -2131,7 +2131,7 @@ static struct ceph_msg *get_reply(struct ceph_connection *con, osd_data->num_pages, osd_data->alignment); #ifdef CONFIG_BLOCK } else if (osd_data->type == CEPH_OSD_DATA_TYPE_BIO) { - m->bio = osd_data->bio; + ceph_msg_data_set_bio(m, osd_data->bio); #endif } } diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c index c8f6be9..42400ce 100644 --- a/fs/ceph/mds_client.c +++ b/fs/ceph/mds_client.c @@ -2599,7 +2599,7 @@ static void send_mds_reconnect(struct ceph_mds_client *mdsc, goto fail; } - reply->pagelist = pagelist; + 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); diff --git a/include/linux/ceph/messenger.h b/include/linux/ceph/messenger.h index aa463b9..8e55d86 100644 --- a/include/linux/ceph/messenger.h +++ b/include/linux/ceph/messenger.h @@ -221,6 +221,11 @@ extern void ceph_con_keepalive(struct ceph_connection *con); extern void ceph_msg_data_set_pages(struct ceph_msg *msg, struct page **pages, unsigned int page_count, size_t alignment); +extern void ceph_msg_data_set_pagelist(struct ceph_msg *msg, + struct ceph_pagelist *pagelist); +extern void ceph_msg_data_set_bio(struct ceph_msg *msg, struct bio *bio); +extern void ceph_msg_data_set_trail(struct ceph_msg *msg, + struct ceph_pagelist *trail); extern struct ceph_msg *ceph_msg_new(int type, int front_len, gfp_t flags, bool can_fail); diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c index a23faba..97506ac 100644 --- a/net/ceph/messenger.c +++ b/net/ceph/messenger.c @@ -2688,6 +2688,34 @@ void ceph_msg_data_set_pages(struct ceph_msg *msg, struct page **pages, } EXPORT_SYMBOL(ceph_msg_data_set_pages); +void ceph_msg_data_set_pagelist(struct ceph_msg *msg, + struct ceph_pagelist *pagelist) +{ + /* BUG_ON(!pagelist); */ + /* BUG_ON(msg->pagelist); */ + + msg->pagelist = pagelist; +} +EXPORT_SYMBOL(ceph_msg_data_set_pagelist); + +void ceph_msg_data_set_bio(struct ceph_msg *msg, struct bio *bio) +{ + /* BUG_ON(!bio); */ + /* BUG_ON(msg->bio); */ + + msg->bio = bio; +} +EXPORT_SYMBOL(ceph_msg_data_set_bio); + +void ceph_msg_data_set_trail(struct ceph_msg *msg, struct ceph_pagelist *trail) +{ + /* BUG_ON(!trail); */ + /* BUG_ON(msg->trail); */ + + msg->trail = trail; +} +EXPORT_SYMBOL(ceph_msg_data_set_trail); + /* * construct a new message with given type, size * the new msg has a ref count of 1. diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c index db777a4..c19188a 100644 --- a/net/ceph/osd_client.c +++ b/net/ceph/osd_client.c @@ -1757,12 +1757,12 @@ int ceph_osdc_start_request(struct ceph_osd_client *osdc, osd_data->num_pages, osd_data->alignment); #ifdef CONFIG_BLOCK } else if (osd_data->type == CEPH_OSD_DATA_TYPE_BIO) { - req->r_request->bio = osd_data->bio; + ceph_msg_data_set_bio(req->r_request, osd_data->bio); #endif } else { BUG_ON(osd_data->type != CEPH_OSD_DATA_TYPE_NONE); } - req->r_request->trail = &req->r_trail; + ceph_msg_data_set_trail(req->r_request, &req->r_trail); register_request(osdc, req);