From patchwork Mon Sep 5 13:46:00 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Trond Myklebust X-Patchwork-Id: 9313973 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 ABD5360760 for ; Mon, 5 Sep 2016 13:46:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9D67328A22 for ; Mon, 5 Sep 2016 13:46:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9276528AB5; Mon, 5 Sep 2016 13:46:56 +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=-4.4 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 3900F28A22 for ; Mon, 5 Sep 2016 13:46:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933125AbcIENqy (ORCPT ); Mon, 5 Sep 2016 09:46:54 -0400 Received: from mail-it0-f67.google.com ([209.85.214.67]:35125 "EHLO mail-it0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933113AbcIENqx (ORCPT ); Mon, 5 Sep 2016 09:46:53 -0400 Received: by mail-it0-f67.google.com with SMTP id c198so8887001ith.2 for ; Mon, 05 Sep 2016 06:46:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=bT6tpakzyUCtFfM8SrIrZcISRFuZJTWwjaHr2Em/KQA=; b=UAcJscBvKNDpmoxVP/XhFu0XF8np3kVXxlM5NnVer8VUxJGY76llIkIerDVZhHZg0E L+UNPa2gEpxRZns6wvKu54cakoIBcbhoEZ8Ner2t6zGDpgKoXyQTZ/eZ8QdJAR5HqSvS 38Aq/gdYKQmkPwxZFpmJ3PKrLoxxy43e6cVPsPnIlsFkLyxqmRhDq2XDKp3oi0IT9vE9 glCCj2vQiwHyDyte3WU/WJ6fZSzMsHunanjrni5tPe+qgzaSr1ElFrt3Xadv5CeLnjk4 fGEdI18/yP9JUtp5nKz3Zjwn67PYAOLPDXaVn9xAF5SToMCkmUdx0ubn0JC6cO2G2xuc PIFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:subject:date:message-id :in-reply-to:references; bh=bT6tpakzyUCtFfM8SrIrZcISRFuZJTWwjaHr2Em/KQA=; b=MNa+yyRTp7f8qXgkCPLvAjR8ci/sRLVa/ohu0LgXKYjjlt5k73b7XJW9ilAL78q/v4 NNJ00G95jNxg2WgKpQYbSj109SRV0V0ykJZ1ZVxEPla7sC4UTvJa9g261kJONhBkdBaJ ullHZ/8EzBmI5j6/QL9rdwfz3QIGvT6DmS/JXWLpx5ajNK5C64e2YJHaagKZjvjzyy5u +lCPv1sAz+fobuhnOs8eTpyX+oU/19Zq21Wlv+EZNHCatD8LZYe3ZCQg+W+fBop06JIk VpvY7x+vInbEUKRJqkBMaSwdwFaRH9swVHSInDz34xBbhZnMMG5rWLB6AHnZi7JrBRp/ e2RQ== X-Gm-Message-State: AE9vXwOQ4HvcoWzwQuJ4Yzi9mmT/oAU0F/sogi8l4IPFtzJBI9foHa+CH8gyqlMNUAnSEA== X-Received: by 10.36.3.76 with SMTP id e73mr24695058ite.42.1473083213120; Mon, 05 Sep 2016 06:46:53 -0700 (PDT) Received: from leira.trondhjem.org.localdomain (c-68-49-162-121.hsd1.mi.comcast.net. [68.49.162.121]) by smtp.gmail.com with ESMTPSA id d76sm1392207ith.10.2016.09.05.06.46.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 05 Sep 2016 06:46:52 -0700 (PDT) From: Trond Myklebust To: linux-nfs@vger.kernel.org Subject: [PATCH 2/4] pNFS: Fix pnfs_set_layout_stateid() to clear NFS_LAYOUT_INVALID_STID Date: Mon, 5 Sep 2016 09:46:00 -0400 Message-Id: <1473083162-4697-3-git-send-email-trond.myklebust@primarydata.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1473083162-4697-2-git-send-email-trond.myklebust@primarydata.com> References: <1473083162-4697-1-git-send-email-trond.myklebust@primarydata.com> <1473083162-4697-2-git-send-email-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 layout was marked as invalid, we want to ensure to initialise the layout header fields correctly. Signed-off-by: Trond Myklebust --- fs/nfs/pnfs.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index 519ad320f5cd..cd8b5fca33f6 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -768,17 +768,32 @@ pnfs_destroy_all_layouts(struct nfs_client *clp) pnfs_destroy_layouts_byclid(clp, false); } +static void +pnfs_clear_layoutreturn_info(struct pnfs_layout_hdr *lo) +{ + lo->plh_return_iomode = 0; + lo->plh_return_seq = 0; + clear_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags); +} + /* update lo->plh_stateid with new if is more recent */ void pnfs_set_layout_stateid(struct pnfs_layout_hdr *lo, const nfs4_stateid *new, bool update_barrier) { u32 oldseq, newseq, new_barrier = 0; - bool invalid = !pnfs_layout_is_valid(lo); oldseq = be32_to_cpu(lo->plh_stateid.seqid); newseq = be32_to_cpu(new->seqid); - if (invalid || pnfs_seqid_is_newer(newseq, oldseq)) { + + if (!pnfs_layout_is_valid(lo)) { + nfs4_stateid_copy(&lo->plh_stateid, new); + lo->plh_barrier = newseq; + pnfs_clear_layoutreturn_info(lo); + clear_bit(NFS_LAYOUT_INVALID_STID, &lo->plh_flags); + return; + } + if (pnfs_seqid_is_newer(newseq, oldseq)) { nfs4_stateid_copy(&lo->plh_stateid, new); /* * Because of wraparound, we want to keep the barrier @@ -790,7 +805,7 @@ pnfs_set_layout_stateid(struct pnfs_layout_hdr *lo, const nfs4_stateid *new, new_barrier = be32_to_cpu(new->seqid); else if (new_barrier == 0) return; - if (invalid || pnfs_seqid_is_newer(new_barrier, lo->plh_barrier)) + if (pnfs_seqid_is_newer(new_barrier, lo->plh_barrier)) lo->plh_barrier = new_barrier; } @@ -886,14 +901,6 @@ void pnfs_clear_layoutreturn_waitbit(struct pnfs_layout_hdr *lo) rpc_wake_up(&NFS_SERVER(lo->plh_inode)->roc_rpcwaitq); } -static void -pnfs_clear_layoutreturn_info(struct pnfs_layout_hdr *lo) -{ - lo->plh_return_iomode = 0; - lo->plh_return_seq = 0; - clear_bit(NFS_LAYOUT_RETURN_REQUESTED, &lo->plh_flags); -} - static bool pnfs_prepare_layoutreturn(struct pnfs_layout_hdr *lo, nfs4_stateid *stateid, @@ -1801,16 +1808,11 @@ pnfs_layout_process(struct nfs4_layoutget *lgp) */ pnfs_mark_layout_stateid_invalid(lo, &free_me); - nfs4_stateid_copy(&lo->plh_stateid, &res->stateid); - lo->plh_barrier = be32_to_cpu(res->stateid.seqid); + pnfs_set_layout_stateid(lo, &res->stateid, true); } pnfs_get_lseg(lseg); pnfs_layout_insert_lseg(lo, lseg, &free_me); - if (!pnfs_layout_is_valid(lo)) { - pnfs_clear_layoutreturn_info(lo); - clear_bit(NFS_LAYOUT_INVALID_STID, &lo->plh_flags); - } if (res->return_on_close)