Unverified Commit 13dce771 authored by Christian Brauner's avatar Christian Brauner
Browse files

eventpoll: convert do_epoll_create() to FD_PREPARE()

parent 0f428841
Loading
Loading
Loading
Loading
+10 −22
Original line number Diff line number Diff line
@@ -2165,9 +2165,8 @@ static void clear_tfile_check_list(void)
 */
static int do_epoll_create(int flags)
{
	int error, fd;
	struct eventpoll *ep = NULL;
	struct file *file;
	int error;
	struct eventpoll *ep;

	/* Check the EPOLL_* constant for consistency.  */
	BUILD_BUG_ON(EPOLL_CLOEXEC != O_CLOEXEC);
@@ -2184,26 +2183,15 @@ static int do_epoll_create(int flags)
	 * Creates all the items needed to setup an eventpoll file. That is,
	 * a file structure and a free file descriptor.
	 */
	fd = get_unused_fd_flags(O_RDWR | (flags & O_CLOEXEC));
	if (fd < 0) {
		error = fd;
		goto out_free_ep;
	}
	file = anon_inode_getfile("[eventpoll]", &eventpoll_fops, ep,
				 O_RDWR | (flags & O_CLOEXEC));
	if (IS_ERR(file)) {
		error = PTR_ERR(file);
		goto out_free_fd;
	}
	ep->file = file;
	fd_install(fd, file);
	return fd;

out_free_fd:
	put_unused_fd(fd);
out_free_ep:
	FD_PREPARE(fdf, O_RDWR | (flags & O_CLOEXEC),
		   anon_inode_getfile("[eventpoll]", &eventpoll_fops, ep,
				      O_RDWR | (flags & O_CLOEXEC)));
	if (fdf.err) {
		ep_clear_and_put(ep);
	return error;
		return fdf.err;
	}
	ep->file = fd_prepare_file(fdf);
	return fd_publish(fdf);
}

SYSCALL_DEFINE1(epoll_create1, int, flags)