From patchwork Sat Apr 29 18:48:43 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 9705869 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 0DDDA602BF for ; Sat, 29 Apr 2017 18:48:54 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F413D2807E for ; Sat, 29 Apr 2017 18:48:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E7CF428334; Sat, 29 Apr 2017 18:48:53 +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=-6.3 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID 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 6A4522807E for ; Sat, 29 Apr 2017 18:48:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1036441AbdD2Ssw (ORCPT ); Sat, 29 Apr 2017 14:48:52 -0400 Received: from mail-io0-f193.google.com ([209.85.223.193]:35299 "EHLO mail-io0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1031957AbdD2Ssu (ORCPT ); Sat, 29 Apr 2017 14:48:50 -0400 Received: by mail-io0-f193.google.com with SMTP id d203so16014520iof.2 for ; Sat, 29 Apr 2017 11:48:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=2i7NxfwPS8k1B+uDbXfgHv+jesVqMtU1/4mqpOby2+4=; b=UYCqhfqJVs3fwH/zPFxlhl/sUFMqXYjV2hxavij6emaVBlbcAottewUH8BMxLxNZ+X qON5WtCTPAdrmAjsxTRGSWCKGiclF2LV/irVLGjWv9bhJx0W1nBW6Ug1FMEt+NZEJT4k nWnmNk4uXqvb5VDE4k+9Kds1qDO/3XSEZvyV3tujhsnnQ7ribp5Dk8n2I74evMKmeFrT 29hajFST2PL2OhZZ0IzZmPZ7ROeBzjOWqd3SCxx2ErfPDRQfQN3b6pkZKqAfywbCsaf/ 8U0E2kTfanx6ZN4JjmXWx1SpP0W9AXtiQTHzDJc0WTjphGWMuWFD1C+RRM9Y0bZInqdP cOQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references; bh=2i7NxfwPS8k1B+uDbXfgHv+jesVqMtU1/4mqpOby2+4=; b=NSVWjnkx4NPZ0dD/RLsM6E1Lq3OYhx1Ku6OllLdNgfmdIsFROFQqCTXqu3w7A7vm54 3Tgki0+qLeP0p/d+7F5CMiHeZONo3OyJQsRHRcBIdFStZqaAdsm+2GZ/ITVZ7tH+QKKx /Mdw8gyGAtyum5LDydToqJSfs1004AC+8oYwdkCyXXIk4yI9DKRcBXpG80/CW2PaUrWC jFNiu501bMQGsj7b2vY7cemBRS3O0A4s1PIhuxhbKA8UhpCIhnFavUGb9Zf8ynzedfyR C76FkYa2jQJcXdqM1cT2Uf6qp/NNODQc9zrtBgkJFG6nXMnieN9qEBVVspHd2qRriQgH 3Mjg== X-Gm-Message-State: AN3rC/4Qii+9GO3uElfyp8usUtVa5mKIKkkeq4LZyIXpx4XxFcONzjW+ IhbJCM/PsVxESeDlJlo= X-Received: by 10.107.6.219 with SMTP id f88mr16019594ioi.126.1493491729461; Sat, 29 Apr 2017 11:48:49 -0700 (PDT) Received: from localhost.localdomain (c-68-49-162-121.hsd1.mi.comcast.net. [68.49.162.121]) by smtp.gmail.com with ESMTPSA id g202sm4086302ioe.46.2017.04.29.11.48.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 29 Apr 2017 11:48:48 -0700 (PDT) From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 1/3] pNFS/flexfiles: Fix up the ff_layout_write_pagelist failure path Date: Sat, 29 Apr 2017 14:48:43 -0400 Message-Id: <20170429184845.58057-2-trond.myklebust@primarydata.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170429184845.58057-1-trond.myklebust@primarydata.com> References: <20170429184845.58057-1-trond.myklebust@primarydata.com> 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 write through pNFS fails, we need to use the same failure semantics as for the read path: If the FF_FLAGS_NO_IO_THRU_MDS flag is set or we have sufficient valid DSes, then we must retry through pNFS Fixes: d67ae825a59d ("pnfs/flexfiles: Add the FlexFile Layout Driver") Signed-off-by: Trond Myklebust --- fs/nfs/flexfilelayout/flexfilelayout.c | 11 ++++++++--- fs/nfs/pnfs.c | 14 +++++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c index f23b63eb356e..4e8bf02a62f9 100644 --- a/fs/nfs/flexfilelayout/flexfilelayout.c +++ b/fs/nfs/flexfilelayout/flexfilelayout.c @@ -1802,16 +1802,16 @@ ff_layout_write_pagelist(struct nfs_pgio_header *hdr, int sync) ds = nfs4_ff_layout_prepare_ds(lseg, idx, true); if (!ds) - return PNFS_NOT_ATTEMPTED; + goto out_failed; ds_clnt = nfs4_ff_find_or_create_ds_client(lseg, idx, ds->ds_clp, hdr->inode); if (IS_ERR(ds_clnt)) - return PNFS_NOT_ATTEMPTED; + goto out_failed; ds_cred = ff_layout_get_ds_cred(lseg, idx, hdr->cred); if (!ds_cred) - return PNFS_NOT_ATTEMPTED; + goto out_failed; vers = nfs4_ff_layout_ds_version(lseg, idx); @@ -1841,6 +1841,11 @@ ff_layout_write_pagelist(struct nfs_pgio_header *hdr, int sync) sync, RPC_TASK_SOFTCONN); put_rpccred(ds_cred); return PNFS_ATTEMPTED; + +out_failed: + if (ff_layout_avoid_mds_available_ds(lseg)) + return PNFS_TRY_AGAIN; + return PNFS_NOT_ATTEMPTED; } static u32 calc_ds_index_from_commit(struct pnfs_layout_segment *lseg, u32 i) diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index e45b3ffeda08..6c2e4c73684c 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -2292,8 +2292,20 @@ pnfs_do_write(struct nfs_pageio_descriptor *desc, enum pnfs_try_status trypnfs; trypnfs = pnfs_try_to_write_data(hdr, call_ops, lseg, how); - if (trypnfs == PNFS_NOT_ATTEMPTED) + switch (trypnfs) { + case PNFS_NOT_ATTEMPTED: pnfs_write_through_mds(desc, hdr); + case PNFS_ATTEMPTED: + break; + case PNFS_TRY_AGAIN: + /* cleanup hdr and prepare to redo pnfs */ + if (!test_and_set_bit(NFS_IOHDR_REDO, &hdr->flags)) { + struct nfs_pgio_mirror *mirror = nfs_pgio_current_mirror(desc); + list_splice_init(&hdr->pages, &mirror->pg_list); + mirror->pg_recoalesce = 1; + } + hdr->mds_ops->rpc_release(hdr); + } } static void pnfs_writehdr_free(struct nfs_pgio_header *hdr)