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>
This commit is contained in:
parent
86f40fa6a4
commit
dc530c44cd
@ -577,6 +577,7 @@ static int alloc_fd(unsigned start, unsigned end, unsigned flags)
|
||||
|
||||
__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();
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user