From: cel@kernel.org
To: Hugh Dickins <hughd@google.com>,
Andrew Morten <akpm@linux-foundation.org>,
Christian Brauner <brauner@kernel.org>,
Al Viro <viro@zeniv.linux.org.uk>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Sasha Levin <sashal@kernel.org>
Cc: <linux-fsdevel@vger.kernel.org>, <stable@vger.kernel.org>,
<linux-mm@kvack.org>,
yukuai3@huawei.com, yangerkun@huawei.com,
Chuck Lever <chuck.lever@oracle.com>
Subject: [RFC PATCH v6.6 08/10] Revert "libfs: Add simple_offset_empty()"
Date: Fri, 24 Jan 2025 14:19:43 -0500 [thread overview]
Message-ID: <20250124191946.22308-9-cel@kernel.org> (raw)
In-Reply-To: <20250124191946.22308-1-cel@kernel.org>
From: Chuck Lever <chuck.lever@oracle.com>
[ Upstream commit d7bde4f27ceef3dc6d72010a20d4da23db835a32 ]
simple_empty() and simple_offset_empty() perform the same task.
The latter's use as a canary to find bugs has not found any new
issues. A subsequent patch will remove the use of the mtree for
iterating directory contents, so revert back to using a similar
mechanism for determining whether a directory is indeed empty.
Only one such mechanism is ever needed.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Link: https://lore.kernel.org/r/20241228175522.1854234-3-cel@kernel.org
Reviewed-by: Yang Erkun <yangerkun@huawei.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
[ cel: adjusted to apply to origin/linux-6.6.y ]
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
fs/libfs.c | 32 --------------------------------
include/linux/fs.h | 1 -
mm/shmem.c | 4 ++--
3 files changed, 2 insertions(+), 35 deletions(-)
diff --git a/fs/libfs.c b/fs/libfs.c
index 200bcfc2ac34..082bacf0b9e6 100644
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -324,38 +324,6 @@ void simple_offset_remove(struct offset_ctx *octx, struct dentry *dentry)
offset_set(dentry, 0);
}
-/**
- * simple_offset_empty - Check if a dentry can be unlinked
- * @dentry: dentry to be tested
- *
- * Returns 0 if @dentry is a non-empty directory; otherwise returns 1.
- */
-int simple_offset_empty(struct dentry *dentry)
-{
- struct inode *inode = d_inode(dentry);
- struct offset_ctx *octx;
- struct dentry *child;
- unsigned long index;
- int ret = 1;
-
- if (!inode || !S_ISDIR(inode->i_mode))
- return ret;
-
- index = DIR_OFFSET_MIN;
- octx = inode->i_op->get_offset_ctx(inode);
- xa_for_each(&octx->xa, index, child) {
- spin_lock(&child->d_lock);
- if (simple_positive(child)) {
- spin_unlock(&child->d_lock);
- ret = 0;
- break;
- }
- spin_unlock(&child->d_lock);
- }
-
- return ret;
-}
-
/**
* simple_offset_rename - handle directory offsets for rename
* @old_dir: parent directory of source entry
diff --git a/include/linux/fs.h b/include/linux/fs.h
index e4d139fcaad0..e47596d354ff 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -3197,7 +3197,6 @@ struct offset_ctx {
void simple_offset_init(struct offset_ctx *octx);
int simple_offset_add(struct offset_ctx *octx, struct dentry *dentry);
void simple_offset_remove(struct offset_ctx *octx, struct dentry *dentry);
-int simple_offset_empty(struct dentry *dentry);
int simple_offset_rename(struct inode *old_dir, struct dentry *old_dentry,
struct inode *new_dir, struct dentry *new_dentry);
int simple_offset_rename_exchange(struct inode *old_dir,
diff --git a/mm/shmem.c b/mm/shmem.c
index ab2b0e87b051..283fb62084d4 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -3368,7 +3368,7 @@ static int shmem_unlink(struct inode *dir, struct dentry *dentry)
static int shmem_rmdir(struct inode *dir, struct dentry *dentry)
{
- if (!simple_offset_empty(dentry))
+ if (!simple_empty(dentry))
return -ENOTEMPTY;
drop_nlink(d_inode(dentry));
@@ -3425,7 +3425,7 @@ static int shmem_rename2(struct mnt_idmap *idmap,
return simple_offset_rename_exchange(old_dir, old_dentry,
new_dir, new_dentry);
- if (!simple_offset_empty(new_dentry))
+ if (!simple_empty(new_dentry))
return -ENOTEMPTY;
if (flags & RENAME_WHITEOUT) {
--
2.47.0
next prev parent reply other threads:[~2025-01-24 19:20 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-24 19:19 [RFC PATCH v6.6 00/10] Address CVE-2024-46701 cel
2025-01-24 19:19 ` [RFC PATCH v6.6 01/10] libfs: Re-arrange locking in offset_iterate_dir() cel
2025-01-24 19:19 ` [RFC PATCH v6.6 02/10] libfs: Define a minimum directory offset cel
2025-01-30 8:59 ` Patch "libfs: Define a minimum directory offset" has been added to the 6.6-stable tree gregkh
2025-01-24 19:19 ` [RFC PATCH v6.6 03/10] libfs: Add simple_offset_empty() cel
2025-01-30 8:59 ` Patch "libfs: Add simple_offset_empty()" has been added to the 6.6-stable tree gregkh
2025-01-24 19:19 ` [RFC PATCH v6.6 04/10] libfs: Fix simple_offset_rename_exchange() cel
2025-01-30 8:59 ` Patch "libfs: Fix simple_offset_rename_exchange()" has been added to the 6.6-stable tree gregkh
2025-01-24 19:19 ` [RFC PATCH v6.6 05/10] libfs: Add simple_offset_rename() API cel
2025-01-30 8:59 ` Patch "libfs: Add simple_offset_rename() API" has been added to the 6.6-stable tree gregkh
2025-01-24 19:19 ` [RFC PATCH v6.6 06/10] shmem: Fix shmem_rename2() cel
2025-01-30 8:59 ` Patch "shmem: Fix shmem_rename2()" has been added to the 6.6-stable tree gregkh
2025-01-24 19:19 ` [RFC PATCH v6.6 07/10] libfs: Return ENOSPC when the directory offset range is exhausted cel
2025-01-30 8:59 ` Patch "libfs: Return ENOSPC when the directory offset range is exhausted" has been added to the 6.6-stable tree gregkh
2025-01-24 19:19 ` cel [this message]
2025-01-30 8:59 ` Patch "Revert "libfs: Add simple_offset_empty()"" " gregkh
2025-01-24 19:19 ` [RFC PATCH v6.6 09/10] libfs: Replace simple_offset end-of-directory detection cel
2025-01-30 8:59 ` Patch "libfs: Replace simple_offset end-of-directory detection" has been added to the 6.6-stable tree gregkh
2025-01-24 19:19 ` [RFC PATCH v6.6 10/10] libfs: Use d_children list to iterate simple_offset directories cel
2025-01-30 8:59 ` Patch "libfs: Use d_children list to iterate simple_offset directories" has been added to the 6.6-stable tree gregkh
2025-01-29 13:55 ` [RFC PATCH v6.6 00/10] Address CVE-2024-46701 Chuck Lever
2025-01-29 14:50 ` Greg Kroah-Hartman
2025-01-29 15:06 ` Chuck Lever
2025-01-29 15:21 ` Greg Kroah-Hartman
2025-01-29 16:37 ` Chuck Lever
2025-01-30 8:45 ` Greg Kroah-Hartman
2025-01-30 14:02 ` Chuck Lever
2025-01-30 14:24 ` Greg Kroah-Hartman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250124191946.22308-9-cel@kernel.org \
--to=cel@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=brauner@kernel.org \
--cc=chuck.lever@oracle.com \
--cc=gregkh@linuxfoundation.org \
--cc=hughd@google.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.org \
--cc=viro@zeniv.linux.org.uk \
--cc=yangerkun@huawei.com \
--cc=yukuai3@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox