Signed-off-by: Christian Brauner --- net/socket.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/net/socket.c b/net/socket.c index e8892b218708..af72b10ffe49 100644 --- a/net/socket.c +++ b/net/socket.c @@ -503,21 +503,16 @@ EXPORT_SYMBOL(sock_alloc_file); static int sock_map_fd(struct socket *sock, int flags) { - struct file *newfile; - int fd = get_unused_fd_flags(flags); - if (unlikely(fd < 0)) { - sock_release(sock); - return fd; - } + int err; - newfile = sock_alloc_file(sock, flags, NULL); - if (!IS_ERR(newfile)) { - fd_install(fd, newfile); - return fd; + FD_PREPARE(fdf, flags, sock_alloc_file(sock, flags, NULL)); + err = ACQUIRE_ERR(fd_prepare, &fdf); + if (err) { + sock_release(sock); + return err; } - put_unused_fd(fd); - return PTR_ERR(newfile); + return fd_publish(fdf); } /** -- 2.47.3