Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b9e02af0 authored by Al Viro's avatar Al Viro
Browse files

don't bother with call_rcu() in put_files_struct()



At that point nobody can see us anyway; everything that
looks at files_fdtable(files) is separated from the
guts of put_files_struct(files) - either since files is
current->files or because we fetched it under task_lock()
and hadn't dropped that yet, or because we'd bumped
files->count while holding task_lock()...

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 7cf4dc3c
Loading
Loading
Loading
Loading
+5 −9
Original line number Diff line number Diff line
@@ -447,18 +447,14 @@ void put_files_struct(struct files_struct *files)

	if (atomic_dec_and_test(&files->count)) {
		close_files(files);
		/*
		 * Free the fd and fdset arrays if we expanded them.
		 * If the fdtable was embedded, pass files for freeing
		 * at the end of the RCU grace period. Otherwise,
		 * you can free files immediately.
		 */
		/* not really needed, since nobody can see us */
		rcu_read_lock();
		fdt = files_fdtable(files);
		rcu_read_unlock();
		/* free the arrays if they are not embedded */
		if (fdt != &files->fdtab)
			__free_fdtable(fdt);
		kmem_cache_free(files_cachep, files);
		free_fdtable(fdt);
		rcu_read_unlock();
	}
}