From patchwork Tue Jul 24 20:11:19 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kent Overstreet X-Patchwork-Id: 1233101 Return-Path: X-Original-To: patchwork-dm-devel@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from mx4-phx2.redhat.com (mx4-phx2.redhat.com [209.132.183.25]) by patchwork1.kernel.org (Postfix) with ESMTP id E71BB40075 for ; Tue, 24 Jul 2012 20:15:15 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by mx4-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q6OKC3xA004295; Tue, 24 Jul 2012 16:12:04 -0400 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id q6OKC1w6028223 for ; Tue, 24 Jul 2012 16:12:01 -0400 Received: from mx1.redhat.com (ext-mx16.extmail.prod.ext.phx2.redhat.com [10.5.110.21]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id q6OKBuYt026100 for ; Tue, 24 Jul 2012 16:11:56 -0400 Received: from mail-pb0-f46.google.com (mail-pb0-f46.google.com [209.85.160.46]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q6OKBpNt031510 for ; Tue, 24 Jul 2012 16:11:54 -0400 Received: by mail-pb0-f46.google.com with SMTP id rp8so125000pbb.33 for ; Tue, 24 Jul 2012 13:11:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=q3sMh64RmLgJ3bNKW0hZqAy+QA7dV9zJ6dgT6TFIR2o=; b=P3FbVWphXr0Kxy/uUWdvn0Fqvz0St3D8OD/x+2DvCNnFATDpI/iewy0xxmsWIGUc4i xi+l2BQObmxCqEU7F336FuV20mPqRjLTTBtN8Boq3aFZqCpB1Vybl9nk+wo/m36ZJQN0 vOakzLZvtMMlS8uv2OI6Btn0sc3b3gzlMlTWX/A8uz7Oy5uYJEXmrRClfGNGKeoqTY+6 cwJnTPwYtAFL92RgDkqBawviwUHmnXgPiIhGjoNfWpZIU7z+h1vLkzVWKjlqddCwFxtw pYGWS2uYlYE948vpH0pAb3/1y7TPYezGhjIQQ779U58zagSu6Vji11s5pJs+lfuzrxh+ 7bVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references :x-gm-message-state; bh=q3sMh64RmLgJ3bNKW0hZqAy+QA7dV9zJ6dgT6TFIR2o=; b=nch3VukqH0I/kXD+vgb9n0koz28uaqJ4bN4Cxh5/BR8MpglwPe4v0+27cO2xocrDb1 OP/eSPPNJE/rxi5Fmv4JADMpHTptyvvJNg0cl+sqiWMdO+CfnN+i1uZ/btH6Gmyx+vWf lwsmtA2vtEKK1lvFf8PPJgZ5RdOXCcCny9Mte+RhRAV/vsajaKqsTdVaXO483RmQ3c1D yksHS+tKXZMc9x0EcrCrAMmwJCr5b6zbjgPPPASlLclGduFUrzvegx9hZXezeXRWP+Ji YtcyE4uWrE+km6bByNNpj/R3ICYXHfIg29xh3dVXJFIABhvUWcM3yxq4sF9REkdF1Oav HXdQ== Received: by 10.68.232.104 with SMTP id tn8mr2134908pbc.118.1343160714052; Tue, 24 Jul 2012 13:11:54 -0700 (PDT) Received: by 10.68.232.104 with SMTP id tn8mr2134875pbc.118.1343160713830; Tue, 24 Jul 2012 13:11:53 -0700 (PDT) Received: from formenos.mtv.corp.google.com (formenos.mtv.corp.google.com [172.18.110.66]) by mx.google.com with ESMTPS id jv6sm12774301pbc.40.2012.07.24.13.11.52 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 24 Jul 2012 13:11:52 -0700 (PDT) From: Kent Overstreet To: linux-bcache@vger.kernel.org, linux-kernel@vger.kernel.org, dm-devel@redhat.com Date: Tue, 24 Jul 2012 13:11:19 -0700 Message-Id: <1343160689-12378-3-git-send-email-koverstreet@google.com> In-Reply-To: <1343160689-12378-1-git-send-email-koverstreet@google.com> References: <1343160689-12378-1-git-send-email-koverstreet@google.com> X-Gm-Message-State: ALoCoQky2D7rZTB8C1i+YBqP9RNEWb2zkbwuhysX9QiyE1dca+P4XVzlCktNnLNshT+/uP6YJcBjAQEvk5cCu+8C1/QulOEE/orh1SzzgVGMtYMxl0Y+PxoPF7YdvVlUyVghvdBNveVax08vlZrsxTEtoLxsm8SOh9qIE0EV6DuoF0FSYqMAHjHGRdhEYfnUyOnCrwOgpEJU X-RedHat-Spam-Score: -2.711 (BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_LOW, SPF_PASS, T_RP_MATCHES_RCVD) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.25 X-Scanned-By: MIMEDefang 2.68 on 10.5.110.21 X-loop: dm-devel@redhat.com Cc: axboe@kernel.dk, yehuda@hq.newdream.net, Kent Overstreet , mpatocka@redhat.com, vgoyal@redhat.com, bharrosh@panasas.com, tj@kernel.org, sage@newdream.net, agk@redhat.com, drbd-dev@lists.linbit.com Subject: [dm-devel] [PATCH v4 02/12] dm: Use bioset's front_pad for dm_rq_clone_bio_info X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk Reply-To: device-mapper development List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com Previously, dm_rq_clone_bio_info needed to be freed by the bio's destructor to avoid a memory leak in the blk_rq_prep_clone() error path. This gets rid of a memory allocation and means we can kill dm_rq_bio_destructor. Signed-off-by: Kent Overstreet --- drivers/md/dm.c | 31 +++++-------------------------- 1 files changed, 5 insertions(+), 26 deletions(-) diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 40b7735..4014696 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -92,6 +92,7 @@ struct dm_rq_target_io { struct dm_rq_clone_bio_info { struct bio *orig; struct dm_rq_target_io *tio; + struct bio clone; }; union map_info *dm_get_mapinfo(struct bio *bio) @@ -467,16 +468,6 @@ static void free_rq_tio(struct dm_rq_target_io *tio) mempool_free(tio, tio->md->tio_pool); } -static struct dm_rq_clone_bio_info *alloc_bio_info(struct mapped_device *md) -{ - return mempool_alloc(md->io_pool, GFP_ATOMIC); -} - -static void free_bio_info(struct dm_rq_clone_bio_info *info) -{ - mempool_free(info, info->tio->md->io_pool); -} - static int md_in_flight(struct mapped_device *md) { return atomic_read(&md->pending[READ]) + @@ -1438,30 +1429,17 @@ void dm_dispatch_request(struct request *rq) } EXPORT_SYMBOL_GPL(dm_dispatch_request); -static void dm_rq_bio_destructor(struct bio *bio) -{ - struct dm_rq_clone_bio_info *info = bio->bi_private; - struct mapped_device *md = info->tio->md; - - free_bio_info(info); - bio_free(bio, md->bs); -} - static int dm_rq_bio_constructor(struct bio *bio, struct bio *bio_orig, void *data) { struct dm_rq_target_io *tio = data; - struct mapped_device *md = tio->md; - struct dm_rq_clone_bio_info *info = alloc_bio_info(md); - - if (!info) - return -ENOMEM; + struct dm_rq_clone_bio_info *info = + container_of(bio, struct dm_rq_clone_bio_info, clone); info->orig = bio_orig; info->tio = tio; bio->bi_end_io = end_clone_bio; bio->bi_private = info; - bio->bi_destructor = dm_rq_bio_destructor; return 0; } @@ -2696,7 +2674,8 @@ struct dm_md_mempools *dm_alloc_md_mempools(unsigned type, unsigned integrity) if (!pools->tio_pool) goto free_io_pool_and_out; - pools->bs = bioset_create(pool_size, 0); + pools->bs = bioset_create(pool_size, + offsetof(struct dm_rq_clone_bio_info, orig)); if (!pools->bs) goto free_tio_pool_and_out;