fs: factor out common code in fget() and fget_raw()
Apart from FMODE_PATH check fget() and fget_raw() are identical, shift the code into the new simple helper, __fget(fd, mask). Saves 160 bytes. Signed-off-by: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
ce08b62d18
commit
1deb46e256
25
fs/file.c
25
fs/file.c
@ -637,16 +637,16 @@ void do_close_on_exec(struct files_struct *files)
|
|||||||
spin_unlock(&files->file_lock);
|
spin_unlock(&files->file_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct file *fget(unsigned int fd)
|
static struct file *__fget(unsigned int fd, fmode_t mask)
|
||||||
{
|
{
|
||||||
struct file *file;
|
|
||||||
struct files_struct *files = current->files;
|
struct files_struct *files = current->files;
|
||||||
|
struct file *file;
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
file = fcheck_files(files, fd);
|
file = fcheck_files(files, fd);
|
||||||
if (file) {
|
if (file) {
|
||||||
/* File object ref couldn't be taken */
|
/* File object ref couldn't be taken */
|
||||||
if (file->f_mode & FMODE_PATH ||
|
if ((file->f_mode & mask) ||
|
||||||
!atomic_long_inc_not_zero(&file->f_count))
|
!atomic_long_inc_not_zero(&file->f_count))
|
||||||
file = NULL;
|
file = NULL;
|
||||||
}
|
}
|
||||||
@ -655,25 +655,16 @@ struct file *fget(unsigned int fd)
|
|||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct file *fget(unsigned int fd)
|
||||||
|
{
|
||||||
|
return __fget(fd, FMODE_PATH);
|
||||||
|
}
|
||||||
EXPORT_SYMBOL(fget);
|
EXPORT_SYMBOL(fget);
|
||||||
|
|
||||||
struct file *fget_raw(unsigned int fd)
|
struct file *fget_raw(unsigned int fd)
|
||||||
{
|
{
|
||||||
struct file *file;
|
return __fget(fd, 0);
|
||||||
struct files_struct *files = current->files;
|
|
||||||
|
|
||||||
rcu_read_lock();
|
|
||||||
file = fcheck_files(files, fd);
|
|
||||||
if (file) {
|
|
||||||
/* File object ref couldn't be taken */
|
|
||||||
if (!atomic_long_inc_not_zero(&file->f_count))
|
|
||||||
file = NULL;
|
|
||||||
}
|
|
||||||
rcu_read_unlock();
|
|
||||||
|
|
||||||
return file;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(fget_raw);
|
EXPORT_SYMBOL(fget_raw);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user