Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp1790019imm; Thu, 12 Jul 2018 07:54:29 -0700 (PDT) X-Google-Smtp-Source: AAOMgpdXgWbKuGVty3fTM4//urH+Jh3HqFkMguGDZr2lk3jFv0D1lcLlplVIK9zJyJlKfh457Cj5 X-Received: by 2002:a17:902:7248:: with SMTP id c8-v6mr2553697pll.128.1531407269696; Thu, 12 Jul 2018 07:54:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531407269; cv=none; d=google.com; s=arc-20160816; b=wFxQY0qJcCW1msuCDWygPzf0I6kx6jJBn/jEKAh9oDyql8H649L3RCi2ygu8q7j+1q s1oei6Th9729Q2w6bSwCOS1plVBPPhYbX0mjiGSIPNNEWzxIsbOQYEEXGTq/9DuPL07x GMbRd5k1Z//hhPnf0cAeAr6XwRsLvFGHgkT4el24oXXy/isrLAzZIxvJezyl8nnoSuf7 rQjXIOWMEnRPDECu4gTmmLCuxKamlNO6wInXFv0HRQxeRX9fA40vphANvTxhCYIaH1MZ ydP6+HEiyfDIGY4j+x7gcAAI1Z3azKgB7kcC2hJZqK/AA1K4qmJaIow8z7K4oAJHjuav J0MA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date :arc-authentication-results; bh=T7zo+nQq11mR/FpSMnZKXUoObwEl4YyeaZnSr+O337s=; b=XEiqL2+d0ys3hpi9eHXitolj89m89gWAfzoP7M3KVR0N1uH+INjMmO/JFKxvBiaCQj 6pSK7/uEv8c6MAK0rj3KypRGchIk7mrSaJyhuc+IIgrzDtjKSnyRg80nN+T0dV6fAiUB CSpEgw+j/A7PHK/sye4nJK7nig6fKLigfoaHLFsnZfVnMBZjbNoBm7iJDUtueMhUYyIJ tuDk/+r5TDCHwlj7cNlJeS97hc3NVKAfSn3zJWBK1YNN0w0d6VzDVuES7s4Tgu5OEX+u o0KlmXbk37qT8uTYHQ5dfCuCTZaIP0q8rNKMYhm8R7LVB/Z/WalCi7zp+e7/A08zc/5Z k7RQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l1-v6si23456953pfd.139.2018.07.12.07.54.02; Thu, 12 Jul 2018 07:54:29 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732532AbeGLPDS (ORCPT + 99 others); Thu, 12 Jul 2018 11:03:18 -0400 Received: from 18.mo3.mail-out.ovh.net ([87.98.172.162]:48724 "EHLO 18.mo3.mail-out.ovh.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732310AbeGLPDR (ORCPT ); Thu, 12 Jul 2018 11:03:17 -0400 X-Greylist: delayed 983 seconds by postgrey-1.27 at vger.kernel.org; Thu, 12 Jul 2018 11:03:16 EDT Received: from player732.ha.ovh.net (unknown [10.109.122.11]) by mo3.mail-out.ovh.net (Postfix) with ESMTP id 22C561C2ED2 for ; Thu, 12 Jul 2018 16:37:02 +0200 (CEST) Received: from bahia.lan (lns-bzn-46-82-253-208-248.adsl.proxad.net [82.253.208.248]) (Authenticated sender: groug@kaod.org) by player732.ha.ovh.net (Postfix) with ESMTPSA id 3A979200BB; Thu, 12 Jul 2018 16:36:50 +0200 (CEST) Date: Thu, 12 Jul 2018 16:36:49 +0200 From: Greg Kurz To: Matthew Wilcox Cc: Dominique Martinet , Latchesar Ionkov , Eric Van Hensbergen , linux-kernel@vger.kernel.org, Ron Minnich , linux-fsdevel@vger.kernel.org, v9fs-developer@lists.sourceforge.net Subject: Re: [V9fs-developer] [PATCH v2 4/6] 9p: Embed wait_queue_head into p9_req_t Message-ID: <20180712163649.36057b6e@bahia.lan> In-Reply-To: <20180711210225.19730-5-willy@infradead.org> References: <20180711210225.19730-1-willy@infradead.org> <20180711210225.19730-5-willy@infradead.org> X-Mailer: Claws Mail 3.16.0 (GTK+ 2.24.32; x86_64-redhat-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Ovh-Tracer-Id: 7461620159068674373 X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: -100 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgedtiedrgeekgdejlecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfqggfjpdevjffgvefmvefgnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 11 Jul 2018 14:02:23 -0700 Matthew Wilcox wrote: > On a 64-bit system, the wait_queue_head_t is 24 bytes while the pointer > to it is 8 bytes. Growing the p9_req_t by 16 bytes is better than > performing a 24-byte memory allocation. > This is true when all tags have been used at least once. But the current code lazily allocates the wait_queue_head_t, ie, only when a tag is used for the first time. Your patch causes a full row of wait_quest_head_t to be pre-allocated. ie, P9_ROW_MAXTAG * 24 = 255 * 24 = 6120 instead of (P9_ROW_MAXTAG * 8) + 24 = 255 * 8 + 24 = 2064 This is nearly a page of allocated memory that might be never used. Not sure if this is a problem though... > Signed-off-by: Matthew Wilcox > --- > include/net/9p/client.h | 2 +- > net/9p/client.c | 19 +++++-------------- > net/9p/trans_virtio.c | 2 +- > 3 files changed, 7 insertions(+), 16 deletions(-) > ... and the diffstat is nice :) so Reviewed-by: Greg Kurz > diff --git a/include/net/9p/client.h b/include/net/9p/client.h > index e405729cd1c7..0fa0fbab33b0 100644 > --- a/include/net/9p/client.h > +++ b/include/net/9p/client.h > @@ -113,7 +113,7 @@ enum p9_req_status_t { > struct p9_req_t { > int status; > int t_err; > - wait_queue_head_t *wq; > + wait_queue_head_t wq; > struct p9_fcall *tc; > struct p9_fcall *rc; > void *aux; > diff --git a/net/9p/client.c b/net/9p/client.c > index b89c7298267c..bc8aba6b5ce0 100644 > --- a/net/9p/client.c > +++ b/net/9p/client.c > @@ -282,8 +282,9 @@ p9_tag_alloc(struct p9_client *c, u16 tag, unsigned int max_size) > return ERR_PTR(-ENOMEM); > } > for (col = 0; col < P9_ROW_MAXTAG; col++) { > - c->reqs[row][col].status = REQ_STATUS_IDLE; > - c->reqs[row][col].tc = NULL; > + req = &c->reqs[row][col]; > + req->status = REQ_STATUS_IDLE; > + init_waitqueue_head(&req->wq); > } > c->max_tag += P9_ROW_MAXTAG; > } > @@ -293,13 +294,6 @@ p9_tag_alloc(struct p9_client *c, u16 tag, unsigned int max_size) > col = tag % P9_ROW_MAXTAG; > > req = &c->reqs[row][col]; > - if (!req->wq) { > - req->wq = kmalloc(sizeof(wait_queue_head_t), GFP_NOFS); > - if (!req->wq) > - goto grow_failed; > - init_waitqueue_head(req->wq); > - } > - > if (!req->tc) > req->tc = p9_fcall_alloc(alloc_msize); > if (!req->rc) > @@ -319,9 +313,7 @@ p9_tag_alloc(struct p9_client *c, u16 tag, unsigned int max_size) > pr_err("Couldn't grow tag array\n"); > kfree(req->tc); > kfree(req->rc); > - kfree(req->wq); > req->tc = req->rc = NULL; > - req->wq = NULL; > return ERR_PTR(-ENOMEM); > } > > @@ -409,7 +401,6 @@ static void p9_tag_cleanup(struct p9_client *c) > /* free requests associated with tags */ > for (row = 0; row < (c->max_tag/P9_ROW_MAXTAG); row++) { > for (col = 0; col < P9_ROW_MAXTAG; col++) { > - kfree(c->reqs[row][col].wq); > kfree(c->reqs[row][col].tc); > kfree(c->reqs[row][col].rc); > } > @@ -452,7 +443,7 @@ void p9_client_cb(struct p9_client *c, struct p9_req_t *req, int status) > smp_wmb(); > req->status = status; > > - wake_up(req->wq); > + wake_up(&req->wq); > p9_debug(P9_DEBUG_MUX, "wakeup: %d\n", req->tc->tag); > } > EXPORT_SYMBOL(p9_client_cb); > @@ -773,7 +764,7 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...) > } > again: > /* Wait for the response */ > - err = wait_event_killable(*req->wq, req->status >= REQ_STATUS_RCVD); > + err = wait_event_killable(req->wq, req->status >= REQ_STATUS_RCVD); > > /* > * Make sure our req is coherent with regard to updates in other > diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c > index 05006cbb3361..3e096c98313c 100644 > --- a/net/9p/trans_virtio.c > +++ b/net/9p/trans_virtio.c > @@ -490,7 +490,7 @@ p9_virtio_zc_request(struct p9_client *client, struct p9_req_t *req, > virtqueue_kick(chan->vq); > spin_unlock_irqrestore(&chan->lock, flags); > p9_debug(P9_DEBUG_TRANS, "virtio request kicked\n"); > - err = wait_event_killable(*req->wq, req->status >= REQ_STATUS_RCVD); > + err = wait_event_killable(req->wq, req->status >= REQ_STATUS_RCVD); > /* > * Non kernel buffers are pinned, unpin them > */