Unverified Commit dc530c44 authored by Mateusz Guzik's avatar Mateusz Guzik Committed by Christian Brauner
Browse files

fs: use debug-only asserts around fd allocation and install



This also restores the check which got removed in 52732bb9
("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: default avatarMateusz Guzik <mjguzik@gmail.com>
Link: https://lore.kernel.org/r/20250312161941.1261615-1-mjguzik@gmail.com


Reviewed-by: default avatarJan Kara <jack@suse.cz>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 86f40fa6
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -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();
}