]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
eventpoll: convert do_epoll_create() to FD_PREPARE()
authorChristian Brauner <brauner@kernel.org>
Sun, 23 Nov 2025 16:33:30 +0000 (17:33 +0100)
committerChristian Brauner <brauner@kernel.org>
Fri, 28 Nov 2025 11:42:32 +0000 (12:42 +0100)
Link: https://patch.msgid.link/20251123-work-fd-prepare-v4-12-b6efa1706cfd@kernel.org
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/eventpoll.c

index ee7c4b683ec3d24c1650af1d027599455da801b0..6c36d9dc6926f8ff5ba06a9232b6e1e68d0eb0cf 100644 (file)
@@ -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;
+       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 fdf.err;
        }
-       ep->file = file;
-       fd_install(fd, file);
-       return fd;
-
-out_free_fd:
-       put_unused_fd(fd);
-out_free_ep:
-       ep_clear_and_put(ep);
-       return error;
+       ep->file = fd_prepare_file(fdf);
+       return fd_publish(fdf);
 }
 
 SYSCALL_DEFINE1(epoll_create1, int, flags)