From mboxrd@z Thu Jan 1 00:00:00 1970 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.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable 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 1242FC433E9 for ; Sun, 28 Mar 2021 14:45:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EC5126196C for ; Sun, 28 Mar 2021 14:45:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231363AbhC1Oo4 (ORCPT ); Sun, 28 Mar 2021 10:44:56 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:33608 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230526AbhC1Oo0 (ORCPT ); Sun, 28 Mar 2021 10:44:26 -0400 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: tonyk) with ESMTPSA id C8BF11F4418B From: =?UTF-8?q?Andr=C3=A9=20Almeida?= To: Alexander Viro , Theodore Ts'o , Andreas Dilger , Jaegeuk Kim , Chao Yu Cc: krisman@collabora.com, kernel@collabora.com, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, Daniel Rosenberg , Chao Yu , =?UTF-8?q?Andr=C3=A9=20Almeida?= Subject: [PATCH 1/3] fs/dcache: Add d_clear_dir_neg_dentries() Date: Sun, 28 Mar 2021 11:43:54 -0300 Message-Id: <20210328144356.12866-2-andrealmeid@collabora.com> X-Mailer: git-send-email 2.31.0 In-Reply-To: <20210328144356.12866-1-andrealmeid@collabora.com> References: <20210328144356.12866-1-andrealmeid@collabora.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org For directories with negative dentries that are becoming case-insensitive dirs, we need to remove all those negative dentries, otherwise they will become dangling dentries. During the creation of a new file, if a d_hash collision happens and the names match in a case-insensitive way, the name of the file will be the name defined at the negative dentry, that may be different from the specified by the user. To prevent this from happening, we need to remove all dentries in a directory. Given that the directory must be empty before we call this function we are sure that all dentries there will be negative. Create a function to remove all negative dentries from a directory, to be used as explained above by filesystems that support case-insensitive lookups. Signed-off-by: André Almeida --- fs/dcache.c | 27 +++++++++++++++++++++++++++ include/linux/dcache.h | 1 + 2 files changed, 28 insertions(+) diff --git a/fs/dcache.c b/fs/dcache.c index 7d24ff7eb206..fafb3016d6fd 100644 --- a/fs/dcache.c +++ b/fs/dcache.c @@ -1723,6 +1723,33 @@ void d_invalidate(struct dentry *dentry) } EXPORT_SYMBOL(d_invalidate); +/** + * d_clear_dir_neg_dentries - Remove negative dentries in an inode + * @dir: Directory to clear negative dentries + * + * For directories with negative dentries that are becoming case-insensitive + * dirs, we need to remove all those negative dentries, otherwise they will + * become dangling dentries. During the creation of a new file, if a d_hash + * collision happens and the names match in a case-insensitive, the name of + * the file will be the name defined at the negative dentry, that can be + * different from the specified by the user. To prevent this from happening, we + * need to remove all dentries in a directory. Given that the directory must be + * empty before we call this function we are sure that all dentries there will + * be negative. + */ +void d_clear_dir_neg_dentries(struct inode *dir) +{ + struct dentry *alias, *dentry; + + hlist_for_each_entry(alias, &dir->i_dentry, d_u.d_alias) { + list_for_each_entry(dentry, &alias->d_subdirs, d_child) { + d_drop(dentry); + dput(dentry); + } + } +} +EXPORT_SYMBOL(d_clear_dir_neg_dentries); + /** * __d_alloc - allocate a dcache entry * @sb: filesystem it will belong to diff --git a/include/linux/dcache.h b/include/linux/dcache.h index c1e48014106f..c43cd0be077f 100644 --- a/include/linux/dcache.h +++ b/include/linux/dcache.h @@ -250,6 +250,7 @@ extern void shrink_dcache_sb(struct super_block *); extern void shrink_dcache_parent(struct dentry *); extern void shrink_dcache_for_umount(struct super_block *); extern void d_invalidate(struct dentry *); +extern void d_clear_dir_neg_dentries(struct inode *); /* only used at mount-time */ extern struct dentry * d_make_root(struct inode *); -- 2.31.0 From mboxrd@z Thu Jan 1 00:00:00 1970 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.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED, 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 205E7C433DB for ; Sun, 28 Mar 2021 14:46:30 +0000 (UTC) Received: from lists.sourceforge.net (lists.sourceforge.net [216.105.38.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C86F36196C for ; Sun, 28 Mar 2021 14:46:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C86F36196C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linux-f2fs-devel-bounces@lists.sourceforge.net Received: from [127.0.0.1] (helo=sfs-ml-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from ) id 1lQWgO-0004xl-Pu; Sun, 28 Mar 2021 14:46:28 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lQWef-0004tU-At for linux-f2fs-devel@lists.sourceforge.net; Sun, 28 Mar 2021 14:44:41 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:Content-Type:MIME-Version :References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=gcBa8LpB132GckVMeypT70c76X/WTbpPd+vx3FK0Mxg=; b=Iw4RIT7SrnPLJY6TbM0/91MyQZ cpsKAoYR4FZ+AEF1Qkm/G+DIfZxdVsxj5A+EDEMNPwRSGqU3VcHLPGLJqj9vIiWqojDu/5xVsTqct XI0EeI2xUsCvRQwHbE5mf4OY70Bvn0mwxDR18NRBBd3/3v2zAddJ9BIqhVZm+vxzOMT8=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=gcBa8LpB132GckVMeypT70c76X/WTbpPd+vx3FK0Mxg=; b=O2hhccRJVJwK60BsQivaVZEVz2 Lmc46cm/lpLFJPqpyA6f69/FnnUuZWqQRKefX6IJc/7QMI2M09vztXyb77qcsrmw7gNNNvlde87Gm yqFbjyGdApBRjRt8MWo2ARFj0KV1l/mrva8oXvsBBBIlTv468JCAMe/eYqGuka/ckdkU=; Received: from bhuna.collabora.co.uk ([46.235.227.227]) by sfi-mx-1.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.2) id 1lQWeV-004h9O-Fy for linux-f2fs-devel@lists.sourceforge.net; Sun, 28 Mar 2021 14:44:41 +0000 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: tonyk) with ESMTPSA id C8BF11F4418B From: =?UTF-8?q?Andr=C3=A9=20Almeida?= To: Alexander Viro , Theodore Ts'o , Andreas Dilger , Jaegeuk Kim , Chao Yu Date: Sun, 28 Mar 2021 11:43:54 -0300 Message-Id: <20210328144356.12866-2-andrealmeid@collabora.com> X-Mailer: git-send-email 2.31.0 In-Reply-To: <20210328144356.12866-1-andrealmeid@collabora.com> References: <20210328144356.12866-1-andrealmeid@collabora.com> MIME-Version: 1.0 X-Headers-End: 1lQWeV-004h9O-Fy Subject: [f2fs-dev] [PATCH 1/3] fs/dcache: Add d_clear_dir_neg_dentries() X-BeenThere: linux-f2fs-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kernel@collabora.com, Daniel Rosenberg , linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, =?UTF-8?q?Andr=C3=A9=20Almeida?= , linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, krisman@collabora.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net Rm9yIGRpcmVjdG9yaWVzIHdpdGggbmVnYXRpdmUgZGVudHJpZXMgdGhhdCBhcmUgYmVjb21pbmcg Y2FzZS1pbnNlbnNpdGl2ZQpkaXJzLCB3ZSBuZWVkIHRvIHJlbW92ZSBhbGwgdGhvc2UgbmVnYXRp dmUgZGVudHJpZXMsIG90aGVyd2lzZSB0aGV5IHdpbGwKYmVjb21lIGRhbmdsaW5nIGRlbnRyaWVz LiBEdXJpbmcgdGhlIGNyZWF0aW9uIG9mIGEgbmV3IGZpbGUsIGlmIGEgZF9oYXNoCmNvbGxpc2lv biBoYXBwZW5zIGFuZCB0aGUgbmFtZXMgbWF0Y2ggaW4gYSBjYXNlLWluc2Vuc2l0aXZlIHdheSwg dGhlIG5hbWUKb2YgdGhlIGZpbGUgd2lsbCBiZSB0aGUgbmFtZSBkZWZpbmVkIGF0IHRoZSBuZWdh dGl2ZSBkZW50cnksIHRoYXQgbWF5IGJlCmRpZmZlcmVudCBmcm9tIHRoZSBzcGVjaWZpZWQgYnkg dGhlIHVzZXIuIFRvIHByZXZlbnQgdGhpcyBmcm9tCmhhcHBlbmluZywgd2UgbmVlZCB0byByZW1v dmUgYWxsIGRlbnRyaWVzIGluIGEgZGlyZWN0b3J5LiBHaXZlbiB0aGF0IHRoZQpkaXJlY3Rvcnkg bXVzdCBiZSBlbXB0eSBiZWZvcmUgd2UgY2FsbCB0aGlzIGZ1bmN0aW9uIHdlIGFyZSBzdXJlIHRo YXQKYWxsIGRlbnRyaWVzIHRoZXJlIHdpbGwgYmUgbmVnYXRpdmUuCgpDcmVhdGUgYSBmdW5jdGlv biB0byByZW1vdmUgYWxsIG5lZ2F0aXZlIGRlbnRyaWVzIGZyb20gYSBkaXJlY3RvcnksIHRvCmJl IHVzZWQgYXMgZXhwbGFpbmVkIGFib3ZlIGJ5IGZpbGVzeXN0ZW1zIHRoYXQgc3VwcG9ydCBjYXNl LWluc2Vuc2l0aXZlCmxvb2t1cHMuCgpTaWduZWQtb2ZmLWJ5OiBBbmRyw6kgQWxtZWlkYSA8YW5k cmVhbG1laWRAY29sbGFib3JhLmNvbT4KLS0tCiBmcy9kY2FjaGUuYyAgICAgICAgICAgIHwgMjcg KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL2xpbnV4L2RjYWNoZS5oIHwgIDEg KwogMiBmaWxlcyBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZnMvZGNh Y2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCA3ZDI0ZmY3ZWIyMDYuLmZhZmIzMDE2ZDZmZCAxMDA2 NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTE3MjMsNiArMTcyMywz MyBAQCB2b2lkIGRfaW52YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB9CiBFWFBPUlRf U1lNQk9MKGRfaW52YWxpZGF0ZSk7CiAKKy8qKgorICogZF9jbGVhcl9kaXJfbmVnX2RlbnRyaWVz IC0gUmVtb3ZlIG5lZ2F0aXZlIGRlbnRyaWVzIGluIGFuIGlub2RlCisgKiBAZGlyOiBEaXJlY3Rv cnkgdG8gY2xlYXIgbmVnYXRpdmUgZGVudHJpZXMKKyAqCisgKiBGb3IgZGlyZWN0b3JpZXMgd2l0 aCBuZWdhdGl2ZSBkZW50cmllcyB0aGF0IGFyZSBiZWNvbWluZyBjYXNlLWluc2Vuc2l0aXZlCisg KiBkaXJzLCB3ZSBuZWVkIHRvIHJlbW92ZSBhbGwgdGhvc2UgbmVnYXRpdmUgZGVudHJpZXMsIG90 aGVyd2lzZSB0aGV5IHdpbGwKKyAqIGJlY29tZSBkYW5nbGluZyBkZW50cmllcy4gRHVyaW5nIHRo ZSBjcmVhdGlvbiBvZiBhIG5ldyBmaWxlLCBpZiBhIGRfaGFzaAorICogY29sbGlzaW9uIGhhcHBl bnMgYW5kIHRoZSBuYW1lcyBtYXRjaCBpbiBhIGNhc2UtaW5zZW5zaXRpdmUsIHRoZSBuYW1lIG9m CisgKiB0aGUgZmlsZSB3aWxsIGJlIHRoZSBuYW1lIGRlZmluZWQgYXQgdGhlIG5lZ2F0aXZlIGRl bnRyeSwgdGhhdCBjYW4gYmUKKyAqIGRpZmZlcmVudCBmcm9tIHRoZSBzcGVjaWZpZWQgYnkgdGhl IHVzZXIuIFRvIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZywgd2UKKyAqIG5lZWQgdG8gcmVt b3ZlIGFsbCBkZW50cmllcyBpbiBhIGRpcmVjdG9yeS4gR2l2ZW4gdGhhdCB0aGUgZGlyZWN0b3J5 IG11c3QgYmUKKyAqIGVtcHR5IGJlZm9yZSB3ZSBjYWxsIHRoaXMgZnVuY3Rpb24gd2UgYXJlIHN1 cmUgdGhhdCBhbGwgZGVudHJpZXMgdGhlcmUgd2lsbAorICogYmUgbmVnYXRpdmUuCisgKi8KK3Zv aWQgZF9jbGVhcl9kaXJfbmVnX2RlbnRyaWVzKHN0cnVjdCBpbm9kZSAqZGlyKQoreworCXN0cnVj dCBkZW50cnkgKmFsaWFzLCAqZGVudHJ5OworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoYWxpYXMs ICZkaXItPmlfZGVudHJ5LCBkX3UuZF9hbGlhcykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRl bnRyeSwgJmFsaWFzLT5kX3N1YmRpcnMsIGRfY2hpbGQpIHsKKwkJCWRfZHJvcChkZW50cnkpOwor CQkJZHB1dChkZW50cnkpOworCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTChkX2NsZWFyX2Rpcl9u ZWdfZGVudHJpZXMpOworCiAvKioKICAqIF9fZF9hbGxvYwktCWFsbG9jYXRlIGEgZGNhY2hlIGVu dHJ5CiAgKiBAc2I6IGZpbGVzeXN0ZW0gaXQgd2lsbCBiZWxvbmcgdG8KZGlmZiAtLWdpdCBhL2lu Y2x1ZGUvbGludXgvZGNhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCmluZGV4IGMxZTQ4 MDE0MTA2Zi4uYzQzY2QwYmUwNzdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5o CisrKyBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKQEAgLTI1MCw2ICsyNTAsNyBAQCBleHRlcm4g dm9pZCBzaHJpbmtfZGNhY2hlX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGV4dGVybiB2b2lk IHNocmlua19kY2FjaGVfcGFyZW50KHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gdm9pZCBzaHJp bmtfZGNhY2hlX2Zvcl91bW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogZXh0ZXJuIHZvaWQg ZF9pbnZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKik7CitleHRlcm4gdm9pZCBkX2NsZWFyX2Rpcl9u ZWdfZGVudHJpZXMoc3RydWN0IGlub2RlICopOwogCiAvKiBvbmx5IHVzZWQgYXQgbW91bnQtdGlt ZSAqLwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX21ha2Vfcm9vdChzdHJ1Y3QgaW5vZGUgKik7 Ci0tIAoyLjMxLjAKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KTGludXgtZjJmcy1kZXZlbCBtYWlsaW5nIGxpc3QKTGludXgtZjJmcy1kZXZlbEBsaXN0 cy5zb3VyY2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlz dGluZm8vbGludXgtZjJmcy1kZXZlbAo=