summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorMateusz Guzik <mjguzik@gmail.com>2025-03-12 17:19:41 +0100
committerChristian Brauner <brauner@kernel.org>2025-03-13 09:54:15 +0100
commitdc530c44cd64f9788ec4b2efa04ee7499a04a3f4 (patch)
treea75a09921c76d3ea967e39ded6f5b8846ee456b3 /fs
parent86f40fa6a4675ecfe554c360ab022294742c9a01 (diff)
fs: use debug-only asserts around fd allocation and install
This also restores the check which got removed in 52732bb9abc9ee5b ("fs/file.c: remove sanity_check and add likely/unlikely in alloc_fd()") for performance reasons -- they no longer apply with a debug-only variant. Signed-off-by: Mateusz Guzik <mjguzik@gmail.com> Link: https://lore.kernel.org/r/20250312161941.1261615-1-mjguzik@gmail.com Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/file.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/file.c b/fs/file.c
index 44efdc8c1e27..c8214975e248 100644
--- a/fs/file.c
+++ b/fs/file.c
@@ -577,6 +577,7 @@ repeat:
__set_open_fd(fd, fdt, flags & O_CLOEXEC);
error = fd;
+ VFS_BUG_ON(rcu_access_pointer(fdt->fd[fd]) != NULL);
out:
spin_unlock(&files->file_lock);
@@ -642,7 +643,7 @@ void fd_install(unsigned int fd, struct file *file)
rcu_read_unlock_sched();
spin_lock(&files->file_lock);
fdt = files_fdtable(files);
- WARN_ON(fdt->fd[fd] != NULL);
+ VFS_BUG_ON(rcu_access_pointer(fdt->fd[fd]) != NULL);
rcu_assign_pointer(fdt->fd[fd], file);
spin_unlock(&files->file_lock);
return;
@@ -650,7 +651,7 @@ void fd_install(unsigned int fd, struct file *file)
/* coupled with smp_wmb() in expand_fdtable() */
smp_rmb();
fdt = rcu_dereference_sched(files->fdt);
- BUG_ON(fdt->fd[fd] != NULL);
+ VFS_BUG_ON(rcu_access_pointer(fdt->fd[fd]) != NULL);
rcu_assign_pointer(fdt->fd[fd], file);
rcu_read_unlock_sched();
}