From patchwork Fri May 14 01:55:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?5bi45Yek5qWg?= X-Patchwork-Id: 12256933 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 92CFBC433B4 for ; Fri, 14 May 2021 01:55:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6650A61415 for ; Fri, 14 May 2021 01:55:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232177AbhENB4l (ORCPT ); Thu, 13 May 2021 21:56:41 -0400 Received: from mail-m17657.qiye.163.com ([59.111.176.57]:17412 "EHLO mail-m17657.qiye.163.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231154AbhENB4k (ORCPT ); Thu, 13 May 2021 21:56:40 -0400 Received: from SZ-11126892.vivo.xyz (unknown [58.251.74.232]) by mail-m17657.qiye.163.com (Hmail) with ESMTPA id 879092800AB; Fri, 14 May 2021 09:55:26 +0800 (CST) From: Fengnan Chang To: miklos@szeredi.hu, linux-fsdevel@vger.kernel.org Cc: Fengnan Chang Subject: [PATCH] fuse: fix inconsistent status between faccess and mkdir Date: Fri, 14 May 2021 09:55:17 +0800 Message-Id: <20210514015517.258-1-changfengnan@vivo.com> X-Mailer: git-send-email 2.29.2.windows.2 MIME-Version: 1.0 X-HM-Spam-Status: e1kfGhgUHx5ZQUtXWQgYFAkeWUFZS1VLWVdZKFlBSE83V1ktWUFJV1kPCR oVCBIfWUFZGhhIGVYZQ00eTh5OSEMaGk9VEwETFhoSFyQUDg9ZV1kWGg8SFR0UWUFZT0tIVUpKS0 hKTFVLWQY+ X-HM-Sender-Digest: e1kMHhlZQR0aFwgeV1kSHx4VD1lBWUc6NC46Chw4Tz8IDTATLw8cHRpK TUIwCVZVSlVKTUlLQk5MSElMS0hKVTMWGhIXVRgTGhUcHR4VHBUaFTsNEg0UVRgUFkVZV1kSC1lB WU5DVUlOSlVMT1VJSElZV1kIAVlBSkJMTjcG X-HM-Tid: 0a796895ed44da03kuws879092800ab Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org since FUSE caches dentries and attributes with separate timeout, It may happen that checking the permission returns -ENOENT, but because the dentries cache has not timed out, creating the file returns -EEXIST. Fix this by when return ENOENT, mark the entry as stale. Signed-off-by: Fengnan Chang --- fs/fuse/dir.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index 06a18700a845..154dd4578762 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c @@ -1065,6 +1065,14 @@ static int fuse_do_getattr(struct inode *inode, struct kstat *stat, fuse_fillattr(inode, &outarg.attr, stat); } } + if (err == -ENOENT) { + struct dentry *entry; + + entry = d_obtain_alias(inode); + if (!IS_ERR(entry) && get_node_id(inode) != FUSE_ROOT_ID) + fuse_invalidate_entry_cache(entry); + } + return err; } @@ -1226,6 +1234,14 @@ static int fuse_access(struct inode *inode, int mask) fm->fc->no_access = 1; err = 0; } + if (err == -ENOENT) { + struct dentry *entry; + + entry = d_obtain_alias(inode); + if (!IS_ERR(entry) && get_node_id(inode) != FUSE_ROOT_ID) + fuse_invalidate_entry_cache(entry); + } + return err; }