Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp49034pxb; Wed, 14 Apr 2021 09:09:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw4v0ENSW9lbnIA7y4DYHMln2BZ1ept5fYgmCU4TXiUgOVfCjBI8oE20ywHEPIKaVVMFfou X-Received: by 2002:a05:6402:515:: with SMTP id m21mr32298348edv.382.1618416557645; Wed, 14 Apr 2021 09:09:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618416557; cv=none; d=google.com; s=arc-20160816; b=wXyDaJoMPRJ7vkbKbY0nCT/ZKRUPGxoqrgsbXlBEFWEygCeIsLnVWPLDZGrmLIM4kg 5lk2b+9PPxMPoaVKZ4ufNisnJ1idWDqKD4Xn5tG8cDJxH53SyQWFuUsjBe8N62GvcN0A T0BgaKCSPGovJzWljKTxPcwZEE1SGpOVbmXLp7VIIxkI28Hqs0fnYoN9w3Qo9lz0Z91X ZX5TJnE3p37hB9jlEv97EnrWF4U/meHB4AhZCZb7HbGBHxsy6iUu3CgHD296TowPhKDA EKBm62lF6MXqhlIXur1P2vZKYBZJ9uKPmWuWA7IJQDs9cxPRRQV/W6KwmWxrLHce6tIB SzxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=YOz++AL8O+b+c0A0jC0k46OLdFSFumwKDjZwRhimmAI=; b=Eoy7+3YD9cH2UfnOskwiuh7covOzrtZxrwDcqRxvUdN6gYgsJipJMvSkZyK7oVYKq7 Ng92tdOjyf+mQ0dhBaQTSGEwo+g/+cLcLp2Q2r836o3QDdKZgjAaFiUx2gT0x9hJmbFP X8xiHcyzKMS1EwuJkj0suT8UtDBIwZ/fqVN0wqfKqkW/lVY8Dss7VBgXe2waYh3JPV2G WWzb0cOsLLds9xNzZLBzkbmXBZS0+u/NEV1uAh/tXluuiedDQdE0EXccvaiIaHmf/iTH Mnt7y7uh0iI2bsv9Vfsm+Oy9/HE/L2c0Zsu3mr2CPbl0uSkiQtQ9vWCKYTNHPNr6O0CQ Os3g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=SMHgSJn+; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h24si1528515ejx.23.2021.04.14.09.08.54; Wed, 14 Apr 2021 09:09:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs-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=@kernel.org header.s=k20201202 header.b=SMHgSJn+; spf=pass (google.com: domain of linux-nfs-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-nfs-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347495AbhDNNog (ORCPT + 99 others); Wed, 14 Apr 2021 09:44:36 -0400 Received: from mail.kernel.org ([198.145.29.99]:52154 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1351588AbhDNNoS (ORCPT ); Wed, 14 Apr 2021 09:44:18 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 3F939611EE for ; Wed, 14 Apr 2021 13:43:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1618407837; bh=x8CTXIZFJrmvZXu3ye5Y+/86qkLHBe2ABa2v2px5y+E=; h=From:To:Subject:Date:In-Reply-To:References:From; b=SMHgSJn+LJXNZHQUe4rZLPZqohAcpxwjFo2Dt/4+EC7tqHTTNsvYlzZqbVtnZ9pXl 2APVXwf/yVURVwftWGs0cn5qqooSKZkFsIb6i8JFgkaEGVSCIrN84q1lOzI79B0/Og s7YIif4Zb3yql1hsiWjoaEwj0NNW5AhdclAqXM2bl5jCMJrUDn3Y7E+7jmwXI4pRdh mgLa7CcdQOaQitVCqhhrLtWTdi0auOloh5pzfjrm0pj4bLbvBOo2axgwZHXqQ4zN68 IenCQj0EmvDHZ7D4r92pIVBU0cqRNJ7ZqdeBtgzH0r8hUOPXYIZ7ZWfHVSXrU29v4x MiGAxPH5s4jwQ== From: trondmy@kernel.org To: linux-nfs@vger.kernel.org Subject: [PATCH v2 05/26] NFS: Fix up revalidation of space used Date: Wed, 14 Apr 2021 09:43:32 -0400 Message-Id: <20210414134353.11860-6-trondmy@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210414134353.11860-5-trondmy@kernel.org> References: <20210414134353.11860-1-trondmy@kernel.org> <20210414134353.11860-2-trondmy@kernel.org> <20210414134353.11860-3-trondmy@kernel.org> <20210414134353.11860-4-trondmy@kernel.org> <20210414134353.11860-5-trondmy@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org From: Trond Myklebust Ensure that when the change attribute or the size change, we also remember to revalidate the space used. Signed-off-by: Trond Myklebust --- fs/nfs/inode.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index a9b302b389a7..8b2f4a5eaa42 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c @@ -565,12 +565,13 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr, st nfs_set_cache_invalid(inode, NFS_INO_INVALID_XATTR); if (fattr->valid & NFS_ATTR_FATTR_BLOCKS_USED) inode->i_blocks = fattr->du.nfs2.blocks; - if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) { + else if (fattr->valid & NFS_ATTR_FATTR_SPACE_USED) { /* * report the blocks in 512byte units */ inode->i_blocks = nfs_calc_block_size(fattr->du.nfs3.used); - } + } else if (fattr->size != 0) + nfs_set_cache_invalid(inode, NFS_INO_INVALID_BLOCKS); if (nfsi->cache_validity != 0) nfsi->cache_validity |= NFS_INO_REVAL_FORCED; @@ -711,7 +712,8 @@ void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr, spin_lock(&inode->i_lock); NFS_I(inode)->attr_gencount = fattr->gencount; if ((attr->ia_valid & ATTR_SIZE) != 0) { - nfs_set_cache_invalid(inode, NFS_INO_INVALID_MTIME); + nfs_set_cache_invalid(inode, NFS_INO_INVALID_MTIME | + NFS_INO_INVALID_BLOCKS); nfs_inc_stats(inode, NFSIOS_SETATTRTRUNC); nfs_vmtruncate(inode, attr->ia_size); } @@ -1933,6 +1935,7 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) save_cache_validity |= NFS_INO_INVALID_CTIME | NFS_INO_INVALID_MTIME | NFS_INO_INVALID_SIZE + | NFS_INO_INVALID_BLOCKS | NFS_INO_INVALID_OTHER; if (S_ISDIR(inode->i_mode)) nfs_force_lookup_revalidate(inode); @@ -1990,6 +1993,12 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr) (long long)cur_isize, (long long)new_isize); } + if (new_isize == 0 && + !(fattr->valid & (NFS_ATTR_FATTR_SPACE_USED | + NFS_ATTR_FATTR_BLOCKS_USED))) { + fattr->du.nfs3.used = 0; + fattr->valid |= NFS_ATTR_FATTR_SPACE_USED; + } } else { nfsi->cache_validity |= save_cache_validity & (NFS_INO_INVALID_SIZE -- 2.30.2