Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3889643pxv; Mon, 19 Jul 2021 11:12:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxRIGt335Pg4mTYF90+89NcfvJDCDD4BjSFVQJDFzjrjBWdKTCFXB7vDLpPxY8yoYkvmMP6 X-Received: by 2002:a92:cec5:: with SMTP id z5mr16896467ilq.226.1626718351050; Mon, 19 Jul 2021 11:12:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626718351; cv=none; d=google.com; s=arc-20160816; b=IHKADWKXEn3DzocDNYTFad17e5EcAZu4jU665XzQisq7m15LOeVC9gjHwKRCAlWm+f 5JlHUsyLGrIfsbkVZnTjhNwTO+kOaHxF8cErzxtAdHpB87rk7edbyD36VU3Xhdi0u4Eu 0P5VlKMEE7t2XCd63LQyjmddTD/dJWhqg3xPGlMQ8ZFbtB/VCzKkPNUAhSmeMFbL5bfQ I2NtHpV31HS8m1LytpGnF1MXzl6u7HIXQPZeBJvwmuYytmBRgRIzXyWqbhoK9Sa+lKUW Y5KBHlnfuS8UUm6HF1yFMhq0PCrU2WRB9Y/gaJ1kGW2V+oJ6Wcg0aheOs+K/eH+ZYsTR yfQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=ZLxBuaoqoixHKeY6om4Na9O3qziyCe1bCtqu0P+afo0=; b=MzcokitKBf+04U5wq344BWndjs7YBpBzU0xC9GLNU4ZtkQM8biqZz56Zv5E9VmGtoV cp+jkx0nny0gJFsIyTEMmWNWt11M/k6E7qvF9Vin1iAWAc/oh6UuwTsaCWGUIgX49qPQ rRYTyF1EVkBd5nsBdP3D4or1ZDeZkmZW0aafeAz/ySssGlL4geUgjG8xHGrUdw9/8q+Q 0nXeVaoV1UcpjcK2gZaFstoLmF9+SydlmZfTQlAq292QUpeNjK8DKvNuc10nNskA3bnW vxS/DCKfb5SlluNkTy86ZtidsNIwRwDPsfhKxSQ+4BfO95YNdiu5pr/BRdl2Ps7t3xZ5 fQ4Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=CpoCqzuf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a9si20744849ilr.103.2021.07.19.11.12.18; Mon, 19 Jul 2021 11:12:31 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=CpoCqzuf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1355320AbhGSRac (ORCPT + 99 others); Mon, 19 Jul 2021 13:30:32 -0400 Received: from mail.kernel.org ([198.145.29.99]:48102 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244919AbhGSPqX (ORCPT ); Mon, 19 Jul 2021 11:46:23 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id F042761283; Mon, 19 Jul 2021 16:27:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626712022; bh=CEchJ3nvQLLEUNXjUa3AfoAntBNSjgYaTWEP6D/FGTU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CpoCqzufITAZe0BykqUt6zi+wpFmZ05zMbXvn/zYNbPRe+47/+/mteedCp7PEOzjU NddlrliBejd+F+Ok1X63l08QhYKvuW1ILk8GNfUSiM+cK5Gk6k3rWYPnilXcBWPzQq /tpgc1Q6hifLvb6hzRJqtbbVhf94KVzL8dOYWNAw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Trond Myklebust , Sasha Levin Subject: [PATCH 5.12 219/292] NFSv4/pnfs: Fix the layout barrier update Date: Mon, 19 Jul 2021 16:54:41 +0200 Message-Id: <20210719144950.183875874@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210719144942.514164272@linuxfoundation.org> References: <20210719144942.514164272@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Trond Myklebust [ Upstream commit aa95edf309ef31e2df4a37ebf0e5c2ca2a6772ab ] If we have multiple outstanding layoutget requests, the current code to update the layout barrier assumes that the outstanding layout stateids are updated in order. That's not necessarily the case. Instead of using the value of lo->plh_outstanding as a guesstimate for the window of values we need to accept, just wait to update the window until we're processing the last one. The intention here is just to ensure that we don't process 2^31 seqid updates without also updating the barrier. Fixes: 1bcf34fdac5f ("pNFS/NFSv4: Update the layout barrier when we schedule a layoutreturn") Signed-off-by: Trond Myklebust Signed-off-by: Sasha Levin --- fs/nfs/pnfs.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index a5e3628a5273..cd041ba6f0aa 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c @@ -966,10 +966,8 @@ void pnfs_set_layout_stateid(struct pnfs_layout_hdr *lo, const nfs4_stateid *new, const struct cred *cred, bool update_barrier) { - u32 oldseq, newseq, new_barrier = 0; - - oldseq = be32_to_cpu(lo->plh_stateid.seqid); - newseq = be32_to_cpu(new->seqid); + u32 oldseq = be32_to_cpu(lo->plh_stateid.seqid); + u32 newseq = be32_to_cpu(new->seqid); if (!pnfs_layout_is_valid(lo)) { pnfs_set_layout_cred(lo, cred); @@ -979,19 +977,21 @@ pnfs_set_layout_stateid(struct pnfs_layout_hdr *lo, const nfs4_stateid *new, clear_bit(NFS_LAYOUT_INVALID_STID, &lo->plh_flags); return; } - if (pnfs_seqid_is_newer(newseq, oldseq)) { + + if (pnfs_seqid_is_newer(newseq, oldseq)) nfs4_stateid_copy(&lo->plh_stateid, new); - /* - * Because of wraparound, we want to keep the barrier - * "close" to the current seqids. - */ - new_barrier = newseq - atomic_read(&lo->plh_outstanding); - } - if (update_barrier) - new_barrier = be32_to_cpu(new->seqid); - else if (new_barrier == 0) + + if (update_barrier) { + pnfs_barrier_update(lo, newseq); return; - pnfs_barrier_update(lo, new_barrier); + } + /* + * Because of wraparound, we want to keep the barrier + * "close" to the current seqids. We really only want to + * get here from a layoutget call. + */ + if (atomic_read(&lo->plh_outstanding) == 1) + pnfs_barrier_update(lo, be32_to_cpu(lo->plh_stateid.seqid)); } static bool -- 2.30.2