From patchwork Fri Mar 1 19:24:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835957 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DBAF2139A for ; Fri, 1 Mar 2019 19:26:57 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CCF6E2FC06 for ; Fri, 1 Mar 2019 19:26:57 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C1ABC2FD40; Fri, 1 Mar 2019 19:26:57 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B4DE12FC06 for ; Fri, 1 Mar 2019 19:26:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725988AbfCAT04 (ORCPT ); Fri, 1 Mar 2019 14:26:56 -0500 Received: from mail-yw1-f65.google.com ([209.85.161.65]:46389 "EHLO mail-yw1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725905AbfCAT0z (ORCPT ); Fri, 1 Mar 2019 14:26:55 -0500 Received: by mail-yw1-f65.google.com with SMTP id n12so14911120ywn.13 for ; Fri, 01 Mar 2019 11:26:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=nJFBhEOlZ3nJuZrBWuxE2iOl/WFwKdya9WR0Q2DDQTk=; b=bfluqCvJHLIvCs/eqJeXixHXrefmbEWSnLA/s3R+zT+O5vyN5XfLdwXxUB366AP/ps BXYiGExkmImZOKXDsrP7E4LCstdTMAEsfjNW1mJX5zsc/Y3yn+hK+G1TvBbb9b831iXQ EQyUEsQ/JcOJHgTFTBZbOQR+5YWRpfpR0oQtvTFjVY/At9bLcJSYXVaas6/B8xVDkKsu rYra9GnY7IsUVYY0A/wayENSqMAZ4zIH7A4iPgLScjUkzjoHydzxEfpPqnzQCXGgbSKZ s9aBA+VXdQEaqXVSLi2jTm25s/X8RFZKr0B9I0O/cO7I8ot0MIBIdPzkneRk6OZi63lt LGFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=nJFBhEOlZ3nJuZrBWuxE2iOl/WFwKdya9WR0Q2DDQTk=; b=Ltk0iMVny8zJbH9Mf5A1Y5R8HuWRyNa3AOuDbPZNiC56TpbXPbe/BX2tdJFCORjKbM VfYlx4mFuiVFU+CPYMbqDm6pUM8OAMSny7pmRzrKOMuBeFz23N/dOFGSwhO9sEX+78Ls dm4SOOCXGVSRzUv6k0nGtNpmI3aNQgCUYdlXO61PpA31ywaO3FwGwKy2HQkMID2kVllH 9oMMjcsS4yIatJyZ/xBjUBgRaIimCBdURmO/ZAGqM/yNfDW5DzZC2oEYluYPMC135Xl9 VuWJhOpCCvFLfS3Yk+oRy8KAe2iBmdP1i5wtkW6bewQxVTfPv5NQGo8w4filrps6LwP8 eYCw== X-Gm-Message-State: APjAAAWsLDyYCkCHSo0JZDV8tKb3Ozenhq91IAxzEkpxmFMpPZNL1/kz 2n0UT8zawO+CITuo7SMCqgu8yUI= X-Google-Smtp-Source: APXvYqzYfYvGvViENNL+3B1IkGdZ0x+HzOxvcz0KqH40GyIr46TX72pkX3LW7d15f1QL61vszfuUhA== X-Received: by 2002:a25:6085:: with SMTP id u127mr5655648ybb.291.1551468414244; Fri, 01 Mar 2019 11:26:54 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.26.53 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:26:53 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 01/19] NFSv4/flexfiles: Fix invalid deref in FF_LAYOUT_DEVID_NODE() Date: Fri, 1 Mar 2019 14:24:37 -0500 Message-Id: <20190301192455.104943-2-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-1-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP If the attempt to instantiate the mirror's layout DS pointer failed, then that pointer may hold a value of type ERR_PTR(), so we need to check that before we dereference it. Fixes: 65990d1afbd2d ("pNFS/flexfiles: Fix a deadlock on LAYOUTGET") Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.h | 32 +++++++++++++++----------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.h b/fs/nfs/flexfilelayout/flexfilelayout.h index c2626bad466b..8a2d5d630af9 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.h +++ b/fs/nfs/flexfilelayout/flexfilelayout.h @@ -132,16 +132,6 @@ FF_LAYOUT_LSEG(struct pnfs_layout_segment *lseg) generic_hdr); } -static inline struct nfs4_deviceid_node * -FF_LAYOUT_DEVID_NODE(struct pnfs_layout_segment *lseg, u32 idx) -{ - if (idx >= FF_LAYOUT_LSEG(lseg)->mirror_array_cnt || - FF_LAYOUT_LSEG(lseg)->mirror_array[idx] == NULL || - FF_LAYOUT_LSEG(lseg)->mirror_array[idx]->mirror_ds == NULL) - return NULL; - return &FF_LAYOUT_LSEG(lseg)->mirror_array[idx]->mirror_ds->id_node; -} - static inline struct nfs4_ff_layout_ds * FF_LAYOUT_MIRROR_DS(struct nfs4_deviceid_node *node) { @@ -151,9 +141,25 @@ FF_LAYOUT_MIRROR_DS(struct nfs4_deviceid_node *node) static inline struct nfs4_ff_layout_mirror * FF_LAYOUT_COMP(struct pnfs_layout_segment *lseg, u32 idx) { - if (idx >= FF_LAYOUT_LSEG(lseg)->mirror_array_cnt) - return NULL; - return FF_LAYOUT_LSEG(lseg)->mirror_array[idx]; + struct nfs4_ff_layout_segment *fls = FF_LAYOUT_LSEG(lseg); + + if (idx < fls->mirror_array_cnt) + return fls->mirror_array[idx]; + return NULL; +} + +static inline struct nfs4_deviceid_node * +FF_LAYOUT_DEVID_NODE(struct pnfs_layout_segment *lseg, u32 idx) +{ + struct nfs4_ff_layout_mirror *mirror = FF_LAYOUT_COMP(lseg, idx); + + if (mirror != NULL) { + struct nfs4_ff_layout_ds *mirror_ds = mirror->mirror_ds; + + if (!IS_ERR_OR_NULL(mirror_ds)) + return &mirror_ds->id_node; + } + return NULL; } static inline u32 From patchwork Fri Mar 1 19:24:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835959 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 080C51669 for ; Fri, 1 Mar 2019 19:26:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ED8CF2FC29 for ; Fri, 1 Mar 2019 19:26:57 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E1E5A2FC06; Fri, 1 Mar 2019 19:26:57 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7F8342FCDF for ; Fri, 1 Mar 2019 19:26:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725997AbfCAT05 (ORCPT ); Fri, 1 Mar 2019 14:26:57 -0500 Received: from mail-yw1-f67.google.com ([209.85.161.67]:41015 "EHLO mail-yw1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725862AbfCAT04 (ORCPT ); Fri, 1 Mar 2019 14:26:56 -0500 Received: by mail-yw1-f67.google.com with SMTP id q128so14917094ywg.8 for ; Fri, 01 Mar 2019 11:26:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=4R/Kf8z3Xqz6UYa2j9PRwzcmqRxvTHufVmm/jGZ9C3g=; b=iPj9JpCWE3rnBolh/OAm+UP6wLPxXdWbT9IRIcH8yhNGVxZ7xXBbZQEIB4W9hikynG pb5lmoWBGX4D2AIZh9wIS8m87RhyZrKyb6ncuNezdQHcvOti/390LkQkLuWXcbQBd4QM UhrqRZ3b4NGCh/kH8dP2A4B9DNU+/luNtsB7P3sHS2186DT3eedvE6hd7WMJiTLI7Fss g7AFCdA2UmXwTIQ1OlRaXk9dLVTmtq8XexnaQueNjUZM6pqGYtEOm3ohG0QwRYtCD4aK I6xBbH+a+6EtASxZnV0DRZpEQ2+4eP36/fB65JgC8ZDOMHGzgGkq40KxmN06GBzRXC7y kItQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4R/Kf8z3Xqz6UYa2j9PRwzcmqRxvTHufVmm/jGZ9C3g=; b=W7vHoBDpMCuLZNZsJUoX++sTsa3UbCLWCVoqJMEzKl2lqY6MrZZONOdZaC8XhowGw/ IkaGkI5egA2yIDOfFKssti6+FbnzIjZVNK2PDjieYQLkGbXLw5E7E0oMZ+od8z4UEfkk OTVS5bQC+7IKRQqlRvXL7378fPr8Clt2PYSCcKYN8mAAfEXFXG58RTSQ4N3+10eYC0u3 TZbDTFAUrONCp54UlLauLsWAOiPT8HEon+vhU7fWs7iU6NNGoOtKF43cblALRjcId1bB z4DldZEnt02+GnuPV/N4G5HsXk/aUyEIEQRK+wQmNasYaEGe//bCSlx+Pz4AZAj+YTeJ B2Ug== X-Gm-Message-State: APjAAAX+5ycrNWik5BswtB/TFb547oqYjVsXAged6ujjyASzDVPdM/wR 6LP5KnGA17skOftkcvFxJBdR6eM= X-Google-Smtp-Source: APXvYqzJ+8jB7RpAAMGICUo61n1A7DPUIgaKk4SupneZNA3dApOhX5FOwspR1JX01Cmf92f8L5TLpw== X-Received: by 2002:a25:8703:: with SMTP id a3mr1981962ybl.445.1551468415076; Fri, 01 Mar 2019 11:26:55 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.26.54 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:26:54 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 02/19] NFS/flexfiles: Fix up sparse RCU annotations Date: Fri, 1 Mar 2019 14:24:38 -0500 Message-Id: <20190301192455.104943-3-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-2-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index 32701b6a9566..244a03c22b31 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -410,7 +410,7 @@ ff_layout_alloc_lseg(struct pnfs_layout_hdr *lh, for (i = 0; i < fls->mirror_array_cnt; i++) { struct nfs4_ff_layout_mirror *mirror; struct cred *kcred; - const struct cred *cred; + const struct cred __rcu *cred; kuid_t uid; kgid_t gid; u32 ds_count, fh_count, id; @@ -501,7 +501,7 @@ ff_layout_alloc_lseg(struct pnfs_layout_hdr *lh, goto out_err_free; kcred->fsuid = uid; kcred->fsgid = gid; - cred = kcred; + cred = RCU_INITIALIZER(kcred); if (lgr->range.iomode == IOMODE_READ) rcu_assign_pointer(fls->mirror_array[i]->ro_cred, cred); From patchwork Fri Mar 1 19:24:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835961 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8493C1805 for ; Fri, 1 Mar 2019 19:26:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 75AF32FC06 for ; Fri, 1 Mar 2019 19:26:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6A5B72FD25; Fri, 1 Mar 2019 19:26:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 14D052FC06 for ; Fri, 1 Mar 2019 19:26:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725862AbfCAT05 (ORCPT ); Fri, 1 Mar 2019 14:26:57 -0500 Received: from mail-yw1-f65.google.com ([209.85.161.65]:33946 "EHLO mail-yw1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725905AbfCAT05 (ORCPT ); Fri, 1 Mar 2019 14:26:57 -0500 Received: by mail-yw1-f65.google.com with SMTP id u205so14959403ywe.1 for ; Fri, 01 Mar 2019 11:26:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=2QvvkV1Xrxgz0nLmZ+gse3tjySRBEI2DeUAlDEnYu4c=; b=i+bAWRK0qHFMJhcO7k9IiFqrTI2/nllCt5T/xoKbSRJaDUV4MxCJRR4wcu1djm72x2 VUvpxQplvk3wWEgFf/VSF/sem7wJ9mPTZTBnCodYjU/Dl5so0uVuAF48jJaipLmZiTfS OmCjC3USkOiE76R0/BFY1wc1WGlC2+XkZDg6yoyHsRbtt2Cc8E0zjDFAIJ4fpkIV187s 4hKB7n0dFahNwcMqoa9DJxVFfFrGZpfTxOSGm/+ZQ/Rm4eDOi6RutCqHFFhYxD1/sY7V VGP4rYlIFQ28b0j3ESaeaiUYaOd3aQ2VfuyOjZMfdN1UQq/gk6w2W8uacSffyspV9+vX CE0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2QvvkV1Xrxgz0nLmZ+gse3tjySRBEI2DeUAlDEnYu4c=; b=JwqT3TT27BxnBBWnDBzKGK29bfrvi5kqyUQBhBuBt+0gNK6IkUn+KeLCcspzt1/6Tm bVRg5Cvw0sCc2BVBpKKvaL102ZET6oWXagUpTKLzTlIS9MhKWSykzmooerULEPz7rI3M uGGqUm48r9WLXdkDqIN01gwLpcEtGGSEWPIOxXFGTKP9Fmbt2kqEHkzLXnrTuGknQ7eH tLdJEye8GKZK/Uw45CHtkG93+FuJTvMoTLKj9s9ARky/UYBfKueyeZXGfdXLXqZPptRM u4wu+fcNQE0qDHrTpsUbm3s1Lge09tgTm8i+C4/EvRZbhakXWNdtc6FrI5JAafHZXNIz rFgA== X-Gm-Message-State: APjAAAU7oMDxTk5DBSqLrnAURCIp37QuO4T1IYLRYymoa6aurOD2n/6f NKXtxP2A5o+syYKGhJw7yJN6Q5c= X-Google-Smtp-Source: APXvYqz0Wk36THGaOMaVqDRUaMSoB80FQ53KiwqY7+bVjnbcgdBBz9HuCJQzbDodByHituMcELBJnA== X-Received: by 2002:a81:5987:: with SMTP id n129mr4987991ywb.95.1551468415895; Fri, 01 Mar 2019 11:26:55 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.26.55 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:26:55 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 03/19] NFSv4/pnfs: Fix barriers in nfs4_mark_deviceid_unavailable() Date: Fri, 1 Mar 2019 14:24:39 -0500 Message-Id: <20190301192455.104943-4-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-3-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Fix the memory barriers in nfs4_mark_deviceid_unavailable() and nfs4_test_deviceid_unavailable(). Signed-off-by: Trond Myklebust --- fs/nfs/pnfs_dev.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/nfs/pnfs_dev.c b/fs/nfs/pnfs_dev.c index 7fb59487ee90..ec6b607ff1d7 100644 --- a/fs/nfs/pnfs_dev.c +++ b/fs/nfs/pnfs_dev.c @@ -287,7 +287,9 @@ void nfs4_mark_deviceid_unavailable(struct nfs4_deviceid_node *node) { node->timestamp_unavailable = jiffies; + smp_mb__before_atomic(); set_bit(NFS_DEVICEID_UNAVAILABLE, &node->flags); + smp_mb__after_atomic(); } EXPORT_SYMBOL_GPL(nfs4_mark_deviceid_unavailable); @@ -302,6 +304,7 @@ nfs4_test_deviceid_unavailable(struct nfs4_deviceid_node *node) if (time_in_range(node->timestamp_unavailable, start, end)) return true; clear_bit(NFS_DEVICEID_UNAVAILABLE, &node->flags); + smp_mb__after_atomic(); } return false; } From patchwork Fri Mar 1 19:24:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835963 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F37891669 for ; Fri, 1 Mar 2019 19:26:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E30DF2FC06 for ; Fri, 1 Mar 2019 19:26:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D7A602FCDF; Fri, 1 Mar 2019 19:26:59 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 608122FC06 for ; Fri, 1 Mar 2019 19:26:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726002AbfCAT06 (ORCPT ); Fri, 1 Mar 2019 14:26:58 -0500 Received: from mail-yw1-f65.google.com ([209.85.161.65]:45887 "EHLO mail-yw1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725905AbfCAT06 (ORCPT ); Fri, 1 Mar 2019 14:26:58 -0500 Received: by mail-yw1-f65.google.com with SMTP id r188so14784196ywb.12 for ; Fri, 01 Mar 2019 11:26:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=q5Cp7cxRMV82Uad41xxH5Eh8eZ8l/ZcvUMn8J96Y72A=; b=NIo5q/8OzuXE2j8Lfzi3fCEv+sAPRuyoj5461AD2RpOkskQrDFTJZ+M98Zn/+LBQFD vyOBmXEH+DAV4MeMVAk8BSO7JZOEMJKDJolNhTTxj0RxDLR+7x8vOVLt6G2J5euPQoJO DBQG2OsOLtX7urrPQYQEzzaBx5MPpIKFCRNr0wK7xUS8wJHx0bH4Y784NvA5tdD/iu32 CrT425tMn1P6xZOcE2ORRdjYwBhbFtkjXnW/0iGhoKbNzVWO0o40YwNVCPfmB6bzgUpA Ogj8HzRwQt8OkyGnXf908uzxnm6uQd3q8TKSyqibHhJSRIgfnLQj0Bx3rq7u5/grJ/ru 2kLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=q5Cp7cxRMV82Uad41xxH5Eh8eZ8l/ZcvUMn8J96Y72A=; b=gDSD11tRyu+RNzCpaZo4d8nWTip+YuVVyJTgCzQ7quTBAUFYzDPOdY5X3d65bg62lH KjwxlLq/2JpLGX8Dln7UPQCXEkWzWXPfDBUZSEvnc/tECl8FWnBxEC3XNs+AHG519hdF CuIyYvgueR5pfPJFIGubPLrUcn7++5J1wqvVWmnNkLEgBmSVkciRBavpQ4V06QwZXFHd PFbnuTwj+47zqXdEFByoq0T3A36o06veEHLgs5SQ+55PoXWJA6socnsfgi1gRRrVXrPn MCHY+XhNBzG/bTXcJ1mHikNo/z+JHirw+YaDTz9RdgKvxeJD4PMOWNBfd2E42PJZphCs i6ZQ== X-Gm-Message-State: APjAAAWpN2XBv+RY2rORwoOJSsI9mm032ijhhtJYWyk/WQ/DOShB7eNS XTzAGK1jlFXWBa/GeaoqeOJU5co= X-Google-Smtp-Source: APXvYqx6usKP5nc5vsA6l7JQQOXdXdDNGNfMf+Wmi8JStj+BG0/119kOEibTPJ5DJFIlCVgDCushTQ== X-Received: by 2002:a25:dd7:: with SMTP id 206mr5838956ybn.214.1551468416777; Fri, 01 Mar 2019 11:26:56 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.26.55 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:26:56 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 04/19] NFSv4/flexfiles: Abort I/O early if the layout segment was invalidated Date: Fri, 1 Mar 2019 14:24:40 -0500 Message-Id: <20190301192455.104943-5-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-4-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP If a layout segment gets invalidated while a pNFS I/O operation is queued for transmission, then we ideally want to abort immediately. This is particularly the case when there is a large number of I/O related RPCs queued in the RPC layer, and the layout segment gets invalidated due to an ENOSPC error, or an EACCES (because the client was fenced). We may end up forced to spam the MDS with a lot of otherwise unnecessary LAYOUTERRORs after that I/O fails. Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.c | 17 +++++++++++++++++ include/linux/sunrpc/sched.h | 1 + net/sunrpc/xprt.c | 7 +++++++ 3 files changed, 25 insertions(+) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index 244a03c22b31..a8e9bdd978e7 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -1071,6 +1071,8 @@ static int ff_layout_async_handle_error_v4(struct rpc_task *task, break; case -NFS4ERR_RETRY_UNCACHED_REP: break; + case -EAGAIN: + return -NFS4ERR_RESET_TO_PNFS; /* Invalidate Layout errors */ case -NFS4ERR_PNFS_NO_LAYOUT: case -ESTALE: /* mapped NFS4ERR_STALE */ @@ -1131,6 +1133,7 @@ static int ff_layout_async_handle_error_v3(struct rpc_task *task, case -EBADHANDLE: case -ELOOP: case -ENOSPC: + case -EAGAIN: break; case -EJUKEBOX: nfs_inc_stats(lseg->pls_layout->plh_inode, NFSIOS_DELAY); @@ -1369,6 +1372,16 @@ static void ff_layout_read_prepare_v4(struct rpc_task *task, void *data) ff_layout_read_prepare_common(task, hdr); } +static void +ff_layout_io_prepare_transmit(struct rpc_task *task, + void *data) +{ + struct nfs_pgio_header *hdr = data; + + if (!pnfs_is_valid_lseg(hdr->lseg)) + rpc_exit(task, -EAGAIN); +} + static void ff_layout_read_call_done(struct rpc_task *task, void *data) { struct nfs_pgio_header *hdr = data; @@ -1657,6 +1670,7 @@ static void ff_layout_commit_release(void *data) static const struct rpc_call_ops ff_layout_read_call_ops_v3 = { .rpc_call_prepare = ff_layout_read_prepare_v3, + .rpc_call_prepare_transmit = ff_layout_io_prepare_transmit, .rpc_call_done = ff_layout_read_call_done, .rpc_count_stats = ff_layout_read_count_stats, .rpc_release = ff_layout_read_release, @@ -1664,6 +1678,7 @@ static const struct rpc_call_ops ff_layout_read_call_ops_v3 = { static const struct rpc_call_ops ff_layout_read_call_ops_v4 = { .rpc_call_prepare = ff_layout_read_prepare_v4, + .rpc_call_prepare_transmit = ff_layout_io_prepare_transmit, .rpc_call_done = ff_layout_read_call_done, .rpc_count_stats = ff_layout_read_count_stats, .rpc_release = ff_layout_read_release, @@ -1671,6 +1686,7 @@ static const struct rpc_call_ops ff_layout_read_call_ops_v4 = { static const struct rpc_call_ops ff_layout_write_call_ops_v3 = { .rpc_call_prepare = ff_layout_write_prepare_v3, + .rpc_call_prepare_transmit = ff_layout_io_prepare_transmit, .rpc_call_done = ff_layout_write_call_done, .rpc_count_stats = ff_layout_write_count_stats, .rpc_release = ff_layout_write_release, @@ -1678,6 +1694,7 @@ static const struct rpc_call_ops ff_layout_write_call_ops_v3 = { static const struct rpc_call_ops ff_layout_write_call_ops_v4 = { .rpc_call_prepare = ff_layout_write_prepare_v4, + .rpc_call_prepare_transmit = ff_layout_io_prepare_transmit, .rpc_call_done = ff_layout_write_call_done, .rpc_count_stats = ff_layout_write_count_stats, .rpc_release = ff_layout_write_release, diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h index 219aa3910a0c..52d41d0c1ae1 100644 --- a/include/linux/sunrpc/sched.h +++ b/include/linux/sunrpc/sched.h @@ -97,6 +97,7 @@ typedef void (*rpc_action)(struct rpc_task *); struct rpc_call_ops { void (*rpc_call_prepare)(struct rpc_task *, void *); + void (*rpc_call_prepare_transmit)(struct rpc_task *, void *); void (*rpc_call_done)(struct rpc_task *, void *); void (*rpc_count_stats)(struct rpc_task *, void *); void (*rpc_release)(void *); diff --git a/net/sunrpc/xprt.c b/net/sunrpc/xprt.c index 1cf4e379be7b..e096c5a725df 100644 --- a/net/sunrpc/xprt.c +++ b/net/sunrpc/xprt.c @@ -1330,6 +1330,13 @@ xprt_request_transmit(struct rpc_rqst *req, struct rpc_task *snd_task) status = -EBADMSG; goto out_dequeue; } + if (task->tk_ops->rpc_call_prepare_transmit) { + task->tk_ops->rpc_call_prepare_transmit(task, + task->tk_calldata); + status = task->tk_status; + if (status < 0) + goto out_dequeue; + } } /* From patchwork Fri Mar 1 19:24:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835965 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 95F9E139A for ; Fri, 1 Mar 2019 19:27:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 82ACA2FC06 for ; Fri, 1 Mar 2019 19:27:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 768022FCDF; Fri, 1 Mar 2019 19:27:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 838DD2FC06 for ; Fri, 1 Mar 2019 19:27:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725996AbfCAT1A (ORCPT ); Fri, 1 Mar 2019 14:27:00 -0500 Received: from mail-yw1-f67.google.com ([209.85.161.67]:38927 "EHLO mail-yw1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725999AbfCAT07 (ORCPT ); Fri, 1 Mar 2019 14:26:59 -0500 Received: by mail-yw1-f67.google.com with SMTP id z191so14307986ywa.6 for ; Fri, 01 Mar 2019 11:26:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=O7uQZ4SCyRgpCI3Is4zIruVaJrthWY99VJtaa2ePIh4=; b=C4ANg3DHkLTREQa+j3YX3rFfRDkfEQmxSaVhtXwX0CIwYOYd7uWjiT+zTbTvdOJUQK 1Dieg9r6R1BbPB9omMP/jZmAnmTcQOO4+P+ml0x6y97BpMdUyafvdD+EMNffaJNaElWR E5vL03NGOnxYkLj6kHgV9AYjvsJSfKHcbxCKxi34Qu1RBwMMfwzaqubu/o1f6BqECtQE vI/XD7D9Ik600dhV1oXXCvNho+LQdJi2ZMMuLPrqfPNXun3HBL6rY6Sk2IeCG/NDUqnS UUXHqO1xB1Y7eRDsaGw2IyZHOal6CjPCNekCsCie2VQti5vkOi0aJIrXWTkklMWIDQON +Z8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=O7uQZ4SCyRgpCI3Is4zIruVaJrthWY99VJtaa2ePIh4=; b=NcWjeuuMqHpbg4HzRrZIfzUN/t0g+tSiaX5Vi9oo4+RFpkiMcdHZtRcuQlDSSryrFb laJEOD1iuJ6iUkKmxkhv02funBRfC/rgDMqiQGCcmPMAjiU2UtmyUtR62My1LCbbrJUm wchoOf08n3meFqYjuLTl/kPd7rO7W8p2zHq5k2Ksm0ASM+yGTYim8LPARG2sLHZTAxdM ncFdqPyYLQhJ2/5tG4suDX8NPwNEZBOvz+9PcLmgSrft6q3+kvoWL4HUc8Gi7rduCV2N ozqFEcHBXKLNJf2N6j993IbkNjlbwW7tf41NBD5AwZ72i9f/rJSRLaK2eNqO7JdKuDPd q7Pg== X-Gm-Message-State: APjAAAVvnX7RfrpH8fap6m7VLAIvhoU+QClAm25RPVmEAWYskbfxlwoo yjd586PYpbQcsigzffpIE7FqW8E= X-Google-Smtp-Source: APXvYqwy5cNgawnlHxmxwhfKVbj8bjBBFVEQkqSBYp8Gfga7fCVapV2pt47P0JeopNz745BkgpPnUw== X-Received: by 2002:a81:35d0:: with SMTP id c199mr4968651ywa.439.1551468417590; Fri, 01 Mar 2019 11:26:57 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.26.56 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:26:57 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 05/19] NFSv4.2: Add client support for the generic 'layouterror' RPC call Date: Fri, 1 Mar 2019 14:24:41 -0500 Message-Id: <20190301192455.104943-6-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-5-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> <20190301192455.104943-5-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Trond Myklebust --- fs/nfs/nfs42.h | 3 + fs/nfs/nfs42proc.c | 164 ++++++++++++++++++++++++++++++++++++++ fs/nfs/nfs42xdr.c | 99 +++++++++++++++++++++++ fs/nfs/nfs4proc.c | 3 +- fs/nfs/nfs4xdr.c | 1 + include/linux/nfs4.h | 1 + include/linux/nfs_fs_sb.h | 1 + include/linux/nfs_xdr.h | 35 ++++++++ 8 files changed, 306 insertions(+), 1 deletion(-) diff --git a/fs/nfs/nfs42.h b/fs/nfs/nfs42.h index 19ec38f85ce0..901cca7542f9 100644 --- a/fs/nfs/nfs42.h +++ b/fs/nfs/nfs42.h @@ -20,5 +20,8 @@ loff_t nfs42_proc_llseek(struct file *, loff_t, int); int nfs42_proc_layoutstats_generic(struct nfs_server *, struct nfs42_layoutstat_data *); int nfs42_proc_clone(struct file *, struct file *, loff_t, loff_t, loff_t); +int nfs42_proc_layouterror(struct pnfs_layout_segment *lseg, + const struct nfs42_layout_error *errors, + size_t n); #endif /* __LINUX_FS_NFS_NFS4_2_H */ diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c index fed06fd9998d..ff6f85fb676b 100644 --- a/fs/nfs/nfs42proc.c +++ b/fs/nfs/nfs42proc.c @@ -672,6 +672,170 @@ int nfs42_proc_layoutstats_generic(struct nfs_server *server, return 0; } +static struct nfs42_layouterror_data * +nfs42_alloc_layouterror_data(struct pnfs_layout_segment *lseg, gfp_t gfp_flags) +{ + struct nfs42_layouterror_data *data; + struct inode *inode = lseg->pls_layout->plh_inode; + + data = kzalloc(sizeof(*data), gfp_flags); + if (data) { + data->args.inode = data->inode = nfs_igrab_and_active(inode); + if (data->inode) { + data->lseg = pnfs_get_lseg(lseg); + if (data->lseg) + return data; + nfs_iput_and_deactive(data->inode); + } + kfree(data); + } + return NULL; +} + +static void +nfs42_free_layouterror_data(struct nfs42_layouterror_data *data) +{ + pnfs_put_lseg(data->lseg); + nfs_iput_and_deactive(data->inode); + kfree(data); +} + +static void +nfs42_layouterror_prepare(struct rpc_task *task, void *calldata) +{ + struct nfs42_layouterror_data *data = calldata; + struct inode *inode = data->inode; + struct nfs_server *server = NFS_SERVER(inode); + struct pnfs_layout_hdr *lo = data->lseg->pls_layout; + unsigned i; + + spin_lock(&inode->i_lock); + if (!pnfs_layout_is_valid(lo)) { + spin_unlock(&inode->i_lock); + rpc_exit(task, 0); + return; + } + for (i = 0; i < data->args.num_errors; i++) + nfs4_stateid_copy(&data->args.errors[i].stateid, + &lo->plh_stateid); + spin_unlock(&inode->i_lock); + nfs4_setup_sequence(server->nfs_client, &data->args.seq_args, + &data->res.seq_res, task); +} + +static void +nfs42_layouterror_done(struct rpc_task *task, void *calldata) +{ + struct nfs42_layouterror_data *data = calldata; + struct inode *inode = data->inode; + struct pnfs_layout_hdr *lo = data->lseg->pls_layout; + + if (!nfs4_sequence_done(task, &data->res.seq_res)) + return; + + switch (task->tk_status) { + case 0: + break; + case -NFS4ERR_BADHANDLE: + case -ESTALE: + pnfs_destroy_layout(NFS_I(inode)); + break; + case -NFS4ERR_EXPIRED: + case -NFS4ERR_ADMIN_REVOKED: + case -NFS4ERR_DELEG_REVOKED: + case -NFS4ERR_STALE_STATEID: + case -NFS4ERR_BAD_STATEID: + spin_lock(&inode->i_lock); + if (pnfs_layout_is_valid(lo) && + nfs4_stateid_match(&data->args.errors[0].stateid, + &lo->plh_stateid)) { + LIST_HEAD(head); + + /* + * Mark the bad layout state as invalid, then retry + * with the current stateid. + */ + pnfs_mark_layout_stateid_invalid(lo, &head); + spin_unlock(&inode->i_lock); + pnfs_free_lseg_list(&head); + nfs_commit_inode(inode, 0); + } else + spin_unlock(&inode->i_lock); + break; + case -NFS4ERR_OLD_STATEID: + spin_lock(&inode->i_lock); + if (pnfs_layout_is_valid(lo) && + nfs4_stateid_match_other(&data->args.errors[0].stateid, + &lo->plh_stateid)) { + /* Do we need to delay before resending? */ + if (!nfs4_stateid_is_newer(&lo->plh_stateid, + &data->args.errors[0].stateid)) + rpc_delay(task, HZ); + rpc_restart_call_prepare(task); + } + spin_unlock(&inode->i_lock); + break; + case -ENOTSUPP: + case -EOPNOTSUPP: + NFS_SERVER(inode)->caps &= ~NFS_CAP_LAYOUTERROR; + } +} + +static void +nfs42_layouterror_release(void *calldata) +{ + struct nfs42_layouterror_data *data = calldata; + + nfs42_free_layouterror_data(data); +} + +static const struct rpc_call_ops nfs42_layouterror_ops = { + .rpc_call_prepare = nfs42_layouterror_prepare, + .rpc_call_done = nfs42_layouterror_done, + .rpc_release = nfs42_layouterror_release, +}; + +int nfs42_proc_layouterror(struct pnfs_layout_segment *lseg, + const struct nfs42_layout_error *errors, size_t n) +{ + struct inode *inode = lseg->pls_layout->plh_inode; + struct nfs42_layouterror_data *data; + struct rpc_task *task; + struct rpc_message msg = { + .rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_LAYOUTERROR], + }; + struct rpc_task_setup task_setup = { + .rpc_message = &msg, + .callback_ops = &nfs42_layouterror_ops, + .flags = RPC_TASK_ASYNC, + }; + unsigned int i; + + if (!nfs_server_capable(inode, NFS_CAP_LAYOUTERROR)) + return -EOPNOTSUPP; + if (n > NFS42_LAYOUTERROR_MAX) + return -EINVAL; + data = nfs42_alloc_layouterror_data(lseg, GFP_NOFS); + if (!data) + return -ENOMEM; + for (i = 0; i < n; i++) { + data->args.errors[i] = errors[i]; + data->args.num_errors++; + data->res.num_errors++; + } + msg.rpc_argp = &data->args; + msg.rpc_resp = &data->res; + task_setup.callback_data = data; + task_setup.rpc_client = NFS_SERVER(inode)->client; + nfs4_init_sequence(&data->args.seq_args, &data->res.seq_res, 0, 0); + task = rpc_run_task(&task_setup); + if (IS_ERR(task)) + return PTR_ERR(task); + rpc_put_task(task); + return 0; +} +EXPORT_SYMBOL_GPL(nfs42_proc_layouterror); + static int _nfs42_proc_clone(struct rpc_message *msg, struct file *src_f, struct file *dst_f, struct nfs_lock_context *src_lock, struct nfs_lock_context *dst_lock, loff_t src_offset, diff --git a/fs/nfs/nfs42xdr.c b/fs/nfs/nfs42xdr.c index 22b3425df08f..fa5e796697fb 100644 --- a/fs/nfs/nfs42xdr.c +++ b/fs/nfs/nfs42xdr.c @@ -51,6 +51,15 @@ 1 /* opaque devaddr4 length */ + \ XDR_QUADLEN(PNFS_LAYOUTSTATS_MAXSIZE)) #define decode_layoutstats_maxsz (op_decode_hdr_maxsz) +#define encode_device_error_maxsz (XDR_QUADLEN(NFS4_DEVICEID4_SIZE) + \ + 1 /* status */ + 1 /* opnum */) +#define encode_layouterror_maxsz (op_decode_hdr_maxsz + \ + 2 /* offset */ + \ + 2 /* length */ + \ + encode_stateid_maxsz + \ + 1 /* Array size */ + \ + encode_device_error_maxsz) +#define decode_layouterror_maxsz (op_decode_hdr_maxsz) #define encode_clone_maxsz (encode_stateid_maxsz + \ encode_stateid_maxsz + \ 2 /* src offset */ + \ @@ -106,6 +115,16 @@ decode_sequence_maxsz + \ decode_putfh_maxsz + \ PNFS_LAYOUTSTATS_MAXDEV * decode_layoutstats_maxsz) +#define NFS4_enc_layouterror_sz (compound_encode_hdr_maxsz + \ + encode_sequence_maxsz + \ + encode_putfh_maxsz + \ + NFS42_LAYOUTERROR_MAX * \ + encode_layouterror_maxsz) +#define NFS4_dec_layouterror_sz (compound_decode_hdr_maxsz + \ + decode_sequence_maxsz + \ + decode_putfh_maxsz + \ + NFS42_LAYOUTERROR_MAX * \ + decode_layouterror_maxsz) #define NFS4_enc_clone_sz (compound_encode_hdr_maxsz + \ encode_sequence_maxsz + \ encode_putfh_maxsz + \ @@ -223,6 +242,34 @@ static void encode_clone(struct xdr_stream *xdr, xdr_encode_hyper(p, args->count); } +static void encode_device_error(struct xdr_stream *xdr, + const struct nfs42_device_error *error) +{ + __be32 *p; + + p = reserve_space(xdr, NFS4_DEVICEID4_SIZE + 2*4); + p = xdr_encode_opaque_fixed(p, error->dev_id.data, + NFS4_DEVICEID4_SIZE); + *p++ = cpu_to_be32(error->status); + *p = cpu_to_be32(error->opnum); +} + +static void encode_layouterror(struct xdr_stream *xdr, + const struct nfs42_layout_error *args, + struct compound_hdr *hdr) +{ + __be32 *p; + + encode_op_hdr(xdr, OP_LAYOUTERROR, decode_layouterror_maxsz, hdr); + p = reserve_space(xdr, 8 + 8); + p = xdr_encode_hyper(p, args->offset); + p = xdr_encode_hyper(p, args->length); + encode_nfs4_stateid(xdr, &args->stateid); + p = reserve_space(xdr, 4); + *p = cpu_to_be32(1); + encode_device_error(xdr, &args->errors[0]); +} + /* * Encode ALLOCATE request */ @@ -381,6 +428,27 @@ static void nfs4_xdr_enc_clone(struct rpc_rqst *req, encode_nops(&hdr); } +/* + * Encode LAYOUTERROR request + */ +static void nfs4_xdr_enc_layouterror(struct rpc_rqst *req, + struct xdr_stream *xdr, + const void *data) +{ + const struct nfs42_layouterror_args *args = data; + struct compound_hdr hdr = { + .minorversion = nfs4_xdr_minorversion(&args->seq_args), + }; + int i; + + encode_compound_hdr(xdr, req, &hdr); + encode_sequence(xdr, &args->seq_args, &hdr); + encode_putfh(xdr, NFS_FH(args->inode), &hdr); + for (i = 0; i < args->num_errors; i++) + encode_layouterror(xdr, &args->errors[i], &hdr); + encode_nops(&hdr); +} + static int decode_allocate(struct xdr_stream *xdr, struct nfs42_falloc_res *res) { return decode_op_hdr(xdr, OP_ALLOCATE); @@ -484,6 +552,11 @@ static int decode_clone(struct xdr_stream *xdr) return decode_op_hdr(xdr, OP_CLONE); } +static int decode_layouterror(struct xdr_stream *xdr) +{ + return decode_op_hdr(xdr, OP_LAYOUTERROR); +} + /* * Decode ALLOCATE request */ @@ -693,4 +766,30 @@ static int nfs4_xdr_dec_clone(struct rpc_rqst *rqstp, return status; } +/* + * Decode LAYOUTERROR request + */ +static int nfs4_xdr_dec_layouterror(struct rpc_rqst *rqstp, + struct xdr_stream *xdr, + void *data) +{ + struct nfs42_layouterror_res *res = data; + struct compound_hdr hdr; + int status, i; + + status = decode_compound_hdr(xdr, &hdr); + if (status) + goto out; + status = decode_sequence(xdr, &res->seq_res, rqstp); + if (status) + goto out; + status = decode_putfh(xdr); + + for (i = 0; i < res->num_errors && status == 0; i++) + status = decode_layouterror(xdr); +out: + res->rpc_status = status; + return status; +} + #endif /* __LINUX_FS_NFS_NFS4_2XDR_H */ diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 5b980246b035..73889ea7d196 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -9690,7 +9690,8 @@ static const struct nfs4_minor_version_ops nfs_v4_2_minor_ops = { | NFS_CAP_DEALLOCATE | NFS_CAP_SEEK | NFS_CAP_LAYOUTSTATS - | NFS_CAP_CLONE, + | NFS_CAP_CLONE + | NFS_CAP_LAYOUTERROR, .init_client = nfs41_init_client, .shutdown_client = nfs41_shutdown_client, .match_stateid = nfs41_match_stateid, diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index 6d9d5e2f6308..cfcabc33e24d 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c @@ -7572,6 +7572,7 @@ const struct rpc_procinfo nfs4_procedures[] = { PROC42(COPY, enc_copy, dec_copy), PROC42(OFFLOAD_CANCEL, enc_offload_cancel, dec_offload_cancel), PROC(LOOKUPP, enc_lookupp, dec_lookupp), + PROC42(LAYOUTERROR, enc_layouterror, dec_layouterror), }; static unsigned int nfs_version4_counts[ARRAY_SIZE(nfs4_procedures)]; diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h index 1b06f0b28453..22494d170619 100644 --- a/include/linux/nfs4.h +++ b/include/linux/nfs4.h @@ -538,6 +538,7 @@ enum { NFSPROC4_CLNT_OFFLOAD_CANCEL, NFSPROC4_CLNT_LOOKUPP, + NFSPROC4_CLNT_LAYOUTERROR, }; /* nfs41 types */ diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h index 6aa8cc83c3b6..c827d31298cc 100644 --- a/include/linux/nfs_fs_sb.h +++ b/include/linux/nfs_fs_sb.h @@ -261,5 +261,6 @@ struct nfs_server { #define NFS_CAP_CLONE (1U << 23) #define NFS_CAP_COPY (1U << 24) #define NFS_CAP_OFFLOAD_CANCEL (1U << 25) +#define NFS_CAP_LAYOUTERROR (1U << 26) #endif diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index b4bd2bf5f585..9b8324ec08f3 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h @@ -383,6 +383,41 @@ struct nfs42_layoutstat_data { struct nfs42_layoutstat_res res; }; +struct nfs42_device_error { + struct nfs4_deviceid dev_id; + int status; + enum nfs_opnum4 opnum; +}; + +struct nfs42_layout_error { + __u64 offset; + __u64 length; + nfs4_stateid stateid; + struct nfs42_device_error errors[1]; +}; + +#define NFS42_LAYOUTERROR_MAX 5 + +struct nfs42_layouterror_args { + struct nfs4_sequence_args seq_args; + struct inode *inode; + unsigned int num_errors; + struct nfs42_layout_error errors[NFS42_LAYOUTERROR_MAX]; +}; + +struct nfs42_layouterror_res { + struct nfs4_sequence_res seq_res; + unsigned int num_errors; + int rpc_status; +}; + +struct nfs42_layouterror_data { + struct nfs42_layouterror_args args; + struct nfs42_layouterror_res res; + struct inode *inode; + struct pnfs_layout_segment *lseg; +}; + struct nfs42_clone_args { struct nfs4_sequence_args seq_args; struct nfs_fh *src_fh; From patchwork Fri Mar 1 19:24:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835967 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2D7A91805 for ; Fri, 1 Mar 2019 19:27:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1E8A42FC06 for ; Fri, 1 Mar 2019 19:27:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 12D152FC29; Fri, 1 Mar 2019 19:27:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 88C1B2FD25 for ; Fri, 1 Mar 2019 19:27:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726007AbfCAT1A (ORCPT ); Fri, 1 Mar 2019 14:27:00 -0500 Received: from mail-yw1-f65.google.com ([209.85.161.65]:41021 "EHLO mail-yw1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725905AbfCAT1A (ORCPT ); Fri, 1 Mar 2019 14:27:00 -0500 Received: by mail-yw1-f65.google.com with SMTP id q128so14917217ywg.8 for ; Fri, 01 Mar 2019 11:26:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=75ucBNCJFBy5BSZL+9Kwyk96Qx/3bmCyKZzdN3oSbO4=; b=ODMrNr+vVQFjaxp40icWZkpaN/rirtQIYiGSN9Dg90UMbJLAYlwzTR75EThu9BnqqU fmdJTbDoMZofOOu/a57C9M0sTNYd9ZYa1+J/MPhR6lK+RpSraRH1vo+4LAl6dKNiIJMI OVB/oGQ6KS67gd3KayrG8C7U1PvP1HeF+pE2yeR8c0ObA8LKfZCx4uK4p+hMTEMwHF+Z gLRB/k/zt4pRs4Vxq4OthnQTS3C7neASTRNMJk3QlNHDncR1DT+hM/jTSbxY17MP6GDx QIpzmFqu5MZhzdFP2oasufkQSFm1BswJynI6abOvdvAhI4C1uW3ZMcWLgzs2jtER/p/9 dxRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=75ucBNCJFBy5BSZL+9Kwyk96Qx/3bmCyKZzdN3oSbO4=; b=FsY/iDwHHlyRxUA+4HcEnEXDH6NhAIAPEjatNawJb0d5ImKPy8lYViPY+y22HnY1AY O1RBWUEHziQrayOMMJR1cZ3Zh6FSJDo2Bvp+Uf51DIy1XpRhIPusPO6xucqzu8EvPgK9 RBqEM7PDlhdxR/5shNqVI0gwUOnGfipzFpWTieMR54+/S7qtv1wOXxLdiHysK3a+rJ/a icZM10v5Z4RM31vlnhFfUcnutFKSskuN6MWw6DTwC1Z4MuxwXd1eiIMj3CdwdPGgXdIp /axQcPE8pmFnxrpFy0bVgk3Fnkn28UNfZg29fY2/kj/eFrH0TaDaP/+7IBDFkguBajtJ YiTA== X-Gm-Message-State: APjAAAXyMH5ghKSY3aU47XiTi2TMobkazbINMyxRQr/Bw5MAKN/aUS5/ lnFMw37fsVBT2jyhUPPgcQflqf8= X-Google-Smtp-Source: APXvYqwNaJ44/vYYMVZImm8dZO7o/0wWDozNqgIV0PCAzw+h5SrV3zGTf5hzIRG5vhQmtHNrVs5moQ== X-Received: by 2002:a25:4e8a:: with SMTP id c132mr5500874ybb.458.1551468418418; Fri, 01 Mar 2019 11:26:58 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.26.57 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:26:57 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 06/19] NFS/flexfiles: Send LAYOUTERROR when failing over mirrored reads Date: Fri, 1 Mar 2019 14:24:42 -0500 Message-Id: <20190301192455.104943-7-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-6-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> <20190301192455.104943-5-trond.myklebust@hammerspace.com> <20190301192455.104943-6-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP When a read to the preferred mirror returns an error, the flexfiles driver records the error in the inode list and currently marks the layout for return before failing over the attempted read to the next mirror. What we actually want to do is fire off a LAYOUTERROR to notify the MDS that there is an issue with the preferred mirror, then we fail over. Only once we've failed to read from all mirrors should we return the layout. Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.c | 53 ++++++++++++++++++++--- fs/nfs/flexfilelayout/flexfilelayout.h | 1 + fs/nfs/flexfilelayout/flexfilelayoutdev.c | 2 +- 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index a8e9bdd978e7..5ba30084f248 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -1252,7 +1252,7 @@ static int ff_layout_read_done_cb(struct rpc_task *task, if (ff_layout_choose_best_ds_for_read(hdr->lseg, hdr->pgio_mirror_idx + 1, &hdr->pgio_mirror_idx)) - goto out_eagain; + goto out_layouterror; set_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags); return task->tk_status; case -NFS4ERR_RESET_TO_MDS: @@ -1263,6 +1263,8 @@ static int ff_layout_read_done_cb(struct rpc_task *task, } return 0; +out_layouterror: + ff_layout_send_layouterror(hdr->lseg); out_eagain: rpc_restart_call_prepare(task); return -EAGAIN; @@ -1412,9 +1414,10 @@ static void ff_layout_read_release(void *data) struct nfs_pgio_header *hdr = data; ff_layout_read_record_layoutstats_done(&hdr->task, hdr); - if (test_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags)) + if (test_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags)) { + ff_layout_send_layouterror(hdr->lseg); pnfs_read_resend_pnfs(hdr); - else if (test_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags)) + } else if (test_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags)) ff_layout_reset_read(hdr); pnfs_generic_rw_release(data); } @@ -1586,9 +1589,10 @@ static void ff_layout_write_release(void *data) struct nfs_pgio_header *hdr = data; ff_layout_write_record_layoutstats_done(&hdr->task, hdr); - if (test_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags)) + if (test_bit(NFS_IOHDR_RESEND_PNFS, &hdr->flags)) { + ff_layout_send_layouterror(hdr->lseg); ff_layout_reset_write(hdr, true); - else if (test_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags)) + } else if (test_bit(NFS_IOHDR_RESEND_MDS, &hdr->flags)) ff_layout_reset_write(hdr, false); pnfs_generic_rw_release(data); } @@ -2119,6 +2123,45 @@ ff_layout_prepare_layoutreturn(struct nfs4_layoutreturn_args *args) return -ENOMEM; } +void +ff_layout_send_layouterror(struct pnfs_layout_segment *lseg) +{ + struct pnfs_layout_hdr *lo = lseg->pls_layout; + struct nfs42_layout_error *errors; + LIST_HEAD(head); + + if (!nfs_server_capable(lo->plh_inode, NFS_CAP_LAYOUTERROR)) + return; + ff_layout_fetch_ds_ioerr(lo, &lseg->pls_range, &head, -1); + if (list_empty(&head)) + return; + + errors = kmalloc_array(NFS42_LAYOUTERROR_MAX, + sizeof(*errors), GFP_NOFS); + if (errors != NULL) { + const struct nfs4_ff_layout_ds_err *pos; + size_t n = 0; + + list_for_each_entry(pos, &head, list) { + errors[n].offset = pos->offset; + errors[n].length = pos->length; + nfs4_stateid_copy(&errors[n].stateid, &pos->stateid); + errors[n].errors[0].dev_id = pos->deviceid; + errors[n].errors[0].status = pos->status; + errors[n].errors[0].opnum = pos->opnum; + n++; + if (!list_is_last(&pos->list, &head) && + n < NFS42_LAYOUTERROR_MAX) + continue; + if (nfs42_proc_layouterror(lseg, errors, n) < 0) + break; + n = 0; + } + kfree(errors); + } + ff_layout_free_ds_ioerr(&head); +} + static int ff_layout_ntop4(const struct sockaddr *sap, char *buf, const size_t buflen) { diff --git a/fs/nfs/flexfilelayout/flexfilelayout.h b/fs/nfs/flexfilelayout/flexfilelayout.h index 8a2d5d630af9..31a62820a5c6 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.h +++ b/fs/nfs/flexfilelayout/flexfilelayout.h @@ -213,6 +213,7 @@ int ff_layout_track_ds_error(struct nfs4_flexfile_layout *flo, struct nfs4_ff_layout_mirror *mirror, u64 offset, u64 length, int status, enum nfs_opnum4 opnum, gfp_t gfp_flags); +void ff_layout_send_layouterror(struct pnfs_layout_segment *lseg); int ff_layout_encode_ds_ioerr(struct xdr_stream *xdr, const struct list_head *head); void ff_layout_free_ds_ioerr(struct list_head *head); unsigned int ff_layout_fetch_ds_ioerr(struct pnfs_layout_hdr *lo, diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c index ca7a6203b3cb..c174f23afc6d 100644 --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c @@ -326,7 +326,6 @@ int ff_layout_track_ds_error(struct nfs4_flexfile_layout *flo, spin_lock(&flo->generic_hdr.plh_inode->i_lock); ff_layout_add_ds_error_locked(flo, dserr); spin_unlock(&flo->generic_hdr.plh_inode->i_lock); - return 0; } @@ -458,6 +457,7 @@ nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, u32 ds_idx, mirror, lseg->pls_range.offset, lseg->pls_range.length, NFS4ERR_NXIO, OP_ILLEGAL, GFP_NOIO); + ff_layout_send_layouterror(lseg); if (fail_return || !ff_layout_has_available_ds(lseg)) pnfs_error_mark_layout_for_return(ino, lseg); ds = NULL; From patchwork Fri Mar 1 19:24:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835969 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9C807139A for ; Fri, 1 Mar 2019 19:27:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8E9942FC06 for ; Fri, 1 Mar 2019 19:27:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 832142FC29; Fri, 1 Mar 2019 19:27:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2595F2FD25 for ; Fri, 1 Mar 2019 19:27:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726025AbfCAT1B (ORCPT ); Fri, 1 Mar 2019 14:27:01 -0500 Received: from mail-yw1-f67.google.com ([209.85.161.67]:35474 "EHLO mail-yw1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725999AbfCAT1A (ORCPT ); Fri, 1 Mar 2019 14:27:00 -0500 Received: by mail-yw1-f67.google.com with SMTP id s204so14944361ywg.2 for ; Fri, 01 Mar 2019 11:27:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=C4W/3sCZpp7GoysK9ln3EqXV3tr2VYFqrhuUgQ4jBX4=; b=SaEN65ek9LXd811vO73IcdDRsXWxjPwq9tKhAQUMIfOSJvETa4TJPgLEM4HqloNche Tm5GHbY018ewgUrEw6dIu5GZ/fL4N3LYSYZe5VJKYUURojC0Jg5cOR6u4KvBVlfZK9Mh RmcCcQzzBMSiMRfnIDBiJsigW0dYhlO62pLiO8dnk4R+lMXCfK0iQ4TO4SnnIlvMRlnj VZdRhXOOEULmush3wHJQycnsts/NjMgjA5gwhnrPAlFowrHxXQo9w7OpqN46FWUO3HLF yUNC/FFaTTO8/lvxxrDozCi6goQzG+0EqGKlHbYILvZqO+rOeX0+Be7TKrneB9b7/cpM YoFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=C4W/3sCZpp7GoysK9ln3EqXV3tr2VYFqrhuUgQ4jBX4=; b=YLMEHhF7o2C6m2Qr6DFnYI2I4GpsCb6MfXwRUnmP3YPM1JBqfFe7eIinuaC+YWP06g LIX6fW3py6BW+rbnCwZHCEe1+eoxoV6niMSZxHusC3IriIuNCq6L0Sx7h/QlR2Dl+MiM K0OCQBtsUs5Mazotw/0mAtuG5ErBVYy6//xg7/QXIZqmck8GI/HGl55k061GvzcvYvbb 4ctkvY4nUrH1JKzexHqliEeRIGBlKMN+Z8qEHJKeBQRlaYmzzgxBGhYKJG2xxHXUK1iS yHe0qwtcbzdZa5sB92QMdbAjRGbGlqdAcljQbgT5/8CafXmGMWtWoKu4zdME40BpjuTK f0yg== X-Gm-Message-State: APjAAAXx4znf+Fl/nvt7tmGCx0BQkFA6Fo7VxWTNjfbNFMNm9jLeEO7C kaqVis+JJGUCR8jsX8znxWYxvNk= X-Google-Smtp-Source: APXvYqzPspaeYWSxCXaDJD7FVGATeTX3J8kwQVoQAn28wz45Lb9gqbgEB8O6Ijv/lt0qS6O9Ws72Yg== X-Received: by 2002:a0d:c6c5:: with SMTP id i188mr5042346ywd.320.1551468419321; Fri, 01 Mar 2019 11:26:59 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.26.58 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:26:58 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 07/19] NFSv4: Handle early exit in layoutget by returning an error Date: Fri, 1 Mar 2019 14:24:43 -0500 Message-Id: <20190301192455.104943-8-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-7-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> <20190301192455.104943-5-trond.myklebust@hammerspace.com> <20190301192455.104943-6-trond.myklebust@hammerspace.com> <20190301192455.104943-7-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP If the LAYOUTGET rpc call exits early without an error, convert it to EAGAIN. Signed-off-by: Trond Myklebust --- fs/nfs/nfs4proc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 73889ea7d196..4dbb0ee23432 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -8936,10 +8936,12 @@ nfs4_proc_layoutget(struct nfs4_layoutget *lgp, long *timeout) if (status != 0) goto out; - /* if layoutp->len is 0, nfs4_layoutget_prepare called rpc_exit */ - if (task->tk_status < 0 || lgp->res.layoutp->len == 0) { + if (task->tk_status < 0) { status = nfs4_layoutget_handle_exception(task, lgp, &exception); *timeout = exception.timeout; + } else if (lgp->res.layoutp->len == 0) { + status = -EAGAIN; + *timeout = nfs4_update_delay(&exception.timeout); } else lseg = pnfs_layout_process(lgp); out: From patchwork Fri Mar 1 19:24:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835973 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 67CE91805 for ; Fri, 1 Mar 2019 19:27:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 59A122FC06 for ; Fri, 1 Mar 2019 19:27:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4DFCE2FCDF; Fri, 1 Mar 2019 19:27:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B7F392FC29 for ; Fri, 1 Mar 2019 19:27:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726034AbfCAT1D (ORCPT ); Fri, 1 Mar 2019 14:27:03 -0500 Received: from mail-yw1-f68.google.com ([209.85.161.68]:42829 "EHLO mail-yw1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725905AbfCAT1C (ORCPT ); Fri, 1 Mar 2019 14:27:02 -0500 Received: by mail-yw1-f68.google.com with SMTP id v201so14922396ywa.9 for ; Fri, 01 Mar 2019 11:27:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=K8etNovwHr89mpTVuxAGsyAfNo4BZg1qah5bA8zhZQo=; b=GmEOIM78jfDJFhru+mvP7EVDP6pFlBZn3hFx7jPegWk7V1yJEzdMKsr18CxBpsZYC3 DsZvvI7YOXlDei7aGKHAs9V8x42dm0u+WxFThL2cz9hRt8sUsdD0c1UFJT5Eqzf7GAW+ o/QjoRG3f9yYlzUULXAVtYeijFGgkFoMC0OgMLBhgA42IWf5j5gb8yRaZWaerSexkyAD MnClhlNuTrIRzjJNL4Fs7fg4TdQwmjg8Erwmb9Ll/dQkbBpOtGM0AbSLL2kMZbiIQh9h lGdvjxgeBXQjlYul886oPlCYgoU/y1KJpyCt8PMis3FPecEvvKU42QWd9kZ5lsqKff+S Rhkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=K8etNovwHr89mpTVuxAGsyAfNo4BZg1qah5bA8zhZQo=; b=BXSgWoGmPKQx/+6KBxjB59owz9Qkmfcz8KIBvAptjgW5Zf9/jRQcmsKorr56fI/UB7 6iW9LiW6tPG0FcH//bjw/JN55O42E9IIf25tIdgYR7l6kl6LbIjUjUmf/3SyneNfiYLt XLCJPDyKY4vqBmoJNJIvcwtOBvTHrOLkQFJY3xXkSIf4XXGnYyv1rkREZCoNVw3teWed AKne5HkV+X6Jg5zdszlw0CC96G8oAgUS+ee19mkzpBv3+pkLK1PfPqLLZcUeZT7IYHJn BH5c4F/5E29CMoHZ0odbZh+8u8MuSLSDHsUwKV9BSJp27McQAPKM6fBbH3kmBO9BFBok sTCQ== X-Gm-Message-State: APjAAAUn344lwX6XwCc42o1t+lrRyYTBROXS5sYh7ne4AOE4upISp02J Dk+1hpXaHH3yrGUndGTwtQwUB+E= X-Google-Smtp-Source: APXvYqxult5bzO04FNAVoga+8WduOee/v/y4JfInYVJyvl88l7dIWidRa2VIlnTDmFvSCgkYgKWavg== X-Received: by 2002:a81:5e89:: with SMTP id s131mr4961242ywb.482.1551468420247; Fri, 01 Mar 2019 11:27:00 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.26.59 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:26:59 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 08/19] NFS/flexfiles: refactor calls to fs4_ff_layout_prepare_ds() Date: Fri, 1 Mar 2019 14:24:44 -0500 Message-Id: <20190301192455.104943-9-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-8-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> <20190301192455.104943-5-trond.myklebust@hammerspace.com> <20190301192455.104943-6-trond.myklebust@hammerspace.com> <20190301192455.104943-7-trond.myklebust@hammerspace.com> <20190301192455.104943-8-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP While we may want to skip attempting to connect to a downed mirror when we're deciding which mirror to select for a read, we do not want to do so once we've committed to attempting the I/O in ff_layout_read/write_pagelist(), or ff_layout_initiate_commit() Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.c | 26 +++++++++++++++++------ fs/nfs/flexfilelayout/flexfilelayout.h | 3 ++- fs/nfs/flexfilelayout/flexfilelayoutdev.c | 18 +++++----------- 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index 5ba30084f248..4cf6fb5df3c8 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -794,6 +794,7 @@ ff_layout_choose_best_ds_for_read(struct pnfs_layout_segment *lseg, int *best_idx) { struct nfs4_ff_layout_segment *fls = FF_LAYOUT_LSEG(lseg); + struct nfs4_ff_layout_mirror *mirror; struct nfs4_pnfs_ds *ds; bool fail_return = false; int idx; @@ -802,7 +803,12 @@ ff_layout_choose_best_ds_for_read(struct pnfs_layout_segment *lseg, for (idx = start_idx; idx < fls->mirror_array_cnt; idx++) { if (idx+1 == fls->mirror_array_cnt) fail_return = true; - ds = nfs4_ff_layout_prepare_ds(lseg, idx, fail_return); + + mirror = FF_LAYOUT_COMP(lseg, idx); + if (ff_layout_test_devid_unavailable(&mirror->mirror_ds->id_node)) + continue; + + ds = nfs4_ff_layout_prepare_ds(lseg, mirror, fail_return); if (ds) { *best_idx = idx; return ds; @@ -925,7 +931,10 @@ ff_layout_pg_init_write(struct nfs_pageio_descriptor *pgio, goto out_mds; for (i = 0; i < pgio->pg_mirror_count; i++) { - ds = nfs4_ff_layout_prepare_ds(pgio->pg_lseg, i, true); + mirror = FF_LAYOUT_COMP(pgio->pg_lseg, i); + if (ff_layout_test_devid_unavailable(&mirror->mirror_ds->id_node)) + continue; + ds = nfs4_ff_layout_prepare_ds(pgio->pg_lseg, mirror, true); if (!ds) { if (!ff_layout_no_fallback_to_mds(pgio->pg_lseg)) goto out_mds; @@ -936,7 +945,6 @@ ff_layout_pg_init_write(struct nfs_pageio_descriptor *pgio, goto retry; } pgm = &pgio->pg_mirrors[i]; - mirror = FF_LAYOUT_COMP(pgio->pg_lseg, i); pgm->pg_bsize = mirror->mirror_ds->ds_versions[0].wsize; } @@ -1724,6 +1732,7 @@ ff_layout_read_pagelist(struct nfs_pgio_header *hdr) struct pnfs_layout_segment *lseg = hdr->lseg; struct nfs4_pnfs_ds *ds; struct rpc_clnt *ds_clnt; + struct nfs4_ff_layout_mirror *mirror; const struct cred *ds_cred; loff_t offset = hdr->args.offset; u32 idx = hdr->pgio_mirror_idx; @@ -1734,7 +1743,8 @@ ff_layout_read_pagelist(struct nfs_pgio_header *hdr) __func__, hdr->inode->i_ino, hdr->args.pgbase, (size_t)hdr->args.count, offset); - ds = nfs4_ff_layout_prepare_ds(lseg, idx, false); + mirror = FF_LAYOUT_COMP(lseg, idx); + ds = nfs4_ff_layout_prepare_ds(lseg, mirror, false); if (!ds) goto out_failed; @@ -1791,13 +1801,15 @@ ff_layout_write_pagelist(struct nfs_pgio_header *hdr, int sync) struct pnfs_layout_segment *lseg = hdr->lseg; struct nfs4_pnfs_ds *ds; struct rpc_clnt *ds_clnt; + struct nfs4_ff_layout_mirror *mirror; const struct cred *ds_cred; loff_t offset = hdr->args.offset; int vers; struct nfs_fh *fh; int idx = hdr->pgio_mirror_idx; - ds = nfs4_ff_layout_prepare_ds(lseg, idx, true); + mirror = FF_LAYOUT_COMP(lseg, idx); + ds = nfs4_ff_layout_prepare_ds(lseg, mirror, true); if (!ds) goto out_failed; @@ -1870,6 +1882,7 @@ static int ff_layout_initiate_commit(struct nfs_commit_data *data, int how) struct pnfs_layout_segment *lseg = data->lseg; struct nfs4_pnfs_ds *ds; struct rpc_clnt *ds_clnt; + struct nfs4_ff_layout_mirror *mirror; const struct cred *ds_cred; u32 idx; int vers, ret; @@ -1880,7 +1893,8 @@ static int ff_layout_initiate_commit(struct nfs_commit_data *data, int how) goto out_err; idx = calc_ds_index_from_commit(lseg, data->ds_commit_index); - ds = nfs4_ff_layout_prepare_ds(lseg, idx, true); + mirror = FF_LAYOUT_COMP(lseg, idx); + ds = nfs4_ff_layout_prepare_ds(lseg, mirror, true); if (!ds) goto out_err; diff --git a/fs/nfs/flexfilelayout/flexfilelayout.h b/fs/nfs/flexfilelayout/flexfilelayout.h index 31a62820a5c6..93508112486a 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.h +++ b/fs/nfs/flexfilelayout/flexfilelayout.h @@ -228,7 +228,8 @@ nfs4_ff_layout_select_ds_stateid(struct pnfs_layout_segment *lseg, nfs4_stateid *stateid); struct nfs4_pnfs_ds * -nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, u32 ds_idx, +nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, + struct nfs4_ff_layout_mirror *mirror, bool fail_return); struct rpc_clnt * diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c index c174f23afc6d..e16ddf2d4768 100644 --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c @@ -391,7 +391,7 @@ nfs4_ff_layout_select_ds_stateid(struct pnfs_layout_segment *lseg, /** * nfs4_ff_layout_prepare_ds - prepare a DS connection for an RPC call * @lseg: the layout segment we're operating on - * @ds_idx: index of the DS to use + * @mirror: layout mirror describing the DS to use * @fail_return: return layout on connect failure? * * Try to prepare a DS connection to accept an RPC call. This involves @@ -406,26 +406,19 @@ nfs4_ff_layout_select_ds_stateid(struct pnfs_layout_segment *lseg, * Returns a pointer to a connected DS object on success or NULL on failure. */ struct nfs4_pnfs_ds * -nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, u32 ds_idx, +nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, + struct nfs4_ff_layout_mirror *mirror, bool fail_return) { - struct nfs4_ff_layout_mirror *mirror = FF_LAYOUT_COMP(lseg, ds_idx); struct nfs4_pnfs_ds *ds = NULL; - struct nfs4_deviceid_node *devid; + struct nfs4_deviceid_node *devid = &mirror->mirror_ds->id_node; struct inode *ino = lseg->pls_layout->plh_inode; struct nfs_server *s = NFS_SERVER(ino); unsigned int max_payload; int status; - if (!ff_layout_mirror_valid(lseg, mirror, true)) { - pr_err_ratelimited("NFS: %s: No data server for offset index %d\n", - __func__, ds_idx); + if (!ff_layout_mirror_valid(lseg, mirror, true)) goto out; - } - - devid = &mirror->mirror_ds->id_node; - if (ff_layout_test_devid_unavailable(devid)) - goto out_fail; ds = mirror->mirror_ds->ds; /* matching smp_wmb() in _nfs4_pnfs_v3/4_ds_connect */ @@ -452,7 +445,6 @@ nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, u32 ds_idx, mirror->mirror_ds->ds_versions[0].wsize = max_payload; goto out; } -out_fail: ff_layout_track_ds_error(FF_LAYOUT_FROM_HDR(lseg->pls_layout), mirror, lseg->pls_range.offset, lseg->pls_range.length, NFS4ERR_NXIO, From patchwork Fri Mar 1 19:24:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835971 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DDBD8139A for ; Fri, 1 Mar 2019 19:27:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CD2822FC06 for ; Fri, 1 Mar 2019 19:27:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BE1B82FD25; Fri, 1 Mar 2019 19:27:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6A3E02FC06 for ; Fri, 1 Mar 2019 19:27:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725999AbfCAT1C (ORCPT ); Fri, 1 Mar 2019 14:27:02 -0500 Received: from mail-yw1-f65.google.com ([209.85.161.65]:41027 "EHLO mail-yw1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726034AbfCAT1C (ORCPT ); Fri, 1 Mar 2019 14:27:02 -0500 Received: by mail-yw1-f65.google.com with SMTP id q128so14917336ywg.8 for ; Fri, 01 Mar 2019 11:27:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=3FjYAgyQDPnJRMFDf7E+6u7e/wnIaQzb/2/jz4gy8nA=; b=mhWYDS4SCmC+x/+9i27lzPC//FnM2GjEnQGh53ods+Bh1jUBIIUubpu2r0Z0OqAi8C g5W2jNG410xoloG9rNr6rBfX9supfutY0J1xCYnXfIfdgyHTnoKdL6t7CI48syyub6bl JzwOt92HMhUGzFq5bnJmwiYbAcsygrGfa3SdpnyINPB03ot4BImoMJ6PVfv0KlRXKkuT Ho0DTko/YIXukfUC91wkPG1V7DLfbGEsaqUk3k4yUcbQ3DbYeJt4tJK4cPlJs0WhaZNx i/GsIcAc7eo8xFQ4yE6r3WQfAhccat+/6kV1xkmNDffaBEExTYHeJH4OCzbYoZwPAQO+ iJAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3FjYAgyQDPnJRMFDf7E+6u7e/wnIaQzb/2/jz4gy8nA=; b=o0ih2J+4TMRre2WW1YsHQr/XS6W44l6ne5M0xHXNgJBEYVwLY5lEf8PPUDiSWTqEpp eT7LqG+iNOzMADI/P4JSk06Jha54NLPSctx1xe72OUH+N3+QJSKO82mIajqdf4ghoRSZ RPVF+8ZH6bnDluUxdFx/kfxzeF2N/sehI3VLLim+e8+K1kTpO2QVBq9cFtMXotuRVkJP rKKEi399WQziS5D/6jfsc9ueFBDJWa/4SrRVMKM3byBTJxlYZDYRKtL+XstxsfEE6XwW nceUrDliyk/VP+tIa5Jq/HIYLESpAQySaab0aAYk/zucy883Q94PDsp4M7uv017uPkgr EAtA== X-Gm-Message-State: APjAAAUGPJwfrVgCG4b3+IBX3cjDcfaVrgZ6GxJQl0n1ciMUmyDEGWTB FiDXHZqmnPe30t/o8ynoYB/QMnI= X-Google-Smtp-Source: APXvYqwFl7YM0buxCJylPTDViOMLTiYkP4xxr8bJEWJ1jVLPNG/9Heub8NlcJG5pyLx2xq5FHWqOmw== X-Received: by 2002:a81:9907:: with SMTP id q7mr4804342ywg.81.1551468421160; Fri, 01 Mar 2019 11:27:01 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.27.00 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:27:00 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 09/19] NFS/flexfiles: Avoid unnecessary layout invalidations Date: Fri, 1 Mar 2019 14:24:45 -0500 Message-Id: <20190301192455.104943-10-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-9-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> <20190301192455.104943-5-trond.myklebust@hammerspace.com> <20190301192455.104943-6-trond.myklebust@hammerspace.com> <20190301192455.104943-7-trond.myklebust@hammerspace.com> <20190301192455.104943-8-trond.myklebust@hammerspace.com> <20190301192455.104943-9-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In ff_layout_mirror_valid() we may not want to invalidate the layout segment despite the call to GETDEVICEINFO failing. The reason is that a read may still be able to make progress on another mirror. So instead we let the caller (in this case nfs4_ff_layout_prepare_ds()) decide whether or not it needs to invalidate. Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayoutdev.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c index e16ddf2d4768..9d56926f4845 100644 --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c @@ -196,7 +196,7 @@ static bool ff_layout_mirror_valid(struct pnfs_layout_segment *lseg, struct nfs4_ff_layout_mirror *mirror, bool create) { - if (mirror == NULL || IS_ERR(mirror->mirror_ds)) + if (mirror == NULL) goto outerr; if (mirror->mirror_ds == NULL) { if (create) { @@ -229,7 +229,6 @@ static bool ff_layout_mirror_valid(struct pnfs_layout_segment *lseg, } return true; outerr: - pnfs_error_mark_layout_for_return(lseg->pls_layout->plh_inode, lseg); return false; } @@ -418,7 +417,7 @@ nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, int status; if (!ff_layout_mirror_valid(lseg, mirror, true)) - goto out; + goto noconnect; ds = mirror->mirror_ds->ds; /* matching smp_wmb() in _nfs4_pnfs_v3/4_ds_connect */ @@ -445,6 +444,7 @@ nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, mirror->mirror_ds->ds_versions[0].wsize = max_payload; goto out; } +noconnect: ff_layout_track_ds_error(FF_LAYOUT_FROM_HDR(lseg->pls_layout), mirror, lseg->pls_range.offset, lseg->pls_range.length, NFS4ERR_NXIO, From patchwork Fri Mar 1 19:24:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835975 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6C731139A for ; Fri, 1 Mar 2019 19:27:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5E0762FC06 for ; Fri, 1 Mar 2019 19:27:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 524D32FCDF; Fri, 1 Mar 2019 19:27:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F2A352FC06 for ; Fri, 1 Mar 2019 19:27:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726051AbfCAT1E (ORCPT ); Fri, 1 Mar 2019 14:27:04 -0500 Received: from mail-yw1-f68.google.com ([209.85.161.68]:36151 "EHLO mail-yw1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726042AbfCAT1D (ORCPT ); Fri, 1 Mar 2019 14:27:03 -0500 Received: by mail-yw1-f68.google.com with SMTP id 189so14929700ywi.3 for ; Fri, 01 Mar 2019 11:27:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=8oVymjydCnvwUKTWUbAQtDva4shwTB1aXlONT6b+AXg=; b=pfjAlTiDHTADSj5n6HZM675l+QOYXeYomroFoj227ao2knVT0mS0ljMT/vw9vxDKdM nZ7JHA/KLJvEhtU0nEWOC5JEXl7m5qwKcYSBiphvi/4CA+aFgEDzI6yuRVY3/+1GnmBX 0DuWDoNNiSedIEfOPz5XdB4D6ajmPvrHyM/9F4f2Gm2JceC+qg3OPpEyCddmtrq8f0x0 AkS93LzB2hCMW3b9NmtAQfIxehB7HqYdX8WKI7YvydGypV3aIC/5NT2StE8XWIprst0d WEB6zWPuxt2mxGsDBUvpbyE3TWs6F2acdDaoMU9hXULdycttaC73HZeGO9JpmuliO6mL qeIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8oVymjydCnvwUKTWUbAQtDva4shwTB1aXlONT6b+AXg=; b=mCIqw4sH1aX+lgJjUvoceF1wkU+Tcd9GatIFDCH6XvuM/z8riqApi+2NxiULi7zTNR GlVrH1UjP0vfyfb/ewF7UO0NVyHSxDG0wRZYqBBypqfC4/nVrIlKpquvheuTgKOrB92v ltRY4BvxPzn11uTxIg7nY/IBgdgRT7qQkAsur8DYpO4ZQ6dAoPIIjZ4y8C9eMq6kNnY6 Py3SAfzZdFltuoTCqJo1GbZTWIhgz5pv+MrDjF8X+Zv4SBFYQAuAGcaMSyjHnGSpxDWS EUvfDfC/7bKTp+TvG8mgd8KsUAxt50oh5IayRAzo6CyvywU58b0sdHFWrA/wAuBZRUkL Y6/g== X-Gm-Message-State: APjAAAVJs63Xck5tT28ek10e0cXJJhvyCLAHnU9Pj7CSvs6QqnqYKxx6 kWay53tDzLNA0HEySGfFKoJz6Mk= X-Google-Smtp-Source: APXvYqypDTxZjxLSJvEiUQyCEI1wRzxc9I2eLW9/RmV+xMXJPdxnLgvMwNYL+4gMFxrjkaqB1ulnOg== X-Received: by 2002:a81:100a:: with SMTP id 10mr5019708ywq.341.1551468421976; Fri, 01 Mar 2019 11:27:01 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.27.01 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:27:01 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 10/19] NFS/flexfiles: Remove bogus checks for invalid deviceids Date: Fri, 1 Mar 2019 14:24:46 -0500 Message-Id: <20190301192455.104943-11-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-10-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> <20190301192455.104943-5-trond.myklebust@hammerspace.com> <20190301192455.104943-6-trond.myklebust@hammerspace.com> <20190301192455.104943-7-trond.myklebust@hammerspace.com> <20190301192455.104943-8-trond.myklebust@hammerspace.com> <20190301192455.104943-9-trond.myklebust@hammerspace.com> <20190301192455.104943-10-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP We already check the deviceids before we start the RPC call. Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.c | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index 4cf6fb5df3c8..c4a9f7f2f0e4 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -932,8 +932,6 @@ ff_layout_pg_init_write(struct nfs_pageio_descriptor *pgio, for (i = 0; i < pgio->pg_mirror_count; i++) { mirror = FF_LAYOUT_COMP(pgio->pg_lseg, i); - if (ff_layout_test_devid_unavailable(&mirror->mirror_ds->id_node)) - continue; ds = nfs4_ff_layout_prepare_ds(pgio->pg_lseg, mirror, true); if (!ds) { if (!ff_layout_no_fallback_to_mds(pgio->pg_lseg)) @@ -1306,15 +1304,6 @@ ff_layout_set_layoutcommit(struct inode *inode, (unsigned long long) NFS_I(inode)->layout->plh_lwb); } -static bool -ff_layout_device_unavailable(struct pnfs_layout_segment *lseg, int idx) -{ - /* No mirroring for now */ - struct nfs4_deviceid_node *node = FF_LAYOUT_DEVID_NODE(lseg, idx); - - return ff_layout_test_devid_unavailable(node); -} - static void ff_layout_read_record_layoutstats_start(struct rpc_task *task, struct nfs_pgio_header *hdr) { @@ -1345,10 +1334,6 @@ static int ff_layout_read_prepare_common(struct rpc_task *task, rpc_exit(task, -EIO); return -EIO; } - if (ff_layout_device_unavailable(hdr->lseg, hdr->pgio_mirror_idx)) { - rpc_exit(task, -EHOSTDOWN); - return -EAGAIN; - } ff_layout_read_record_layoutstats_start(task, hdr); return 0; @@ -1537,11 +1522,6 @@ static int ff_layout_write_prepare_common(struct rpc_task *task, return -EIO; } - if (ff_layout_device_unavailable(hdr->lseg, hdr->pgio_mirror_idx)) { - rpc_exit(task, -EHOSTDOWN); - return -EAGAIN; - } - ff_layout_write_record_layoutstats_start(task, hdr); return 0; } From patchwork Fri Mar 1 19:24:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835977 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1CA3A1805 for ; Fri, 1 Mar 2019 19:27:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0DEC22FC06 for ; Fri, 1 Mar 2019 19:27:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 026912FD25; Fri, 1 Mar 2019 19:27:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8E5FF2FC06 for ; Fri, 1 Mar 2019 19:27:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726053AbfCAT1E (ORCPT ); Fri, 1 Mar 2019 14:27:04 -0500 Received: from mail-yw1-f65.google.com ([209.85.161.65]:33963 "EHLO mail-yw1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725905AbfCAT1E (ORCPT ); Fri, 1 Mar 2019 14:27:04 -0500 Received: by mail-yw1-f65.google.com with SMTP id u205so14959694ywe.1 for ; Fri, 01 Mar 2019 11:27:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=CfIgfRwB62LaSh21CxfRf+KU59A5noof7N7czZV+o9U=; b=neans00qPE/wK8E1yjiKMsEqx0L5Le1c7I9VQTZRMoTa1gqaX3p8pT9KMStaWNFDSc l8Bi7FVE6uZVVCTFX+87zut1tmUWgRclkWdhJJ64AvbDJCUHclFJKbHIjsJfVNUaGIIT NDnMVs55aj23VWwxf1FLa+IEbiowZ/pAFRPZajrnv0MqAzwb6ijbwCAVbOhaDXjuwOO0 N9bP4f0WtU+w4KTKL/6Fn3YyHFBEGLpYJfj+UyReyapQ6x2LkTOLDZLuLDy3BuMJBQqv xQyohT7rmp12QH5hhrihtWpb7wSEOGHKBKEf7X7cGC38+mx+Z4cnROS+LEEGvUD+2vi4 2T/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CfIgfRwB62LaSh21CxfRf+KU59A5noof7N7czZV+o9U=; b=V7QMnCtwY1lAbTcBbuOZE2Sy3RjB0kyTHaMYpI07RDbH9MBNz6YQZG0v1+hmOiwLAe eujuNvn7WLWUSSvClHmLQC4nbsKFsJQvrjsXBCc6dzdaWsBjRAzN2Sde+dWOy+2Bs7C7 jWAXmPTKsUjV/KT6qgnLCaBeADFXKV+2kFMrUmoQe4Ed/nWuvfPjkXX233ifOC5mUQzc WhCe+5ZIrcCq/6QY3vGVtTp3PjeZMb7IIezTmgR94Si78k/Rpq5cioDFwe11NUeUqpLW JfBGtob4W02dIbhFVqqpZw8Q6TMe5kFdQo9qC4v+EQwGwi3rdqt94epV7Rj8wugUGNI2 lRJg== X-Gm-Message-State: APjAAAW6kAwXHY+cW8Mp28lA/CAdyLhN4JaP/w+r3anSZ5t84BWm5uiJ m54mGNkqOaLkt2UUeb3fgy8Kt3M= X-Google-Smtp-Source: APXvYqxf95OAeWkMkFlOiAUHNqllqPL3lX+RJ9vaN7JmCbYwhpzSyzVuCkjL63TSq6IWGBqbuHzZNw== X-Received: by 2002:a81:9b44:: with SMTP id s65mr5129840ywg.483.1551468422800; Fri, 01 Mar 2019 11:27:02 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.27.02 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:27:02 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 11/19] NFS/flexfiles: Don't invalidate DS deviceids for being unresponsive Date: Fri, 1 Mar 2019 14:24:47 -0500 Message-Id: <20190301192455.104943-12-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-11-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> <20190301192455.104943-5-trond.myklebust@hammerspace.com> <20190301192455.104943-6-trond.myklebust@hammerspace.com> <20190301192455.104943-7-trond.myklebust@hammerspace.com> <20190301192455.104943-8-trond.myklebust@hammerspace.com> <20190301192455.104943-9-trond.myklebust@hammerspace.com> <20190301192455.104943-10-trond.myklebust@hammerspace.com> <20190301192455.104943-11-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP If the DS is unresponsive, we want to just mark it as such, while reporting the errors. If the server later returns the same deviceid in a new layout, then we don't want to have to look it up again. Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.h | 18 ------------------ fs/nfs/flexfilelayout/flexfilelayoutdev.c | 6 +++--- 2 files changed, 3 insertions(+), 21 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.h b/fs/nfs/flexfilelayout/flexfilelayout.h index 93508112486a..2e3c606625ef 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.h +++ b/fs/nfs/flexfilelayout/flexfilelayout.h @@ -180,24 +180,6 @@ ff_layout_no_read_on_rw(struct pnfs_layout_segment *lseg) return FF_LAYOUT_LSEG(lseg)->flags & FF_FLAGS_NO_READ_IO; } -static inline bool -ff_layout_test_devid_unavailable(struct nfs4_deviceid_node *node) -{ - /* - * Flexfiles should never mark a DS unavailable, but if it does - * print a (ratelimited) warning as this can affect performance. - */ - if (nfs4_test_deviceid_unavailable(node)) { - u32 *p = (u32 *)node->deviceid.data; - - pr_warn_ratelimited("NFS: flexfiles layout referencing an " - "unavailable device [%x%x%x%x]\n", - p[0], p[1], p[2], p[3]); - return true; - } - return false; -} - static inline int nfs4_ff_layout_ds_version(struct pnfs_layout_segment *lseg, u32 ds_idx) { diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c index 9d56926f4845..a52b31417fab 100644 --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c @@ -186,7 +186,7 @@ nfs4_ff_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev, static void ff_layout_mark_devid_invalid(struct pnfs_layout_segment *lseg, struct nfs4_deviceid_node *devid) { - nfs4_delete_deviceid(devid->ld, devid->nfs_client, &devid->deviceid); + nfs4_mark_deviceid_unavailable(devid); if (!ff_layout_has_available_ds(lseg)) pnfs_error_mark_layout_for_return(lseg->pls_layout->plh_inode, lseg); @@ -606,7 +606,7 @@ static bool ff_read_layout_has_available_ds(struct pnfs_layout_segment *lseg) if (IS_ERR(mirror->mirror_ds)) continue; devid = &mirror->mirror_ds->id_node; - if (!ff_layout_test_devid_unavailable(devid)) + if (!nfs4_test_deviceid_unavailable(devid)) return true; } } @@ -627,7 +627,7 @@ static bool ff_rw_layout_has_available_ds(struct pnfs_layout_segment *lseg) if (!mirror->mirror_ds) continue; devid = &mirror->mirror_ds->id_node; - if (ff_layout_test_devid_unavailable(devid)) + if (nfs4_test_deviceid_unavailable(devid)) return false; } From patchwork Fri Mar 1 19:24:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835979 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 066C01669 for ; Fri, 1 Mar 2019 19:27:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EBDE42FC06 for ; Fri, 1 Mar 2019 19:27:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E06322FCDF; Fri, 1 Mar 2019 19:27:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5CB432FC06 for ; Fri, 1 Mar 2019 19:27:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726060AbfCAT1F (ORCPT ); Fri, 1 Mar 2019 14:27:05 -0500 Received: from mail-yw1-f52.google.com ([209.85.161.52]:38209 "EHLO mail-yw1-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726042AbfCAT1F (ORCPT ); Fri, 1 Mar 2019 14:27:05 -0500 Received: by mail-yw1-f52.google.com with SMTP id o184so14923708ywo.5 for ; Fri, 01 Mar 2019 11:27:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=lPqR62dyufqTiPT/jgz/UvuDnZtMhQ54p2fSnxv6jKs=; b=eiFgwA3B6EiOrtdtV6K/ZGSOi5LxTNYIKhbb/T7A0fLaAdV0n3YMGlWWkx8CnkOnRN QY/AULSZbdCGsGqCqYz4ZDiTHVPBdCF2lXGfEU4+alrVEpEAcOpWZwKXJfwrDrUZP8oJ xzfgoTj4zKFYnjoD8TExjhpdGhHLF/qqw6hGZiYaJNrDxczXiKJrQHwMzwZdJ8NM2BMK UXkS6YG3AmXwYJ/Y+lXErO+aOfMLQuBH2FHWGytAOu7L6tbyTC42tQ/Qc1paRl46/fXq zFda9+ecT6QNQwZ+CTeMB0T6QgxKitVN2LWRS9IIUksxJoFRyDnqaUPtctq8wvo38CQR HgIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lPqR62dyufqTiPT/jgz/UvuDnZtMhQ54p2fSnxv6jKs=; b=JzBxJtCfvN3c/5+nnvKuRu3+R4yuJ3t7yZ7b3gejeZaZ0i3a4JiC4qhV27KhcifYDC hBEW5Im1ziVK3tatrN5s1tWrU63KfNPNrHqOVtOOU8f+we6wRKDTk/IxLdOLBwYN7M7Z pSHD6eTAaFaVnhdM1eDLOS5ZtheL/+Mrzem95DYv3w61KDcgBtoo2RPo7vQ5HSeAjx9K oEf106IeyAbLJ1MvF3lIrNsU8kc2xh0K+dkESyZj3f5FS5A/AApHu5A2RYayJ/GECgOm R/lOFSc2Ipj7+c/YSVnwkHlQ11YaQ1nRfJXTB7+8zLKeHwywcGeuJDZ9Dh5b0DXdlNhe tjvQ== X-Gm-Message-State: APjAAAV2ULdZqhGPZEzz3oW5j3x14aWBnaqhZN11Y7O5ipFI9OQa7V37 YFVf3oRiCxPONWH2z5JTHb8GWTo= X-Google-Smtp-Source: APXvYqx87LwooGbcRbXFXi+EUC+adKaBN5+fbJfDfOhWO7PiwEkPCtfpxUoWojhH4buMc/NkskEzVA== X-Received: by 2002:a81:3c14:: with SMTP id j20mr4770526ywa.324.1551468423622; Fri, 01 Mar 2019 11:27:03 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.27.02 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:27:03 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 12/19] NFS/flexfiles: Speed up read failover when DSes are down Date: Fri, 1 Mar 2019 14:24:48 -0500 Message-Id: <20190301192455.104943-13-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-12-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> <20190301192455.104943-5-trond.myklebust@hammerspace.com> <20190301192455.104943-6-trond.myklebust@hammerspace.com> <20190301192455.104943-7-trond.myklebust@hammerspace.com> <20190301192455.104943-8-trond.myklebust@hammerspace.com> <20190301192455.104943-9-trond.myklebust@hammerspace.com> <20190301192455.104943-10-trond.myklebust@hammerspace.com> <20190301192455.104943-11-trond.myklebust@hammerspace.com> <20190301192455.104943-12-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP If we notice that a DS may be down, we should attempt to read from the other mirrors first before we go back to retry the dead DS. Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.c | 74 +++++++++++++++++++++----- fs/nfs/pnfs.h | 1 + fs/nfs/pnfs_dev.c | 10 ++++ 3 files changed, 73 insertions(+), 12 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index c4a9f7f2f0e4..ba5ed07eac92 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -788,10 +788,28 @@ ff_layout_alloc_commit_info(struct pnfs_layout_segment *lseg, } } +static void +ff_layout_mark_ds_unreachable(struct pnfs_layout_segment *lseg, int idx) +{ + struct nfs4_deviceid_node *devid = FF_LAYOUT_DEVID_NODE(lseg, idx); + + if (devid) + nfs4_mark_deviceid_unavailable(devid); +} + +static void +ff_layout_mark_ds_reachable(struct pnfs_layout_segment *lseg, int idx) +{ + struct nfs4_deviceid_node *devid = FF_LAYOUT_DEVID_NODE(lseg, idx); + + if (devid) + nfs4_mark_deviceid_available(devid); +} + static struct nfs4_pnfs_ds * -ff_layout_choose_best_ds_for_read(struct pnfs_layout_segment *lseg, - int start_idx, - int *best_idx) +ff_layout_choose_ds_for_read(struct pnfs_layout_segment *lseg, + int start_idx, int *best_idx, + bool check_device) { struct nfs4_ff_layout_segment *fls = FF_LAYOUT_LSEG(lseg); struct nfs4_ff_layout_mirror *mirror; @@ -799,25 +817,53 @@ ff_layout_choose_best_ds_for_read(struct pnfs_layout_segment *lseg, bool fail_return = false; int idx; - /* mirrors are sorted by efficiency */ + /* mirrors are initially sorted by efficiency */ for (idx = start_idx; idx < fls->mirror_array_cnt; idx++) { if (idx+1 == fls->mirror_array_cnt) - fail_return = true; + fail_return = !check_device; mirror = FF_LAYOUT_COMP(lseg, idx); - if (ff_layout_test_devid_unavailable(&mirror->mirror_ds->id_node)) + ds = nfs4_ff_layout_prepare_ds(lseg, mirror, fail_return); + if (!ds) continue; - ds = nfs4_ff_layout_prepare_ds(lseg, mirror, fail_return); - if (ds) { - *best_idx = idx; - return ds; - } + if (check_device && + nfs4_test_deviceid_unavailable(&mirror->mirror_ds->id_node)) + continue; + + *best_idx = idx; + return ds; } return NULL; } +static struct nfs4_pnfs_ds * +ff_layout_choose_any_ds_for_read(struct pnfs_layout_segment *lseg, + int start_idx, int *best_idx) +{ + return ff_layout_choose_ds_for_read(lseg, start_idx, best_idx, false); +} + +static struct nfs4_pnfs_ds * +ff_layout_choose_valid_ds_for_read(struct pnfs_layout_segment *lseg, + int start_idx, int *best_idx) +{ + return ff_layout_choose_ds_for_read(lseg, start_idx, best_idx, true); +} + +static struct nfs4_pnfs_ds * +ff_layout_choose_best_ds_for_read(struct pnfs_layout_segment *lseg, + int start_idx, int *best_idx) +{ + struct nfs4_pnfs_ds *ds; + + ds = ff_layout_choose_valid_ds_for_read(lseg, start_idx, best_idx); + if (ds) + return ds; + return ff_layout_choose_any_ds_for_read(lseg, start_idx, best_idx); +} + static void ff_layout_pg_get_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *req, @@ -1167,8 +1213,10 @@ static int ff_layout_async_handle_error(struct rpc_task *task, { int vers = clp->cl_nfs_mod->rpc_vers->number; - if (task->tk_status >= 0) + if (task->tk_status >= 0) { + ff_layout_mark_ds_reachable(lseg, idx); return 0; + } /* Handle the case of an invalid layout segment */ if (!pnfs_is_valid_lseg(lseg)) @@ -1231,6 +1279,8 @@ static void ff_layout_io_track_ds_error(struct pnfs_layout_segment *lseg, err = ff_layout_track_ds_error(FF_LAYOUT_FROM_HDR(lseg->pls_layout), mirror, offset, length, status, opnum, GFP_NOIO); + if (status == NFS4ERR_NXIO) + ff_layout_mark_ds_unreachable(lseg, idx); pnfs_error_mark_layout_for_return(lseg->pls_layout->plh_inode, lseg); dprintk("%s: err %d op %d status %u\n", __func__, err, opnum, status); } diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h index 56659ccce1d8..c0420b979d88 100644 --- a/fs/nfs/pnfs.h +++ b/fs/nfs/pnfs.h @@ -350,6 +350,7 @@ void nfs4_delete_deviceid(const struct pnfs_layoutdriver_type *, const struct nf void nfs4_init_deviceid_node(struct nfs4_deviceid_node *, struct nfs_server *, const struct nfs4_deviceid *); bool nfs4_put_deviceid_node(struct nfs4_deviceid_node *); +void nfs4_mark_deviceid_available(struct nfs4_deviceid_node *node); void nfs4_mark_deviceid_unavailable(struct nfs4_deviceid_node *node); bool nfs4_test_deviceid_unavailable(struct nfs4_deviceid_node *node); void nfs4_deviceid_purge_client(const struct nfs_client *); diff --git a/fs/nfs/pnfs_dev.c b/fs/nfs/pnfs_dev.c index ec6b607ff1d7..537b80d693f1 100644 --- a/fs/nfs/pnfs_dev.c +++ b/fs/nfs/pnfs_dev.c @@ -283,6 +283,16 @@ nfs4_put_deviceid_node(struct nfs4_deviceid_node *d) } EXPORT_SYMBOL_GPL(nfs4_put_deviceid_node); +void +nfs4_mark_deviceid_available(struct nfs4_deviceid_node *node) +{ + if (test_bit(NFS_DEVICEID_UNAVAILABLE, &node->flags)) { + clear_bit(NFS_DEVICEID_UNAVAILABLE, &node->flags); + smp_mb__after_atomic(); + } +} +EXPORT_SYMBOL_GPL(nfs4_mark_deviceid_available); + void nfs4_mark_deviceid_unavailable(struct nfs4_deviceid_node *node) { From patchwork Fri Mar 1 19:24:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835981 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D06B21669 for ; Fri, 1 Mar 2019 19:27:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C1DA72FC06 for ; Fri, 1 Mar 2019 19:27:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B63D72FCDF; Fri, 1 Mar 2019 19:27:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 58F802FC06 for ; Fri, 1 Mar 2019 19:27:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726066AbfCAT1G (ORCPT ); Fri, 1 Mar 2019 14:27:06 -0500 Received: from mail-yw1-f66.google.com ([209.85.161.66]:40604 "EHLO mail-yw1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725905AbfCAT1G (ORCPT ); Fri, 1 Mar 2019 14:27:06 -0500 Received: by mail-yw1-f66.google.com with SMTP id c67so14912488ywa.7 for ; Fri, 01 Mar 2019 11:27:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=mEk4JxFqISaaaKHq07GPD1V46Lyq2t82EWuia0B5nkc=; b=iW2s+SdEqTxed/avLzp6uiiHHH+ZI48Grz6Xj7cpRuuc3FyeJI6nj8Yn2t30ct9jQz 5GYDsAkmPgApEemyngtV9C8UniFPQvkmmaTjYDKZBqJP15FtdkWV/JB3OZB8d74/Wf/5 KcsVgPI6m+8Ik7FzYlfFuANUkH0CG+5b3UrJvEj9JOdr7Fsjz3E/L9oYepA1nSkjiUw+ ZFtyxEMtMrpr1JKC81ufZQ+WSQ2CJvtoFdjaQZa9qlO7j5K/wIA+jbLHds9xigEUqK8I qaNwQbplVBWJaxQyg3r3EE4t4t6n6jQsD0PCWZkzjLUPKoIkM9zLZ2k7y1SUjore/piY i+mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mEk4JxFqISaaaKHq07GPD1V46Lyq2t82EWuia0B5nkc=; b=QEZMApKcfs2QlX3xNjBzSDpA9zo7K2RJ+kogzDXrnmbwd/oaT/kngr6rMX4VFimqos g36uPrfg9R/tEkPNyAZaRMva5ZnGCZeL2PBkozcIMxP4+VOZ/JEuLjKLx75KXj7DDuy+ xsjyE9fCZVlgTQ9wP8tXL2HHAsI+WKWMAiHsnlHZamKzqPDuwfG75EG7QmUXIfR+4Qja p8K6XV4RyPrpNw0QiCaBQ5+XmPsijC+L/BKkC2cDA9w17ZogAheI4REP8wbZr+bBxRAk 8pcTdPxzim05dyMNB1LqnIZw5Lq0+b7DcTNWs7U9FW4WzCiLY/TFSaSnd0qdEQeZ1RG9 Dt1w== X-Gm-Message-State: APjAAAXiDtBZUAAhxvvtPutg02mzoWWn4h9Di8sO1w/EMYV4O7A3LEwF FjrAGmFTq1ARfXFJ6kof6C6JGT4= X-Google-Smtp-Source: APXvYqwIhVWvjx54DUmcyPOcAd6dGhITc5YtU818j9cgZKVUKfEzIjT94Lbg6T1x8sarskSbas3UmA== X-Received: by 2002:a0d:edc3:: with SMTP id w186mr5049795ywe.301.1551468424419; Fri, 01 Mar 2019 11:27:04 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.27.03 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:27:03 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 13/19] NFS/flexfiles: Simplify nfs4_ff_layout_select_ds_fh() Date: Fri, 1 Mar 2019 14:24:49 -0500 Message-Id: <20190301192455.104943-14-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-13-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> <20190301192455.104943-5-trond.myklebust@hammerspace.com> <20190301192455.104943-6-trond.myklebust@hammerspace.com> <20190301192455.104943-7-trond.myklebust@hammerspace.com> <20190301192455.104943-8-trond.myklebust@hammerspace.com> <20190301192455.104943-9-trond.myklebust@hammerspace.com> <20190301192455.104943-10-trond.myklebust@hammerspace.com> <20190301192455.104943-11-trond.myklebust@hammerspace.com> <20190301192455.104943-12-trond.myklebust@hammerspace.com> <20190301192455.104943-13-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Pass in a pointer to the mirror rather than having to retrieve it from the array and then verify the resulting pointer. Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.c | 4 ++-- fs/nfs/flexfilelayout/flexfilelayout.h | 2 +- fs/nfs/flexfilelayout/flexfilelayoutdev.c | 15 ++------------- 3 files changed, 5 insertions(+), 16 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index ba5ed07eac92..95afde994723 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -1795,7 +1795,7 @@ ff_layout_read_pagelist(struct nfs_pgio_header *hdr) hdr->pgio_done_cb = ff_layout_read_done_cb; refcount_inc(&ds->ds_clp->cl_count); hdr->ds_clp = ds->ds_clp; - fh = nfs4_ff_layout_select_ds_fh(lseg, idx); + fh = nfs4_ff_layout_select_ds_fh(mirror); if (fh) hdr->args.fh = fh; @@ -1863,7 +1863,7 @@ ff_layout_write_pagelist(struct nfs_pgio_header *hdr, int sync) refcount_inc(&ds->ds_clp->cl_count); hdr->ds_clp = ds->ds_clp; hdr->ds_commit_idx = idx; - fh = nfs4_ff_layout_select_ds_fh(lseg, idx); + fh = nfs4_ff_layout_select_ds_fh(mirror); if (fh) hdr->args.fh = fh; diff --git a/fs/nfs/flexfilelayout/flexfilelayout.h b/fs/nfs/flexfilelayout/flexfilelayout.h index 2e3c606625ef..935cba942834 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.h +++ b/fs/nfs/flexfilelayout/flexfilelayout.h @@ -203,7 +203,7 @@ unsigned int ff_layout_fetch_ds_ioerr(struct pnfs_layout_hdr *lo, struct list_head *head, unsigned int maxnum); struct nfs_fh * -nfs4_ff_layout_select_ds_fh(struct pnfs_layout_segment *lseg, u32 mirror_idx); +nfs4_ff_layout_select_ds_fh(struct nfs4_ff_layout_mirror *mirror); int nfs4_ff_layout_select_ds_stateid(struct pnfs_layout_segment *lseg, u32 mirror_idx, diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c index a52b31417fab..631976f2bd8e 100644 --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c @@ -351,21 +351,10 @@ ff_layout_get_mirror_cred(struct nfs4_ff_layout_mirror *mirror, u32 iomode) } struct nfs_fh * -nfs4_ff_layout_select_ds_fh(struct pnfs_layout_segment *lseg, u32 mirror_idx) +nfs4_ff_layout_select_ds_fh(struct nfs4_ff_layout_mirror *mirror) { - struct nfs4_ff_layout_mirror *mirror = FF_LAYOUT_COMP(lseg, mirror_idx); - struct nfs_fh *fh = NULL; - - if (!ff_layout_mirror_valid(lseg, mirror, false)) { - pr_err_ratelimited("NFS: %s: No data server for mirror offset index %d\n", - __func__, mirror_idx); - goto out; - } - /* FIXME: For now assume there is only 1 version available for the DS */ - fh = &mirror->fh_versions[0]; -out: - return fh; + return &mirror->fh_versions[0]; } int From patchwork Fri Mar 1 19:24:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835983 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 72787139A for ; Fri, 1 Mar 2019 19:27:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6361D2FC06 for ; Fri, 1 Mar 2019 19:27:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 57E622FCDF; Fri, 1 Mar 2019 19:27:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EAC5C2FC06 for ; Fri, 1 Mar 2019 19:27:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725905AbfCAT1H (ORCPT ); Fri, 1 Mar 2019 14:27:07 -0500 Received: from mail-yw1-f65.google.com ([209.85.161.65]:38428 "EHLO mail-yw1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726042AbfCAT1G (ORCPT ); Fri, 1 Mar 2019 14:27:06 -0500 Received: by mail-yw1-f65.google.com with SMTP id o184so14923779ywo.5 for ; Fri, 01 Mar 2019 11:27:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=YN3L/E7k+5YM5PC0HJXk+0h3eD43DsFTXy9tfol5FFY=; b=IcnxP9/ZiQfgdbrkpiT+ekKmznjLq9bdv7FeqntUDiObXUfhV3c177rnQn2+ZtZXl0 nBFeWkf9Gr6lu0gJpYvD+JK4Juh157NjsOJn0k/F+qFRuB5hVmgBZKXz3kuNJP4GhzMJ an4rK+ev4qK+ZltozbCKC3A8V/vW+zjo2vu41h6Yv4qbC5JrYC9r0b9QQadKFTLc8QUl Gtrj/bTyyBrf6h4r21lLaKnSdYbIwe/Di0olx+MjFv3DzAG0VDltqf8FrSVafKUGG5uQ u4LTAkEKEooTq9OVukV1roWruY/8QyQ4GIfs1CmpWO9JzDJOs3t7V1yUA54pCLsFHtiM G9og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YN3L/E7k+5YM5PC0HJXk+0h3eD43DsFTXy9tfol5FFY=; b=t15uTslfCkB9FvgWWodGMrbsMMdLfYFB76IEpqFhV7Sy+MitvViI5VGM0xiuo8/Y87 ulAFv+ve62nv44ORwiQOWTBiCCyYb1A/Xg5xMlJseXW4sQgM33/dAHoZhy+BZes3KdpT vclChkkVvJGtqdipkdMdTMCg/G/xgvFpgY+gvLu3QP/KKKwVF8AGwfVj9p2cpkkcWozV WGEZux5Kq/n9Q+T99rd+RBk4TUCJXDXk8kFqm8jaDWir9g0vKLueY7POy8z/o79/6yf2 ixvDQWg7c1ZUdO0YA2YPTXrMwSsgglQF5WA0SAy2u0xvOH71mTbXsIsy7WAl3oTg7fjc T1Yg== X-Gm-Message-State: APjAAAW3mKIX9guzY0xr5zRzJiOVS7eRMY2d2pBdDCQ84mS3hkpnm/df A//gqUySNRFgW9pPRsoqDE2bviQ= X-Google-Smtp-Source: APXvYqyyoXSXtDQ2JN7GUbZ23kg26Anu7sCizJmxVrs9j3xehFJsaL05ovpqUooib9eg4JLULHc+bQ== X-Received: by 2002:a81:c87:: with SMTP id 129mr4971341ywm.137.1551468425248; Fri, 01 Mar 2019 11:27:05 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.27.04 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:27:04 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 14/19] NFS/flexfiles: Simplify nfs4_ff_find_or_create_ds_client() Date: Fri, 1 Mar 2019 14:24:50 -0500 Message-Id: <20190301192455.104943-15-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-14-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> <20190301192455.104943-5-trond.myklebust@hammerspace.com> <20190301192455.104943-6-trond.myklebust@hammerspace.com> <20190301192455.104943-7-trond.myklebust@hammerspace.com> <20190301192455.104943-8-trond.myklebust@hammerspace.com> <20190301192455.104943-9-trond.myklebust@hammerspace.com> <20190301192455.104943-10-trond.myklebust@hammerspace.com> <20190301192455.104943-11-trond.myklebust@hammerspace.com> <20190301192455.104943-12-trond.myklebust@hammerspace.com> <20190301192455.104943-13-trond.myklebust@hammerspace.com> <20190301192455.104943-14-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Pass in a pointer to the mirror rather than forcing another array access. Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.c | 6 +++--- fs/nfs/flexfilelayout/flexfilelayout.h | 3 +-- fs/nfs/flexfilelayout/flexfilelayoutdev.c | 7 ++----- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index 95afde994723..54e4a1dabf68 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -1778,7 +1778,7 @@ ff_layout_read_pagelist(struct nfs_pgio_header *hdr) if (!ds) goto out_failed; - ds_clnt = nfs4_ff_find_or_create_ds_client(lseg, idx, ds->ds_clp, + ds_clnt = nfs4_ff_find_or_create_ds_client(mirror, ds->ds_clp, hdr->inode); if (IS_ERR(ds_clnt)) goto out_failed; @@ -1843,7 +1843,7 @@ ff_layout_write_pagelist(struct nfs_pgio_header *hdr, int sync) if (!ds) goto out_failed; - ds_clnt = nfs4_ff_find_or_create_ds_client(lseg, idx, ds->ds_clp, + ds_clnt = nfs4_ff_find_or_create_ds_client(mirror, ds->ds_clp, hdr->inode); if (IS_ERR(ds_clnt)) goto out_failed; @@ -1928,7 +1928,7 @@ static int ff_layout_initiate_commit(struct nfs_commit_data *data, int how) if (!ds) goto out_err; - ds_clnt = nfs4_ff_find_or_create_ds_client(lseg, idx, ds->ds_clp, + ds_clnt = nfs4_ff_find_or_create_ds_client(mirror, ds->ds_clp, data->inode); if (IS_ERR(ds_clnt)) goto out_err; diff --git a/fs/nfs/flexfilelayout/flexfilelayout.h b/fs/nfs/flexfilelayout/flexfilelayout.h index 935cba942834..2bda4baa655a 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.h +++ b/fs/nfs/flexfilelayout/flexfilelayout.h @@ -215,8 +215,7 @@ nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, bool fail_return); struct rpc_clnt * -nfs4_ff_find_or_create_ds_client(struct pnfs_layout_segment *lseg, - u32 ds_idx, +nfs4_ff_find_or_create_ds_client(struct nfs4_ff_layout_mirror *mirror, struct nfs_client *ds_clp, struct inode *inode); const struct cred *ff_layout_get_ds_cred(struct pnfs_layout_segment *lseg, diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c index 631976f2bd8e..0651fd1e52c3 100644 --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c @@ -465,8 +465,7 @@ ff_layout_get_ds_cred(struct pnfs_layout_segment *lseg, u32 ds_idx, /** * nfs4_ff_find_or_create_ds_client - Find or create a DS rpc client - * @lseg: pointer to layout segment - * @ds_idx: mirror index + * @mirror: pointer to the mirror * @ds_clp: nfs_client for the DS * @inode: pointer to inode * @@ -474,11 +473,9 @@ ff_layout_get_ds_cred(struct pnfs_layout_segment *lseg, u32 ds_idx, * in the nfs_client cl_ds_clients list. */ struct rpc_clnt * -nfs4_ff_find_or_create_ds_client(struct pnfs_layout_segment *lseg, u32 ds_idx, +nfs4_ff_find_or_create_ds_client(struct nfs4_ff_layout_mirror *mirror, struct nfs_client *ds_clp, struct inode *inode) { - struct nfs4_ff_layout_mirror *mirror = FF_LAYOUT_COMP(lseg, ds_idx); - switch (mirror->mirror_ds->ds_versions[0].version) { case 3: /* For NFSv3 DS, flavor is set when creating DS connections */ From patchwork Fri Mar 1 19:24:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835985 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 984081669 for ; Fri, 1 Mar 2019 19:27:09 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 89AF52FC06 for ; Fri, 1 Mar 2019 19:27:09 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7E29D2FCDF; Fri, 1 Mar 2019 19:27:09 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 07A092FC06 for ; Fri, 1 Mar 2019 19:27:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726087AbfCAT1I (ORCPT ); Fri, 1 Mar 2019 14:27:08 -0500 Received: from mail-yw1-f68.google.com ([209.85.161.68]:40610 "EHLO mail-yw1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726080AbfCAT1I (ORCPT ); Fri, 1 Mar 2019 14:27:08 -0500 Received: by mail-yw1-f68.google.com with SMTP id c67so14912550ywa.7 for ; Fri, 01 Mar 2019 11:27:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=rNo/gAWru6n9VrbYqblgw5CRH3GCCY+DGVXNC57VZlw=; b=ko7SmrILrTLME/JvMeDOB9wS14T+UVFqlflNai0Y3G7UEKooP97YgXkMpbr4/cKpjS hehwfJMIp6jKiP7wIM/gQxchKb7Aef/jDzK2IjlnRJ0FlcnUh/Vl901a8Dt+6OmeKIqk HU+oqXAT/JHzWcc0hqYRQYV0lzdWbd5mlo1Rd2y3dnKrYtcfNELdsF3xrz6W3njT253A 5MTYY3W44LvWajGRjcMpsnLdXsSQ3fK01j/o47tPZ9qS/KesE3KCD7MvaaRWKec/1bGA 2UZI9DXSnAflvIhazpylktMEzRSK23N5upYhRHyEEUJqJEXoYdHW20wrHCv9izr/dR3+ P2Ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rNo/gAWru6n9VrbYqblgw5CRH3GCCY+DGVXNC57VZlw=; b=AISNMXoYSxU/H866wxUIdjAE3il2FctLQxhsvntl5GJ02E6/e/QIYj7Cs0a/LhP8x0 zmO+8TmDgKKANuJJYU4124rIWlzZcQwvwJ2EDQBWD+WWlFOpFEX7fCli2Bd8yFhe5VXm TlsiKJa5Yxtb8iBFq+XjsPcQlYrAXXR0LNLS8jfbVAnoemRmZX+6xjS1vkPfgRKujQOs W7zhSZrbTlAcIJoUTRRCAYgRayYWk32q9pe94geFlQvJFY9xCygjW/nKN1kNubs0CoOt kGtotbLAvcrn+sRvZrnrzNJOaBHRkF3fVhPHjL5mpTCGX0oPsPl9Btx1HC3BO0EoAC3h QZAw== X-Gm-Message-State: APjAAAVje2dWnAhVqOa6/JLJqs1XXy0+cZ6Xk6UC4mvx+/OCwOprNA7k SCYr1fMlwLdL++fLoaqhHL7QEJE= X-Google-Smtp-Source: APXvYqyjTJHYXk3hnDvu5g8ecUIepTBtYpD78K4nZn081Zcpa95ITEHK7qSLBZQNObip8/5RzYkRIw== X-Received: by 2002:a81:4ed6:: with SMTP id c205mr4987025ywb.13.1551468426361; Fri, 01 Mar 2019 11:27:06 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.27.05 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:27:05 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 15/19] NFS/flexfiles: Simplify ff_layout_get_ds_cred() Date: Fri, 1 Mar 2019 14:24:51 -0500 Message-Id: <20190301192455.104943-16-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-15-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> <20190301192455.104943-5-trond.myklebust@hammerspace.com> <20190301192455.104943-6-trond.myklebust@hammerspace.com> <20190301192455.104943-7-trond.myklebust@hammerspace.com> <20190301192455.104943-8-trond.myklebust@hammerspace.com> <20190301192455.104943-9-trond.myklebust@hammerspace.com> <20190301192455.104943-10-trond.myklebust@hammerspace.com> <20190301192455.104943-11-trond.myklebust@hammerspace.com> <20190301192455.104943-12-trond.myklebust@hammerspace.com> <20190301192455.104943-13-trond.myklebust@hammerspace.com> <20190301192455.104943-14-trond.myklebust@hammerspace.com> <20190301192455.104943-15-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Pass in a pointer to the mirror rather than forcing another array access. Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.c | 6 +++--- fs/nfs/flexfilelayout/flexfilelayout.h | 5 +++-- fs/nfs/flexfilelayout/flexfilelayoutdev.c | 6 +++--- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index 54e4a1dabf68..57776de619b5 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -1783,7 +1783,7 @@ ff_layout_read_pagelist(struct nfs_pgio_header *hdr) if (IS_ERR(ds_clnt)) goto out_failed; - ds_cred = ff_layout_get_ds_cred(lseg, idx, hdr->cred); + ds_cred = ff_layout_get_ds_cred(mirror, &lseg->pls_range, hdr->cred); if (!ds_cred) goto out_failed; @@ -1848,7 +1848,7 @@ ff_layout_write_pagelist(struct nfs_pgio_header *hdr, int sync) if (IS_ERR(ds_clnt)) goto out_failed; - ds_cred = ff_layout_get_ds_cred(lseg, idx, hdr->cred); + ds_cred = ff_layout_get_ds_cred(mirror, &lseg->pls_range, hdr->cred); if (!ds_cred) goto out_failed; @@ -1933,7 +1933,7 @@ static int ff_layout_initiate_commit(struct nfs_commit_data *data, int how) if (IS_ERR(ds_clnt)) goto out_err; - ds_cred = ff_layout_get_ds_cred(lseg, idx, data->cred); + ds_cred = ff_layout_get_ds_cred(mirror, &lseg->pls_range, data->cred); if (!ds_cred) goto out_err; diff --git a/fs/nfs/flexfilelayout/flexfilelayout.h b/fs/nfs/flexfilelayout/flexfilelayout.h index 2bda4baa655a..e0b2c3deae5a 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.h +++ b/fs/nfs/flexfilelayout/flexfilelayout.h @@ -218,8 +218,9 @@ struct rpc_clnt * nfs4_ff_find_or_create_ds_client(struct nfs4_ff_layout_mirror *mirror, struct nfs_client *ds_clp, struct inode *inode); -const struct cred *ff_layout_get_ds_cred(struct pnfs_layout_segment *lseg, - u32 ds_idx, const struct cred *mdscred); +const struct cred *ff_layout_get_ds_cred(struct nfs4_ff_layout_mirror *mirror, + const struct pnfs_layout_range *range, + const struct cred *mdscred); bool ff_layout_avoid_mds_available_ds(struct pnfs_layout_segment *lseg); bool ff_layout_avoid_read_on_rw(struct pnfs_layout_segment *lseg); diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c index 0651fd1e52c3..691e8b87032b 100644 --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c @@ -447,14 +447,14 @@ nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, } const struct cred * -ff_layout_get_ds_cred(struct pnfs_layout_segment *lseg, u32 ds_idx, +ff_layout_get_ds_cred(struct nfs4_ff_layout_mirror *mirror, + const struct pnfs_layout_range *range, const struct cred *mdscred) { - struct nfs4_ff_layout_mirror *mirror = FF_LAYOUT_COMP(lseg, ds_idx); const struct cred *cred; if (mirror && !mirror->mirror_ds->ds_versions[0].tightly_coupled) { - cred = ff_layout_get_mirror_cred(mirror, lseg->pls_range.iomode); + cred = ff_layout_get_mirror_cred(mirror, range->iomode); if (!cred) cred = get_cred(mdscred); } else { From patchwork Fri Mar 1 19:24:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835987 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A63791669 for ; Fri, 1 Mar 2019 19:27:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 97DC92FC06 for ; Fri, 1 Mar 2019 19:27:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8C6FA2FCDF; Fri, 1 Mar 2019 19:27:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 374502FC06 for ; Fri, 1 Mar 2019 19:27:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726096AbfCAT1J (ORCPT ); Fri, 1 Mar 2019 14:27:09 -0500 Received: from mail-yw1-f67.google.com ([209.85.161.67]:44049 "EHLO mail-yw1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726042AbfCAT1J (ORCPT ); Fri, 1 Mar 2019 14:27:09 -0500 Received: by mail-yw1-f67.google.com with SMTP id x21so14913500ywx.11 for ; Fri, 01 Mar 2019 11:27:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Cn/abcJfxwSkjRAp/v7zc26eWtb57oX2PSsFig6Yu1s=; b=FAVC6vMJrRxCjgC6LqS3k0Kpd3PbmJfZsWlIwxfH4cnkpZnyDKhnpAOrfo9gfB/pqc Xor1Vmmhr1lpif66US0vYVBDSQqb0oeIVpIx1HVpH4wblPPTaGeZ7UGkIGFn+3nUcApg 1NnFt6RIIWRbISqfHZWh+/bDvFtoxq6kyWMtWazhp86Lt/OxxaZ6ShOXXIvsG0iz1ide YWkG7soNoiHl60ZOKeV/LmKzfAqJLcq7JfRofbLKuiGki6XMM9O6ZyIWIVk2p1QWuq+j QjGLArED3v2ga3gKdANLLCSvjNJU+6XXnnh11FvKlvoCvXa5P1FowPpQ2fzMRFM/IYp8 qu1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Cn/abcJfxwSkjRAp/v7zc26eWtb57oX2PSsFig6Yu1s=; b=Ra8y5tYyyuT9oBMvKwVSW99NQIEx6pWmb/7cIFR4SoZDoLtWYYfnp5Cu3Qcejs6MOW 29ioIguAyXkKb8a78VfJOIAarHvUbws6Z5FYPxYuklQdrNUx+W8x1wzSN6TifqwJOcGN uoTL4ttYK882NVJmHFyOvr6pxkLhUFJGYB2dxwErWSVMIX08tQtRLXC1m5tFF2YiPT0h FaB+AxWEHEx5FKRtvGnsMGTfsWr6Fi2yaiD8hGrYFRdqG+WgUwh8DqxaG/4t8YpSOH1B irFpys4QsJdQg/ySB5stWvvOesSLgRuZY+A28O9nlLftTffILQMhVS95U4oBmX3opgCK Ov+w== X-Gm-Message-State: APjAAAXsv8H0l/niN77sSP2mcyapdoxtJI2ijSny6cWUpwOkVf551Jmw b6dcbUKk4qwOQTAC+LaED7CC9wA= X-Google-Smtp-Source: APXvYqwVn9KOpQ33wmjowb7tva+QcaWB/PcaqjH06IRaToKJfIjtKwnhCw4C0nGyTwjLysRQLVYssQ== X-Received: by 2002:a25:874f:: with SMTP id e15mr5507097ybn.416.1551468427601; Fri, 01 Mar 2019 11:27:07 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.27.06 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:27:06 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 16/19] NFS/flexfile: Simplify nfs4_ff_layout_ds_version() Date: Fri, 1 Mar 2019 14:24:52 -0500 Message-Id: <20190301192455.104943-17-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-16-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> <20190301192455.104943-5-trond.myklebust@hammerspace.com> <20190301192455.104943-6-trond.myklebust@hammerspace.com> <20190301192455.104943-7-trond.myklebust@hammerspace.com> <20190301192455.104943-8-trond.myklebust@hammerspace.com> <20190301192455.104943-9-trond.myklebust@hammerspace.com> <20190301192455.104943-10-trond.myklebust@hammerspace.com> <20190301192455.104943-11-trond.myklebust@hammerspace.com> <20190301192455.104943-12-trond.myklebust@hammerspace.com> <20190301192455.104943-13-trond.myklebust@hammerspace.com> <20190301192455.104943-14-trond.myklebust@hammerspace.com> <20190301192455.104943-15-trond.myklebust@hammerspace.com> <20190301192455.104943-16-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Pass in a pointer to the mirror rather than forcing another array access. Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.c | 6 +++--- fs/nfs/flexfilelayout/flexfilelayout.h | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index 57776de619b5..94515856b357 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -1787,7 +1787,7 @@ ff_layout_read_pagelist(struct nfs_pgio_header *hdr) if (!ds_cred) goto out_failed; - vers = nfs4_ff_layout_ds_version(lseg, idx); + vers = nfs4_ff_layout_ds_version(mirror); dprintk("%s USE DS: %s cl_count %d vers %d\n", __func__, ds->ds_remotestr, refcount_read(&ds->ds_clp->cl_count), vers); @@ -1852,7 +1852,7 @@ ff_layout_write_pagelist(struct nfs_pgio_header *hdr, int sync) if (!ds_cred) goto out_failed; - vers = nfs4_ff_layout_ds_version(lseg, idx); + vers = nfs4_ff_layout_ds_version(mirror); dprintk("%s ino %lu sync %d req %zu@%llu DS: %s cl_count %d vers %d\n", __func__, hdr->inode->i_ino, sync, (size_t) hdr->args.count, @@ -1937,7 +1937,7 @@ static int ff_layout_initiate_commit(struct nfs_commit_data *data, int how) if (!ds_cred) goto out_err; - vers = nfs4_ff_layout_ds_version(lseg, idx); + vers = nfs4_ff_layout_ds_version(mirror); dprintk("%s ino %lu, how %d cl_count %d vers %d\n", __func__, data->inode->i_ino, how, refcount_read(&ds->ds_clp->cl_count), diff --git a/fs/nfs/flexfilelayout/flexfilelayout.h b/fs/nfs/flexfilelayout/flexfilelayout.h index e0b2c3deae5a..99cfe2e8f32a 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.h +++ b/fs/nfs/flexfilelayout/flexfilelayout.h @@ -181,9 +181,9 @@ ff_layout_no_read_on_rw(struct pnfs_layout_segment *lseg) } static inline int -nfs4_ff_layout_ds_version(struct pnfs_layout_segment *lseg, u32 ds_idx) +nfs4_ff_layout_ds_version(const struct nfs4_ff_layout_mirror *mirror) { - return FF_LAYOUT_COMP(lseg, ds_idx)->mirror_ds->ds_versions[0].version; + return mirror->mirror_ds->ds_versions[0].version; } struct nfs4_ff_layout_ds * From patchwork Fri Mar 1 19:24:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835989 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9387A139A for ; Fri, 1 Mar 2019 19:27:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 84DD52FC06 for ; Fri, 1 Mar 2019 19:27:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 796B52FCDF; Fri, 1 Mar 2019 19:27:11 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 16B772FC06 for ; Fri, 1 Mar 2019 19:27:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726104AbfCAT1K (ORCPT ); Fri, 1 Mar 2019 14:27:10 -0500 Received: from mail-yw1-f68.google.com ([209.85.161.68]:38950 "EHLO mail-yw1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726080AbfCAT1K (ORCPT ); Fri, 1 Mar 2019 14:27:10 -0500 Received: by mail-yw1-f68.google.com with SMTP id z191so14308419ywa.6 for ; Fri, 01 Mar 2019 11:27:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Hdgsy3TrI7HfoT2JCZUr3HGrmkiPKxRrDPzuRRUiuWU=; b=lqNMx42xT/fI1jR5THCPhDZArsnGs7L7RygXBW/O1LzT4fs2jJ5DDlLBowsIZXChVJ GLLP+qaxVlP/I7CTlWzvos8Pbsy2HPxdqWAX4pjQCpctM8PbAKY9ou/NT/YrWD4aFlSN ENB1Lsj4nX9L0UKNCZkDGuIN0XcNjUnpDsVSzUjSkrCWkD7beJwW9/TFQvr+m5URXNDV IJS8vulLBYjr9hcUD/xsaLxO+nH7689Hszq6b5TNqfXxbeYJ/+EVhKUHVwD451Z2kz5Y T0kd8EYT2rtgU+brJf9pIKP+BKPvAL2ZyZdN+kh9sr98v0gnKSX1jyoVgS+7Vm1t1wuq pkMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Hdgsy3TrI7HfoT2JCZUr3HGrmkiPKxRrDPzuRRUiuWU=; b=FmIrc1Zl0cz4+iVKHY1YZRCPNUM9tEQx0IxGlo9PgoPF1T8lVzYkqMjy1t2OWpLMD+ iIZJz3/+Up/7ln6OEJZdlSi/UBkQeuMvMK/5X0E3cSDluoeS1Gup3JH2qR7m0TIu8IWG 0ziZnAlMBYCg/Yku58fsY0lUQuV544FqRXLdlVumzMUvxoPKZcWlM7CHrefq7C9lMgHt rTkCpfR5R0/JFmkagyt/UCBRxF8U64PYOLVUrnFO33csljOiNRRyWVfQZBvPip3Nhyx4 q9DXktjmuVutEWMWgGkyIWB5QUy6Dc1MkAitXblZVF7R/giUEnCX9+3v6wXUg15Q+BMJ istQ== X-Gm-Message-State: APjAAAWsGXCVEe8GXzVCc69eXNaKEXt7oTHAQW6PZjmxdPqDOBImi7cx tEanbC66l1SHANrVfB7BvURh0Jw= X-Google-Smtp-Source: APXvYqyDATiCPBEPzWyApm0wh5Q7JilAiwrWN0EqiaSenUZJGCX4Q9TM3J9K3Iz1fJ9d8Ueml4VsMA== X-Received: by 2002:a25:c0cc:: with SMTP id c195mr5530735ybf.166.1551468428408; Fri, 01 Mar 2019 11:27:08 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.27.07 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:27:07 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 17/19] NFS/flexfile: Simplify nfs4_ff_layout_select_ds_stateid() Date: Fri, 1 Mar 2019 14:24:53 -0500 Message-Id: <20190301192455.104943-18-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-17-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> <20190301192455.104943-5-trond.myklebust@hammerspace.com> <20190301192455.104943-6-trond.myklebust@hammerspace.com> <20190301192455.104943-7-trond.myklebust@hammerspace.com> <20190301192455.104943-8-trond.myklebust@hammerspace.com> <20190301192455.104943-9-trond.myklebust@hammerspace.com> <20190301192455.104943-10-trond.myklebust@hammerspace.com> <20190301192455.104943-11-trond.myklebust@hammerspace.com> <20190301192455.104943-12-trond.myklebust@hammerspace.com> <20190301192455.104943-13-trond.myklebust@hammerspace.com> <20190301192455.104943-14-trond.myklebust@hammerspace.com> <20190301192455.104943-15-trond.myklebust@hammerspace.com> <20190301192455.104943-16-trond.myklebust@hammerspace.com> <20190301192455.104943-17-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Pass in a pointer to the mirror rather than forcing another array access. Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.c | 8 ++------ fs/nfs/flexfilelayout/flexfilelayout.h | 7 +++---- fs/nfs/flexfilelayout/flexfilelayoutdev.c | 21 +++++---------------- 3 files changed, 10 insertions(+), 26 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index 94515856b357..5db768924fba 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -1799,9 +1799,7 @@ ff_layout_read_pagelist(struct nfs_pgio_header *hdr) if (fh) hdr->args.fh = fh; - if (vers == 4 && - !nfs4_ff_layout_select_ds_stateid(lseg, idx, &hdr->args.stateid)) - goto out_failed; + nfs4_ff_layout_select_ds_stateid(mirror, &hdr->args.stateid); /* * Note that if we ever decide to split across DSes, @@ -1867,9 +1865,7 @@ ff_layout_write_pagelist(struct nfs_pgio_header *hdr, int sync) if (fh) hdr->args.fh = fh; - if (vers == 4 && - !nfs4_ff_layout_select_ds_stateid(lseg, idx, &hdr->args.stateid)) - goto out_failed; + nfs4_ff_layout_select_ds_stateid(mirror, &hdr->args.stateid); /* * Note that if we ever decide to split across DSes, diff --git a/fs/nfs/flexfilelayout/flexfilelayout.h b/fs/nfs/flexfilelayout/flexfilelayout.h index 99cfe2e8f32a..2f369966abf7 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.h +++ b/fs/nfs/flexfilelayout/flexfilelayout.h @@ -204,10 +204,9 @@ unsigned int ff_layout_fetch_ds_ioerr(struct pnfs_layout_hdr *lo, unsigned int maxnum); struct nfs_fh * nfs4_ff_layout_select_ds_fh(struct nfs4_ff_layout_mirror *mirror); -int -nfs4_ff_layout_select_ds_stateid(struct pnfs_layout_segment *lseg, - u32 mirror_idx, - nfs4_stateid *stateid); +void +nfs4_ff_layout_select_ds_stateid(const struct nfs4_ff_layout_mirror *mirror, + nfs4_stateid *stateid); struct nfs4_pnfs_ds * nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c index 691e8b87032b..9348a4588f55 100644 --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c @@ -357,23 +357,12 @@ nfs4_ff_layout_select_ds_fh(struct nfs4_ff_layout_mirror *mirror) return &mirror->fh_versions[0]; } -int -nfs4_ff_layout_select_ds_stateid(struct pnfs_layout_segment *lseg, - u32 mirror_idx, - nfs4_stateid *stateid) +void +nfs4_ff_layout_select_ds_stateid(const struct nfs4_ff_layout_mirror *mirror, + nfs4_stateid *stateid) { - struct nfs4_ff_layout_mirror *mirror = FF_LAYOUT_COMP(lseg, mirror_idx); - - if (!ff_layout_mirror_valid(lseg, mirror, false)) { - pr_err_ratelimited("NFS: %s: No data server for mirror offset index %d\n", - __func__, mirror_idx); - goto out; - } - - nfs4_stateid_copy(stateid, &mirror->stateid); - return 1; -out: - return 0; + if (nfs4_ff_layout_ds_version(mirror) == 4) + nfs4_stateid_copy(stateid, &mirror->stateid); } /** From patchwork Fri Mar 1 19:24:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835991 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 35D1F1805 for ; Fri, 1 Mar 2019 19:27:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 275422FC06 for ; Fri, 1 Mar 2019 19:27:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1BD5E2FCDF; Fri, 1 Mar 2019 19:27:12 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C51FE2FC06 for ; Fri, 1 Mar 2019 19:27:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726121AbfCAT1L (ORCPT ); Fri, 1 Mar 2019 14:27:11 -0500 Received: from mail-yw1-f68.google.com ([209.85.161.68]:45916 "EHLO mail-yw1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726042AbfCAT1K (ORCPT ); Fri, 1 Mar 2019 14:27:10 -0500 Received: by mail-yw1-f68.google.com with SMTP id r188so14784727ywb.12 for ; Fri, 01 Mar 2019 11:27:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=nUfnWvgdUYzkHJQMu3yUvrwZ11VXYIukfKkwsBcywZs=; b=iQf5RivfnM7HVmc8AtKqqu6I4qeCrDsFTuCyc7hGssXy9ovLDLhlb/oc9Bzpk1ZjOP 4P8CQKxgTvQiVAQ3BQGRQKoVoE/KF9ui5dCylvdpMzhORoMZP0TbR9BWR6Me74tUfJJh ojuZTiSMAri3ytKqPQf6Cm5Ly10SFZK+JIqtl/yft58bxpD3hWUx0OP1/HmFz/tM+Mdt JXntMSKlN/wbP0RcdqeeTES76/24gwwcrIUd6UG5LF1+l7scnb3JaZw2V9FDi3+3GcqT EakS2lRKcoaVdmY46cHzqXn7Q2bVMHF2m4yo3WK8j56kpZAgHxmhpJiNejhp5IKCPLW+ tN5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=nUfnWvgdUYzkHJQMu3yUvrwZ11VXYIukfKkwsBcywZs=; b=clprXqVySxbcirC4VTEHJlrTo+Yvyn3D+STHH5dTe1kPik5tOai9cu1d05EeP5fsRV 5zi4XE18l2Tbrk/2PEvDCHgAZfbqCPNRn+wppzcRCDGu29Rj6Dw3PSHMMFypfsIit8Y0 Vc8o+NVhtcwr+ZM22nZo1REcV+WbZZpjU2ZJO39tnTVHakKvPEIbJ4STfXpWc232W9rl MmiR0LxzmEqazdnL1GS8tqjQ2j7sXCIQlMCoB0m3WBCam51PIsKj1sdsQJqZP9mmc90+ 058eFNihxwSVC83y3s7gNlhRaMvR8ERh3RQbMu7zzQoTseFwRk3WVP7hRvi+X2Bc7JgL K71Q== X-Gm-Message-State: APjAAAXQWPdwjNuMP+mi1eijmTmTdLP2mYITY1GjeqmCFDI0DPnHJuAC VJgF6+S+jwsWnoz0bu7FAbF5VKE= X-Google-Smtp-Source: APXvYqx4poqLmkfnd3nwKTUaYytCwM9Yq5h3cBFRjPrGrXSIj+Jav6IjHk8O7AzGuH1VY12nB580VA== X-Received: by 2002:a5b:544:: with SMTP id r4mr5496843ybp.235.1551468429201; Fri, 01 Mar 2019 11:27:09 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.27.08 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:27:08 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 18/19] NFS/flexfiles: Remove dead code in ff_layout_mirror_valid() Date: Fri, 1 Mar 2019 14:24:54 -0500 Message-Id: <20190301192455.104943-19-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-18-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> <20190301192455.104943-5-trond.myklebust@hammerspace.com> <20190301192455.104943-6-trond.myklebust@hammerspace.com> <20190301192455.104943-7-trond.myklebust@hammerspace.com> <20190301192455.104943-8-trond.myklebust@hammerspace.com> <20190301192455.104943-9-trond.myklebust@hammerspace.com> <20190301192455.104943-10-trond.myklebust@hammerspace.com> <20190301192455.104943-11-trond.myklebust@hammerspace.com> <20190301192455.104943-12-trond.myklebust@hammerspace.com> <20190301192455.104943-13-trond.myklebust@hammerspace.com> <20190301192455.104943-14-trond.myklebust@hammerspace.com> <20190301192455.104943-15-trond.myklebust@hammerspace.com> <20190301192455.104943-16-trond.myklebust@hammerspace.com> <20190301192455.104943-17-trond.myklebust@hammerspace.com> <20190301192455.104943-18-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP nfs4_ff_alloc_deviceid_node() guarantees that if mirror->mirror_ds is a valid pointer, then so is mirror->mirror_ds->ds. Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayoutdev.c | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c index 9348a4588f55..da3b65373db1 100644 --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c @@ -183,15 +183,6 @@ nfs4_ff_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev, return NULL; } -static void ff_layout_mark_devid_invalid(struct pnfs_layout_segment *lseg, - struct nfs4_deviceid_node *devid) -{ - nfs4_mark_deviceid_unavailable(devid); - if (!ff_layout_has_available_ds(lseg)) - pnfs_error_mark_layout_for_return(lseg->pls_layout->plh_inode, - lseg); -} - static bool ff_layout_mirror_valid(struct pnfs_layout_segment *lseg, struct nfs4_ff_layout_mirror *mirror, bool create) @@ -221,12 +212,6 @@ static bool ff_layout_mirror_valid(struct pnfs_layout_segment *lseg, if (IS_ERR(mirror->mirror_ds)) goto outerr; - if (mirror->mirror_ds->ds == NULL) { - struct nfs4_deviceid_node *devid; - devid = &mirror->mirror_ds->id_node; - ff_layout_mark_devid_invalid(lseg, devid); - return false; - } return true; outerr: return false; From patchwork Fri Mar 1 19:24:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 10835993 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4736B1669 for ; Fri, 1 Mar 2019 19:27:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 37ACA2FC06 for ; Fri, 1 Mar 2019 19:27:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2C2E02FCDF; Fri, 1 Mar 2019 19:27:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C23C92FC06 for ; Fri, 1 Mar 2019 19:27:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726042AbfCAT1M (ORCPT ); Fri, 1 Mar 2019 14:27:12 -0500 Received: from mail-yw1-f68.google.com ([209.85.161.68]:43589 "EHLO mail-yw1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726080AbfCAT1L (ORCPT ); Fri, 1 Mar 2019 14:27:11 -0500 Received: by mail-yw1-f68.google.com with SMTP id u200so14916208ywu.10 for ; Fri, 01 Mar 2019 11:27:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Z8YWuqW4j6l/n2F5awZfHcboHOcI9H4TroUeUfhL47g=; b=IzihflrzeSH4Dx3qBm3sgwogRZ0eFTbFIPiLBpMI+iHbHOVpAcYcK2ZHaYLdVA99jk wSadUKcEA/vsCOHDnA8qD9dlug4RL1AG4rdafwHeeC67bca+xynA8WbL7kB1zxkmGgQ9 ZqnQwg8gOxoD0CoBp4mHKMVwdpgAIad5KtYoyRTd6DoHcBnGzwXZp0w70F+OBv00flYo XFVPJLI3i0MseZXzVe0xlCucNWt9RwLCEsu9bQCtXI5tDApE3a34bY6Tw0M81O4+mJ6d hHZi51Eh6iS6lnTK+roBvkp2BpgiHDovptw98ADwuuHTkUOaFVAwo1kYxXWK0gQ+P2b2 Z2IQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Z8YWuqW4j6l/n2F5awZfHcboHOcI9H4TroUeUfhL47g=; b=uj0svWaELEgeZEqI05i+T3JJgggiJMMH3LHOWSqoMhbbIRHsolGz98PIyplcmHHg6X 254DZXsEVtrMV4RmKB2nVLxe2il2aPAtdueuxI4hx9sAJOI6zXuqELlltsmSJ3HCivBd pzveCJ5W+VBEqqyjwoGY2KpCI8LWGCy+rE+OFfeFZedb4tbbYR/j6lCoEzcUQZs3izMh NK1JuM+w3OpQvThTumZPh6sFgYkGL/Oy4dLtC0PQ/DQh8NonhNbHGK4YwDEH5fpm920y qyt0TSNngTSYWn2K5m1eEzJvjzkLgRqrntvWVVQU+Kx20v0HEATImD4X7liLnvYRhUw9 /T+Q== X-Gm-Message-State: APjAAAVKGvdCqSVQ56e6p76a1fZHzupBiDUX1fPwoj/01LXwmZIpZY5u Cu7st/7qazAwXpqhbZUtnPVxtaU= X-Google-Smtp-Source: APXvYqwr8HVUlMTLK8Fc2l2AdeP798cTrn+RRJTP0BImJFbSqoEpHwkbOk0pTuWJ7v3+6J1GN8ksOw== X-Received: by 2002:a0d:d006:: with SMTP id s6mr2895188ywd.386.1551468430041; Fri, 01 Mar 2019 11:27:10 -0800 (PST) Received: from localhost.localdomain (c-68-40-189-247.hsd1.mi.comcast.net. [68.40.189.247]) by smtp.gmail.com with ESMTPSA id l71sm7509193ywl.65.2019.03.01.11.27.09 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 01 Mar 2019 11:27:09 -0800 (PST) From: Trond Myklebust X-Google-Original-From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 19/19] NFS/flexfiles: Clean up mirror DS initialisation Date: Fri, 1 Mar 2019 14:24:55 -0500 Message-Id: <20190301192455.104943-20-trond.myklebust@hammerspace.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190301192455.104943-19-trond.myklebust@hammerspace.com> References: <20190301192455.104943-1-trond.myklebust@hammerspace.com> <20190301192455.104943-2-trond.myklebust@hammerspace.com> <20190301192455.104943-3-trond.myklebust@hammerspace.com> <20190301192455.104943-4-trond.myklebust@hammerspace.com> <20190301192455.104943-5-trond.myklebust@hammerspace.com> <20190301192455.104943-6-trond.myklebust@hammerspace.com> <20190301192455.104943-7-trond.myklebust@hammerspace.com> <20190301192455.104943-8-trond.myklebust@hammerspace.com> <20190301192455.104943-9-trond.myklebust@hammerspace.com> <20190301192455.104943-10-trond.myklebust@hammerspace.com> <20190301192455.104943-11-trond.myklebust@hammerspace.com> <20190301192455.104943-12-trond.myklebust@hammerspace.com> <20190301192455.104943-13-trond.myklebust@hammerspace.com> <20190301192455.104943-14-trond.myklebust@hammerspace.com> <20190301192455.104943-15-trond.myklebust@hammerspace.com> <20190301192455.104943-16-trond.myklebust@hammerspace.com> <20190301192455.104943-17-trond.myklebust@hammerspace.com> <20190301192455.104943-18-trond.myklebust@hammerspace.com> <20190301192455.104943-19-trond.myklebust@hammerspace.com> MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Get rid of the redundant parameter and rename the function ff_layout_mirror_valid() to ff_layout_init_mirror_ds() for clarity. Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayoutdev.c | 66 +++++++++++------------ 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c index da3b65373db1..52777396b097 100644 --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c @@ -183,40 +183,6 @@ nfs4_ff_alloc_deviceid_node(struct nfs_server *server, struct pnfs_device *pdev, return NULL; } -static bool ff_layout_mirror_valid(struct pnfs_layout_segment *lseg, - struct nfs4_ff_layout_mirror *mirror, - bool create) -{ - if (mirror == NULL) - goto outerr; - if (mirror->mirror_ds == NULL) { - if (create) { - struct nfs4_deviceid_node *node; - struct pnfs_layout_hdr *lh = lseg->pls_layout; - struct nfs4_ff_layout_ds *mirror_ds = ERR_PTR(-ENODEV); - - node = nfs4_find_get_deviceid(NFS_SERVER(lh->plh_inode), - &mirror->devid, lh->plh_lc_cred, - GFP_KERNEL); - if (node) - mirror_ds = FF_LAYOUT_MIRROR_DS(node); - - /* check for race with another call to this function */ - if (cmpxchg(&mirror->mirror_ds, NULL, mirror_ds) && - mirror_ds != ERR_PTR(-ENODEV)) - nfs4_put_deviceid_node(node); - } else - goto outerr; - } - - if (IS_ERR(mirror->mirror_ds)) - goto outerr; - - return true; -outerr: - return false; -} - static void extend_ds_error(struct nfs4_ff_layout_ds_err *err, u64 offset, u64 length) { @@ -350,6 +316,36 @@ nfs4_ff_layout_select_ds_stateid(const struct nfs4_ff_layout_mirror *mirror, nfs4_stateid_copy(stateid, &mirror->stateid); } +static bool +ff_layout_init_mirror_ds(struct pnfs_layout_hdr *lo, + struct nfs4_ff_layout_mirror *mirror) +{ + if (mirror == NULL) + goto outerr; + if (mirror->mirror_ds == NULL) { + struct nfs4_deviceid_node *node; + struct nfs4_ff_layout_ds *mirror_ds = ERR_PTR(-ENODEV); + + node = nfs4_find_get_deviceid(NFS_SERVER(lo->plh_inode), + &mirror->devid, lo->plh_lc_cred, + GFP_KERNEL); + if (node) + mirror_ds = FF_LAYOUT_MIRROR_DS(node); + + /* check for race with another call to this function */ + if (cmpxchg(&mirror->mirror_ds, NULL, mirror_ds) && + mirror_ds != ERR_PTR(-ENODEV)) + nfs4_put_deviceid_node(node); + } + + if (IS_ERR(mirror->mirror_ds)) + goto outerr; + + return true; +outerr: + return false; +} + /** * nfs4_ff_layout_prepare_ds - prepare a DS connection for an RPC call * @lseg: the layout segment we're operating on @@ -379,7 +375,7 @@ nfs4_ff_layout_prepare_ds(struct pnfs_layout_segment *lseg, unsigned int max_payload; int status; - if (!ff_layout_mirror_valid(lseg, mirror, true)) + if (!ff_layout_init_mirror_ds(lseg->pls_layout, mirror)) goto noconnect; ds = mirror->mirror_ds->ds;