Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp549514pxb; Fri, 16 Apr 2021 11:56:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzRI5kEhi509moQhESDCEvf7tXQz/XWELnVBVmqSETecEq1zOxZP+TbiU4WzS2BuWdadW8y X-Received: by 2002:aa7:cf03:: with SMTP id a3mr11545805edy.142.1618599360585; Fri, 16 Apr 2021 11:56:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618599360; cv=none; d=google.com; s=arc-20160816; b=qKAA31UqRABG1DMIUC4HsdsEvxl4tHu6Y74OvNNBYPpnvSH3CTNvKw907/IDpudKB5 zZxWHImJv7jNiFHzv5PENHNgUMkfUA6lcMt8eUUZoRsM0gwab+mi9jZxCNO6GwJsz9oP 6CBOpBWvVa4ICXw+K9yWC1fZMPG3qhiNhuw5b4+/Yq9D08pLWb1AtF3xKiA+zPF0H4Eo 2Lf8UAko7bCIFF/q3oX1uoItQ44cI9Hn8sIjsszW7R7DLe0VL7fX5PspuVE1fnLQ/7CL V8FPL2eLZ73SV4bi0iO5rlvgPpciMoJOKsJV/aKCbXokJ/GQMlua2N/yYtEnrHvMyElC EdAw== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=HNdoPRhe9ydcDzsOjKuBgbIIMgX8oUiaq4I6X+MyuLg=; b=x9XsCVapZHx7747PUa+WQR61XyG5+/CSf8HvSZZd2tOyn1QX5Rjo0oPB76aDyh5X80 jotqWucy+h8IjjsbaUdLxuQ10R+E4kPoOygzX+ebrQ2FHN0YXJSwBwt7U3rKsQhARumh XgVnmfevJDhOmxJWfsc18bqyqyGfi6lF1PfCaDkA4N2eCv2Cn2cvk/eqPQGa4L0p9mFk +EfVd0tC2TVCyYcPnEx4IPIzCN7SNheKJOKkjDUK4w07B0yQMjnZwTnTf2D/XmIAYFV8 R+KttbM2s5ISMGcEwzbZPRWAeMTkIco1PnBLH5T7qa/ljXpccFP0jkeFqamvIuryZ3/n LLfw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="c/vt2HVw"; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ky1si84451ejc.438.2021.04.16.11.55.37; Fri, 16 Apr 2021 11:56:00 -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=@gmail.com header.s=20161025 header.b="c/vt2HVw"; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240701AbhDPRUp (ORCPT + 99 others); Fri, 16 Apr 2021 13:20:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53946 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240673AbhDPRUo (ORCPT ); Fri, 16 Apr 2021 13:20:44 -0400 Received: from mail-pg1-x52a.google.com (mail-pg1-x52a.google.com [IPv6:2607:f8b0:4864:20::52a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 21930C061574; Fri, 16 Apr 2021 10:20:18 -0700 (PDT) Received: by mail-pg1-x52a.google.com with SMTP id p12so19637701pgj.10; Fri, 16 Apr 2021 10:20:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=HNdoPRhe9ydcDzsOjKuBgbIIMgX8oUiaq4I6X+MyuLg=; b=c/vt2HVwweliTRqSdVAM0D/2ZFdsaG03KL3iQnQ8A17zQm4+r2KYQCg+edqIEmDQFY 7Fym+OV8RAgyTjQWUt1fdTFYz6vdFg4RNFrnCZHXDNfXNZ9k3Uxms1bFAjstw61GW/CX ZpZt5cpSitvmk/+jYnadKjEpg8qUELibXQvEcXYopTyDHRq8ghG7Q6mgHQS1D0J+QjYD ZGv/w44aeF8f4wrmwz157usBme5VCUowoA3cQf5NRR35sKYGzsczCQH2SSiVssC/rFFG tL9WLkAtCrwnsNBNtbwalDO8ZnEo9TNq4bD1ng1hXE6sLocDZtpVpMX6MSJ/Agl0VS/O SpgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=HNdoPRhe9ydcDzsOjKuBgbIIMgX8oUiaq4I6X+MyuLg=; b=WN6jdyjWR0Z1JU+12+PiiuOaBeM5T8CE6bQQZYc6rQ8ZKeoudkPhkZSoNjB0NfDA6y HrAbBB2aPGGpXuDbgrfFXX3hu2Xv8iSxK28Y6VXuM16Fyi2Yy9JNf80uQUU+bNlJR49m 1QAZPSiq/NLPw9PUGAPccHalOTtsN/epUN3qbp8z/i51sHViUsOuiHbPblegPlWK7Ky3 SxCHiGtTS62idQTQq+u5HiXaEckZry217XPJbEdxLczuqfzaX+8OSrF0gJlqBtTYttzr SSJuSKX0bPZYu4OJCeWMpzOYIJU/8i6Bg9P4HGjOvUtzx5sl03o4TR1BOf24HA+DsrbM Sqpg== X-Gm-Message-State: AOAM530o5To5AU3PWf71Rz+KhPLgpFg6yF1RHHYea0iXWHsWXIFvndTc IQOjUcrphuP+uSrewy9vAfQIwV5jW/MU+w== X-Received: by 2002:a63:1a50:: with SMTP id a16mr164697pgm.92.1618593617602; Fri, 16 Apr 2021 10:20:17 -0700 (PDT) Received: from localhost.localdomain (220-130-175-235.HINET-IP.hinet.net. [220.130.175.235]) by smtp.gmail.com with ESMTPSA id 33sm5536776pgq.21.2021.04.16.10.20.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Apr 2021 10:20:17 -0700 (PDT) From: Chung-Chiang Cheng X-Google-Original-From: Chung-Chiang Cheng To: christian.brauner@ubuntu.com, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Cc: cccheng@synology.com Subject: [PATCH] hfsplus: prevent negative dentries when casefolded Date: Sat, 17 Apr 2021 01:20:12 +0800 Message-Id: <20210416172012.8667-1-cccheng@synology.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org hfsplus uses the case-insensitive filenames by default, but VFS negative dentries are incompatible with case-insensitive. For example, the following instructions will get a cached filename 'aaa' which isn't expected. There is no such problem in macOS. touch aaa rm aaa touch AAA This patch just takes the same approach as ext4 and f2fs to prevent negative dentries for this issue. Signed-off-by: Chung-Chiang Cheng --- fs/hfsplus/dir.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/fs/hfsplus/dir.c b/fs/hfsplus/dir.c index 03e6c046faf4..fcab8f09b6af 100644 --- a/fs/hfsplus/dir.c +++ b/fs/hfsplus/dir.c @@ -121,6 +121,9 @@ static struct dentry *hfsplus_lookup(struct inode *dir, struct dentry *dentry, if (S_ISREG(inode->i_mode)) HFSPLUS_I(inode)->linkid = linkid; out: + /* Prevent the negative dentry in the casefolded form from being cached */ + if (!inode && test_bit(HFSPLUS_SB_CASEFOLD, &HFSPLUS_SB(sb)->flags)) + return NULL; return d_splice_alias(inode, dentry); fail: hfs_find_exit(&fd); @@ -407,6 +410,12 @@ static int hfsplus_unlink(struct inode *dir, struct dentry *dentry) sbi->file_count--; inode->i_ctime = current_time(inode); mark_inode_dirty(inode); + + /* VFS negative dentries are incompatible with encoding and + * case-insensitiveness + */ + if (test_bit(HFSPLUS_SB_CASEFOLD, &sbi->flags)) + d_invalidate(dentry); out: mutex_unlock(&sbi->vh_mutex); return res; @@ -429,6 +438,12 @@ static int hfsplus_rmdir(struct inode *dir, struct dentry *dentry) inode->i_ctime = current_time(inode); hfsplus_delete_inode(inode); mark_inode_dirty(inode); + + /* VFS negative dentries are incompatible with encoding and + * case-insensitiveness + */ + if (test_bit(HFSPLUS_SB_CASEFOLD, &sbi->flags)) + d_invalidate(dentry); out: mutex_unlock(&sbi->vh_mutex); return res; -- 2.25.1