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

Commit 1deb46e2 authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Al Viro
Browse files

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: default avatarOleg Nesterov <oleg@redhat.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent ce08b62d
Loading
Loading
Loading
Loading
+8 −17
Original line number Diff line number Diff line
@@ -637,16 +637,16 @@ void do_close_on_exec(struct files_struct *files)
	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 file *file;

	rcu_read_lock();
	file = fcheck_files(files, fd);
	if (file) {
		/* 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))
			file = NULL;
	}
@@ -655,25 +655,16 @@ struct file *fget(unsigned int fd)
	return file;
}

struct file *fget(unsigned int fd)
{
	return __fget(fd, FMODE_PATH);
}
EXPORT_SYMBOL(fget);

struct file *fget_raw(unsigned int fd)
{
	struct file *file;
	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;
	return __fget(fd, 0);
}
	rcu_read_unlock();

	return file;
}

EXPORT_SYMBOL(fget_raw);

/*