Skip to content

Commit

Permalink
file: Merge __fd_install into fd_install
Browse files Browse the repository at this point in the history
The function __fd_install was added to support binder[1].  With binder
fixed[2] there are no more users.

As fd_install just calls __fd_install with "files=current->files",
merge them together by transforming the files parameter into a
local variable initialized to current->files.

[1] f869e8a ("expose a low-level variant of fd_install() for binder")
[2] 44d8047 ("binder: use standard functions to allocate fds")
Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
v1:https://lkml.kernel.org/r/20200817220425.9389-14-ebiederm@xmission.com
Link: https://lkml.kernel.org/r/20201120231441.29911-18-ebiederm@xmission.com
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
  • Loading branch information
Eric W. Biederman committed Dec 10, 2020
1 parent 775e065 commit d74ba04
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 21 deletions.
25 changes: 6 additions & 19 deletions fs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ static int expand_fdtable(struct files_struct *files, unsigned int nr)
spin_unlock(&files->file_lock);
new_fdt = alloc_fdtable(nr);

/* make sure all __fd_install() have seen resize_in_progress
/* make sure all fd_install() have seen resize_in_progress
* or have finished their rcu_read_lock_sched() section.
*/
if (atomic_read(&files->count) > 1)
Expand All @@ -181,7 +181,7 @@ static int expand_fdtable(struct files_struct *files, unsigned int nr)
rcu_assign_pointer(files->fdt, new_fdt);
if (cur_fdt != &files->fdtab)
call_rcu(&cur_fdt->rcu, free_fdtable_rcu);
/* coupled with smp_rmb() in __fd_install() */
/* coupled with smp_rmb() in fd_install() */
smp_wmb();
return 1;
}
Expand Down Expand Up @@ -584,17 +584,13 @@ EXPORT_SYMBOL(put_unused_fd);
* It should never happen - if we allow dup2() do it, _really_ bad things
* will follow.
*
* NOTE: __fd_install() variant is really, really low-level; don't
* use it unless you are forced to by truly lousy API shoved down
* your throat. 'files' *MUST* be either current->files or obtained
* by get_files_struct(current) done by whoever had given it to you,
* or really bad things will happen. Normally you want to use
* fd_install() instead.
* This consumes the "file" refcount, so callers should treat it
* as if they had called fput(file).
*/

void __fd_install(struct files_struct *files, unsigned int fd,
struct file *file)
void fd_install(unsigned int fd, struct file *file)
{
struct files_struct *files = current->files;
struct fdtable *fdt;

rcu_read_lock_sched();
Expand All @@ -616,15 +612,6 @@ void __fd_install(struct files_struct *files, unsigned int fd,
rcu_read_unlock_sched();
}

/*
* This consumes the "file" refcount, so callers should treat it
* as if they had called fput(file).
*/
void fd_install(unsigned int fd, struct file *file)
{
__fd_install(current->files, fd, file);
}

EXPORT_SYMBOL(fd_install);

static struct file *pick_file(struct files_struct *files, unsigned fd)
Expand Down
2 changes: 0 additions & 2 deletions include/linux/fdtable.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,6 @@ int iterate_fd(struct files_struct *, unsigned,

extern int __alloc_fd(struct files_struct *files,
unsigned start, unsigned end, unsigned flags);
extern void __fd_install(struct files_struct *files,
unsigned int fd, struct file *file);
extern int __close_fd(struct files_struct *files,
unsigned int fd);
extern int __close_range(unsigned int fd, unsigned int max_fd, unsigned int flags);
Expand Down

0 comments on commit d74ba04

Please sign in to comment.