Received: by 2002:a05:7412:251c:b0:e2:908c:2ebd with SMTP id w28csp964019rda; Sun, 22 Oct 2023 19:12:01 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH+w09rGKpGlC3HxU8k3xn3st2eTCAMJ5ngjv5Ns8eAEdN3yV+s/gHOSrNvAFNNTDqEPR1g X-Received: by 2002:a17:902:d48f:b0:1b6:a37a:65b7 with SMTP id c15-20020a170902d48f00b001b6a37a65b7mr14853930plg.23.1698027120952; Sun, 22 Oct 2023 19:12:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698027120; cv=none; d=google.com; s=arc-20160816; b=zVwechDysqZu1KTZuiUio8rsbpD7u5TFag5hvvpYu1YLX89e2s2wUsLx+wirOtJv/l ken5Mnt/GTMtOzdFglzqNu+MJLetBxFSEA0RDQnM9CSJsW95RXOOVQcmBR3UwecdShDs dVto6pDDIUYauj1gIbEO985vT3r1rt3xT9HSLwL+mVTGtstZDn8AGL2rpRESqoKXCHsO 0hBVhCPBe4wFRgOfph1EozsA1i4VMaBeQXI+sIElZ/U7bAcuXMqIoGJflYdyh94hap/6 ZUyKOAJjtRPHwBvv/ahcUd+0N/j5BjJF2mkCzJuih6Io+QFVw33TOhRFtnRI7M4Jr6dR Hxag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-signature; bh=29Y+6+lN91+ttI9zymDHVFSaeYXd6uip7j1l91qeT0M=; fh=7qEnEX/LkcfVW+x9QL9Kl5KXgIktTChUzdd7gz02GxQ=; b=ezek3QZRbZBUPfudHdTND8GXSemVrPSkOFXHp9YVSiOJWtEoa4MATCde53Xu4x06ww qKUFFTQieycefTRiecSZLgKYKOPMe7uZIsdO3VafhE94ujQgl+0RDR9EqT0col9rHMrT h/zNkLrvLQshfrOl/Lx6iB2sML2873rVGNtr0CDYSoBYX8PZOaCgesLv29lwRZ+llXrq 3QcJnIe44x9anPfnSHWnBZEq3hGHBnBW1kwoFRyG8DYdHJUFF3AlPYyyzlcM1xG9xNNe qUYdAhcwfveZvUtreyAMXDO+RroQ10P/j6OJCqxSCssrIUraUvZLTcfgZ9JOKwD8DlEE It2g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=gdTAY0Wi; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519 header.b="sZ5Sl/Jx"; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id m11-20020a1709026bcb00b001c9abd736fbsi5406995plt.305.2023.10.22.19.12.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Oct 2023 19:12:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=pass header.i=@suse.de header.s=susede2_rsa header.b=gdTAY0Wi; dkim=neutral (no key) header.i=@suse.de header.s=susede2_ed25519 header.b="sZ5Sl/Jx"; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=suse.de Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 6E2BB8061CF3; Sun, 22 Oct 2023 19:11:57 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233007AbjJWCL4 (ORCPT + 99 others); Sun, 22 Oct 2023 22:11:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49196 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229489AbjJWCLz (ORCPT ); Sun, 22 Oct 2023 22:11:55 -0400 Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2001:67c:2178:6::1d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9ABAA8E for ; Sun, 22 Oct 2023 19:11:52 -0700 (PDT) Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 004A31FD8E; Mon, 23 Oct 2023 02:11:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1698027111; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=29Y+6+lN91+ttI9zymDHVFSaeYXd6uip7j1l91qeT0M=; b=gdTAY0Wi0V3pNBOQ/TPizjQn7BVUayD3J/dg21GDwoPQQ3bvwP2rehiIzmXrvP6cGZ2a3F Oznv9GJ843tLHV1giq3ooLMNaMwKCw7zhwCQTTfMeFKBrOZrDeaXxKKMl8FpE+Gwlp+6iW FWT55DVuJvGh7yhb2noLaY2aumxyPaI= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1698027111; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=29Y+6+lN91+ttI9zymDHVFSaeYXd6uip7j1l91qeT0M=; b=sZ5Sl/JxZvJoBbqPfyyLhUvoL3asCXv4jc2dkpBTDX6FQ1Q1pY8KhWBKrQpUwlKMmrwdTV 5Wl1bkt/5WjgmFCA== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id C75DB132FD; Mon, 23 Oct 2023 02:11:48 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id 0iljL2TWNWVwbwAAMHmgww (envelope-from ); Mon, 23 Oct 2023 02:11:48 +0000 From: NeilBrown To: Steve Dickson Cc: linux-nfs@vger.kernel.org, Trond Myklebust Subject: [PATCH 3/6] export: move cache_open() before workers are forked. Date: Mon, 23 Oct 2023 12:58:33 +1100 Message-ID: <20231023021052.5258-4-neilb@suse.de> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231023021052.5258-1-neilb@suse.de> References: <20231023021052.5258-1-neilb@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Authentication-Results: smtp-out2.suse.de; none X-Spam-Level: X-Spam-Score: 0.90 X-Spamd-Result: default: False [0.90 / 50.00]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[3]; TO_DN_SOME(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[text/plain]; R_MISSING_CHARSET(2.50)[]; BROKEN_CONTENT_TYPE(1.50)[]; NEURAL_HAM_LONG(-3.00)[-1.000]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_COUNT_TWO(0.00)[2]; RCVD_TLS_ALL(0.00)[]; BAYES_HAM(-0.00)[39.91%] X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Sun, 22 Oct 2023 19:11:57 -0700 (PDT) If each worker has a separate open on a cache channel, then each worker will potentially receive every upcall request resulting in duplicated work. A worker will only not see a request that another worker sees if that other worker answers the request before this worker gets a chance to read it. To avoid duplicate effort between threads and so get maximum benefit from multiple threads, open the cache channels before forking. Note that the kernel provides locking so that only one thread can be reading to writing to any channel at any given moment. Fixes: 5fc3bac9e0c3 ("mountd: Ensure we don't share cache file descriptors among processes.") Signed-off-by: NeilBrown --- utils/exportd/exportd.c | 8 ++++++-- utils/mountd/mountd.c | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/utils/exportd/exportd.c b/utils/exportd/exportd.c index 2dd12cb6015b..6f866445efc2 100644 --- a/utils/exportd/exportd.c +++ b/utils/exportd/exportd.c @@ -289,12 +289,16 @@ main(int argc, char **argv) else if (num_threads > MAX_THREADS) num_threads = MAX_THREADS; + /* Open cache channel files BEFORE forking so each upcall is + * only handled by one thread. Kernel provides locking for both + * read and write. + */ + cache_open(); + if (num_threads > 1) fork_workers(); - /* Open files now to avoid sharing descriptors among forked processes */ - cache_open(); v4clients_init(); /* Process incoming upcalls */ diff --git a/utils/mountd/mountd.c b/utils/mountd/mountd.c index bcf749fabbb3..f9c62cded66c 100644 --- a/utils/mountd/mountd.c +++ b/utils/mountd/mountd.c @@ -916,12 +916,16 @@ main(int argc, char **argv) else if (num_threads > MAX_THREADS) num_threads = MAX_THREADS; + /* Open cache channel files BEFORE forking so each upcall is + * only handled by one thread. Kernel provides locking for both + * read and write. + */ + cache_open(); + if (num_threads > 1) fork_workers(); nfsd_path_init(); - /* Open files now to avoid sharing descriptors among forked processes */ - cache_open(); v4clients_init(); xlog(L_NOTICE, "Version " VERSION " starting"); -- 2.42.0