Received: by 2002:ac2:464d:0:0:0:0:0 with SMTP id s13csp3681696lfo; Mon, 23 May 2022 11:16:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz0RZXC/EWimXcc9ufbLFbRCY+/J6R5rINHH4kskxGsLhJ+IZ/ctVrRKZ4gk2h5sf8N4lwd X-Received: by 2002:a63:d505:0:b0:3c2:5a75:47f6 with SMTP id c5-20020a63d505000000b003c25a7547f6mr21009092pgg.170.1653329769908; Mon, 23 May 2022 11:16:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653329769; cv=none; d=google.com; s=arc-20160816; b=Ne73MBHXObTSYQFaiuumfrv1qZuyGuoyMYIkZ0dMBCBZQdFOgHVxH3NQvlsMXO/ZCe bDzASCuLfT5/yd0VupSmySSrTva9NbeYoU+XsvebBAhr5dfR8fsTkZhs8wv2Ffxnxnhs HUGChNviS/NAE55i6hjEWsIOElCZlZGf34PC/pdynr7kAkOBe15BAKy9DGXe1ptGVA1e RJ+KBpZPNCn9I+amPT2LJfhpR+Bi8QgdioIBTXWZyVOzXH/MIKzvzNE3CzH89HS7NDwV 0p/LgRQ7K7Qt97DIKmgZv8DWToyt1WfEVRC1gMWdxSgWu3oqqkvZOCcHPET7Kc8jswMw gFhg== 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=m6aae9EXAoUMDpihLDXhNEVg+fKLpTLh2YuWJspZ3dg=; b=sLTd5HEoTKCL48BvArjA+cd4OFShrQjkADsTX0MlZNSt27KAGcENTFl8uLgkg5el/D Ejnu3Y+x6PkrP5/2jEPphnGpAuM2/bfRaQR5oK+IyFkyoLz2DlF10trtH4KVzbkao2zn IhiPw4DvEYweFbJZG1x9lfZZqhB+0jSoRty/ysznn9maCpKxdeHqt2A+tGuhqFBd3juD 12u21Kg6nQnX8LYJuU1Q3bk2Up8gf5tOvIfmvSXnHCEWQZJozo/wqSgpj34ojDtU56h7 0ZkTpTL6aSrjThbqERorcb1GlZYe8vr/PjSv5njJ+GTHpFD4Ck1Az33cEHKwa7CgWRCA WLAQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=LPdXMmO9; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 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 lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id p33-20020a635b21000000b003f5f3fc0d1fsi10888883pgb.57.2022.05.23.11.16.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 May 2022 11:16:09 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=LPdXMmO9; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id F22B31649BB; Mon, 23 May 2022 11:14:42 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1343660AbiEWSI3 (ORCPT + 99 others); Mon, 23 May 2022 14:08:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42384 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243627AbiEWRiV (ORCPT ); Mon, 23 May 2022 13:38:21 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9FD37939CA; Mon, 23 May 2022 10:32:37 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 1369C61272; Mon, 23 May 2022 17:31:49 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 151CDC385A9; Mon, 23 May 2022 17:31:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1653327108; bh=Dg8kFihg+woz8ZwiZbcbNhSN4KZAfNYqZI9p+T4462Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LPdXMmO94W8CaphX4Oek9BsefECFE58u1riuRddIVOx3TT3gWvN+OkGfjcRBslU5x +rJO2oeCp7fvZBrHyDzqzu2ewnqZqga3i5ZUePwJ0hGfMdq0ll3SuNwgNApkT1RkRX xN18ZAGmLk9kaIDilxQcf0+WJ3ZCOKHTCfcQB+q0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Markus Suvanto , David Howells , Marc Dionne , linux-afs@lists.infradead.org, kafs-testing+fedora34_64checkkafs-build-496@auristor.com, Linus Torvalds , Sasha Levin Subject: [PATCH 5.17 158/158] afs: Fix afs_getattr() to refetch file status if callback break occurred Date: Mon, 23 May 2022 19:05:15 +0200 Message-Id: <20220523165856.364774177@linuxfoundation.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220523165830.581652127@linuxfoundation.org> References: <20220523165830.581652127@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: David Howells [ Upstream commit 2aeb8c86d49967552394d5e723f87454cb53f501 ] If a callback break occurs (change notification), afs_getattr() needs to issue an FS.FetchStatus RPC operation to update the status of the file being examined by the stat-family of system calls. Fix afs_getattr() to do this if AFS_VNODE_CB_PROMISED has been cleared on a vnode by a callback break. Skip this if AT_STATX_DONT_SYNC is set. This can be tested by appending to a file on one AFS client and then using "stat -L" to examine its length on a machine running kafs. This can also be watched through tracing on the kafs machine. The callback break is seen: kworker/1:1-46 [001] ..... 978.910812: afs_cb_call: c=0000005f YFSCB.CallBack kworker/1:1-46 [001] ...1. 978.910829: afs_cb_break: 100058:23b4c:242d2c2 b=2 s=1 break-cb kworker/1:1-46 [001] ..... 978.911062: afs_call_done: c=0000005f ret=0 ab=0 [0000000082994ead] And then the stat command generated no traffic if unpatched, but with this change a call to fetch the status can be observed: stat-4471 [000] ..... 986.744122: afs_make_fs_call: c=000000ab 100058:023b4c:242d2c2 YFS.FetchStatus stat-4471 [000] ..... 986.745578: afs_call_done: c=000000ab ret=0 ab=0 [0000000087fc8c84] Fixes: 08e0e7c82eea ("[AF_RXRPC]: Make the in-kernel AFS filesystem use AF_RXRPC.") Reported-by: Markus Suvanto Signed-off-by: David Howells cc: Marc Dionne cc: linux-afs@lists.infradead.org Tested-by: Markus Suvanto Tested-by: kafs-testing+fedora34_64checkkafs-build-496@auristor.com Link: https://bugzilla.kernel.org/show_bug.cgi?id=216010 Link: https://lore.kernel.org/r/165308359800.162686.14122417881564420962.stgit@warthog.procyon.org.uk/ # v1 Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin --- fs/afs/inode.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/fs/afs/inode.c b/fs/afs/inode.c index 5964f8aee090..0d6c0885b2d7 100644 --- a/fs/afs/inode.c +++ b/fs/afs/inode.c @@ -727,10 +727,22 @@ int afs_getattr(struct user_namespace *mnt_userns, const struct path *path, { struct inode *inode = d_inode(path->dentry); struct afs_vnode *vnode = AFS_FS_I(inode); - int seq = 0; + struct key *key; + int ret, seq = 0; _enter("{ ino=%lu v=%u }", inode->i_ino, inode->i_generation); + if (!(query_flags & AT_STATX_DONT_SYNC) && + !test_bit(AFS_VNODE_CB_PROMISED, &vnode->flags)) { + key = afs_request_key(vnode->volume->cell); + if (IS_ERR(key)) + return PTR_ERR(key); + ret = afs_validate(vnode, key); + key_put(key); + if (ret < 0) + return ret; + } + do { read_seqbegin_or_lock(&vnode->cb_lock, &seq); generic_fillattr(&init_user_ns, inode, stat); -- 2.35.1