Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp784206pxb; Thu, 19 Nov 2020 13:47:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJzFYJ6YG8seCE4xtbgKiIp5kohDOQtcbjE1EXCXLnYkg52lnfmocGykXCxrcS2ylRF9pKSm X-Received: by 2002:aa7:d711:: with SMTP id t17mr32828334edq.83.1605822474028; Thu, 19 Nov 2020 13:47:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605822474; cv=none; d=google.com; s=arc-20160816; b=qr1pBNgydKLMhLK7Eu6SyJ40flmMCa3mGcF4iAmKMBLL73sz1XPXDR2CQDTn+WZuqP kcUbcgSmAyGFfW80vVGKcbhwRTXltXyP194Woev/+Pfn5PQqN5QwdguTmcDzWM9HC2h1 HxB5vuD3brhL0QXfpUv/tTpCfE1DnaBszEwG+8QURuoovZ/fRQqMpPnO3Cw9Oo/I9RiN 4XMCjvqsx+Dy/xystchpH7TpzgvlQN21537oas4V1GFXqVj65IpwpagMGhUQfMkdMs/O cKweS09tg+cEVYeTuzGXE8+qaTfrcYhHRYeOdkBVR30UqoDCkSfAdLWw4BjwqhhXYouw PpIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=YFkhGODobbzscYbsSLvNA9esMh0aaLBLRIgEaTHlg0Q=; b=dWQur1tH+gE4s4o+5XMc0cW4vG47Aoni2v4CMM/C9urx00KX9DN4z9GIvkWOuBr0VK NRAN68wA6LO/qZkO4lM0I1G+gCjk58PAvAE8rSWgQeRK4L9srJ0QHsZX+NuOmQnikqAy RhpEjQlQ4quA10WTqrSZQ2ng8PUeVpiTXeiw0qMJqHoEcG18/kbTqpg0c5UEjgHs3Ka8 a/G0hYmXAUk2YWLYKFy5BJUoFIzFfBYRUWWKEdhJT+BDSPPTLLvOi17z8eqVxQbO2mg8 1I+lGW3R+Qh5NEVQoAlIG+WRt4g8stwjux1i0vP/R453hpZ8KNi6yqAxFfrmW6viNAbE TwjQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=V7SJ0bU1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h10si588708eje.596.2020.11.19.13.47.31; Thu, 19 Nov 2020 13:47:54 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=V7SJ0bU1; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726440AbgKSVmH (ORCPT + 99 others); Thu, 19 Nov 2020 16:42:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46110 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726386AbgKSVmH (ORCPT ); Thu, 19 Nov 2020 16:42:07 -0500 Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A9900C0613CF for ; Thu, 19 Nov 2020 13:42:06 -0800 (PST) Received: by mail-lj1-x242.google.com with SMTP id p12so7856415ljc.9 for ; Thu, 19 Nov 2020 13:42:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=YFkhGODobbzscYbsSLvNA9esMh0aaLBLRIgEaTHlg0Q=; b=V7SJ0bU1TRqB34SR542Skh+B3DoXX93hK/87i3egewmUjkgnDDLc0BEFjgOmu8tdC5 fJUmedd/BDAs6dCTzYa72tU3gS56bkO2zSyb2p4KWAu4/kBnt3xqOBYPwU41zAogXBLd 5uepg4JrDaMxwSfA+PuE847OvVJm2pE3q3dXQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=YFkhGODobbzscYbsSLvNA9esMh0aaLBLRIgEaTHlg0Q=; b=IOclyjXHd/eOMqRKhnAhso0XXx5uQBLDO8bpJls9n7NOf69igiRtwd4uFmenk1afmx s82dHJfufESLiw0YWAhXQ0zPDfnbWu93kUDp0YNvBi7FNk+nq6CT7PEYfvmd/TIZa+Px JiHenBuhNrgm+dDJJXizRVzZpaWKn4A/yPGh6Okq+knwAVymAm9fkAw6rjZQHbn+Z7JB VZtkJsT4DQkFIDj7OwZ7/9AD0w5j7vvlDevvTdAMgQw+IHJOflUsq0jnjfHxfct3FPZ0 Doi0kNUUbvmKGRvWm4+//6XIwjef7mKGLB6HOj7f0GHOM/mxGjb1NoQ4rdrtBopHiOH1 cGzw== X-Gm-Message-State: AOAM530d9vM5x0fVjptm49nz4txOuhgKYspQXZT9pRWfcNq0L5oYPzDa YcPxt3OC3vgIsUNKewQFcWZ8koBIIAly2gwSNp/uyA== X-Received: by 2002:a2e:b0cc:: with SMTP id g12mr7039513ljl.309.1605822124931; Thu, 19 Nov 2020 13:42:04 -0800 (PST) MIME-Version: 1.0 References: <20201119162654.2410685-1-revest@chromium.org> In-Reply-To: <20201119162654.2410685-1-revest@chromium.org> From: KP Singh Date: Thu, 19 Nov 2020 22:41:54 +0100 Message-ID: Subject: Re: [PATCH v2 1/5] net: Remove the err argument from sock_from_file To: Florent Revest Cc: bpf , Al Viro , "David S. Miller" , Jakub Kicinski , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Yonghong Song , Andrii Nakryiko , Florent Revest , open list , Networking Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org I think you meant to send these as [PATCH bpf-next] for bpf-next. I guess we can do a round of reviews and update the next revision (if any) with the correct prefixes. On Thu, Nov 19, 2020 at 5:27 PM Florent Revest wrote: > > From: Florent Revest > > Currently, the sock_from_file prototype takes an "err" pointer that is > either not set or set to -ENOTSOCK IFF the returned socket is NULL. This > makes the error redundant and it is ignored by a few callers. > > This patch simplifies the API by letting callers deduce the error based > on whether the returned socket is NULL or not. > > Suggested-by: Al Viro > Signed-off-by: Florent Revest > --- > fs/eventpoll.c | 3 +-- > fs/io_uring.c | 16 ++++++++-------- > include/linux/net.h | 2 +- > net/core/netclassid_cgroup.c | 3 +-- > net/core/netprio_cgroup.c | 3 +-- > net/core/sock.c | 8 +------- > net/socket.c | 27 ++++++++++++++++----------- > 7 files changed, 29 insertions(+), 33 deletions(-) > > diff --git a/fs/eventpoll.c b/fs/eventpoll.c > index 4df61129566d..c764d8d5a76a 100644 > --- a/fs/eventpoll.c > +++ b/fs/eventpoll.c > @@ -415,12 +415,11 @@ static inline void ep_set_busy_poll_napi_id(struct epitem *epi) > unsigned int napi_id; > struct socket *sock; > struct sock *sk; > - int err; > > if (!net_busy_loop_on()) > return; > > - sock = sock_from_file(epi->ffd.file, &err); > + sock = sock_from_file(epi->ffd.file); > if (!sock) > return; > > diff --git a/fs/io_uring.c b/fs/io_uring.c > index 8018c7076b25..ace99b15cbd3 100644 > --- a/fs/io_uring.c > +++ b/fs/io_uring.c > @@ -4341,9 +4341,9 @@ static int io_sendmsg(struct io_kiocb *req, bool force_nonblock, > unsigned flags; > int ret; > > - sock = sock_from_file(req->file, &ret); > + sock = sock_from_file(req->file); > if (unlikely(!sock)) > - return ret; > + return -ENOTSOCK; > > if (req->async_data) { > kmsg = req->async_data; > @@ -4390,9 +4390,9 @@ static int io_send(struct io_kiocb *req, bool force_nonblock, > unsigned flags; > int ret; > > - sock = sock_from_file(req->file, &ret); > + sock = sock_from_file(req->file); > if (unlikely(!sock)) > - return ret; > + return -ENOTSOCK; > > ret = import_single_range(WRITE, sr->buf, sr->len, &iov, &msg.msg_iter); > if (unlikely(ret)) > @@ -4569,9 +4569,9 @@ static int io_recvmsg(struct io_kiocb *req, bool force_nonblock, > unsigned flags; > int ret, cflags = 0; > > - sock = sock_from_file(req->file, &ret); > + sock = sock_from_file(req->file); > if (unlikely(!sock)) > - return ret; > + return -ENOTSOCK; > > if (req->async_data) { > kmsg = req->async_data; > @@ -4632,9 +4632,9 @@ static int io_recv(struct io_kiocb *req, bool force_nonblock, > unsigned flags; > int ret, cflags = 0; > > - sock = sock_from_file(req->file, &ret); > + sock = sock_from_file(req->file); > if (unlikely(!sock)) > - return ret; > + return -ENOTSOCK; > > if (req->flags & REQ_F_BUFFER_SELECT) { > kbuf = io_recv_buffer_select(req, !force_nonblock); > diff --git a/include/linux/net.h b/include/linux/net.h > index 0dcd51feef02..9e2324efc26a 100644 > --- a/include/linux/net.h > +++ b/include/linux/net.h > @@ -240,7 +240,7 @@ int sock_sendmsg(struct socket *sock, struct msghdr *msg); > int sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags); > struct file *sock_alloc_file(struct socket *sock, int flags, const char *dname); > struct socket *sockfd_lookup(int fd, int *err); > -struct socket *sock_from_file(struct file *file, int *err); > +struct socket *sock_from_file(struct file *file); > #define sockfd_put(sock) fput(sock->file) > int net_ratelimit(void); > > diff --git a/net/core/netclassid_cgroup.c b/net/core/netclassid_cgroup.c > index 41b24cd31562..b49c57d35a88 100644 > --- a/net/core/netclassid_cgroup.c > +++ b/net/core/netclassid_cgroup.c > @@ -68,9 +68,8 @@ struct update_classid_context { > > static int update_classid_sock(const void *v, struct file *file, unsigned n) > { > - int err; > struct update_classid_context *ctx = (void *)v; > - struct socket *sock = sock_from_file(file, &err); > + struct socket *sock = sock_from_file(file); > > if (sock) { > spin_lock(&cgroup_sk_update_lock); > diff --git a/net/core/netprio_cgroup.c b/net/core/netprio_cgroup.c > index 9bd4cab7d510..99a431c56f23 100644 > --- a/net/core/netprio_cgroup.c > +++ b/net/core/netprio_cgroup.c > @@ -220,8 +220,7 @@ static ssize_t write_priomap(struct kernfs_open_file *of, > > static int update_netprio(const void *v, struct file *file, unsigned n) > { > - int err; > - struct socket *sock = sock_from_file(file, &err); > + struct socket *sock = sock_from_file(file); > if (sock) { > spin_lock(&cgroup_sk_update_lock); > sock_cgroup_set_prioidx(&sock->sk->sk_cgrp_data, > diff --git a/net/core/sock.c b/net/core/sock.c > index 727ea1cc633c..dd0598d831ef 100644 > --- a/net/core/sock.c > +++ b/net/core/sock.c > @@ -2808,14 +2808,8 @@ EXPORT_SYMBOL(sock_no_mmap); > void __receive_sock(struct file *file) > { > struct socket *sock; > - int error; > > - /* > - * The resulting value of "error" is ignored here since we only > - * need to take action when the file is a socket and testing > - * "sock" for NULL is sufficient. > - */ > - sock = sock_from_file(file, &error); > + sock = sock_from_file(file); > if (sock) { > sock_update_netprioidx(&sock->sk->sk_cgrp_data); > sock_update_classid(&sock->sk->sk_cgrp_data); > diff --git a/net/socket.c b/net/socket.c > index 6e6cccc2104f..c799d9652a2c 100644 > --- a/net/socket.c > +++ b/net/socket.c > @@ -445,17 +445,15 @@ static int sock_map_fd(struct socket *sock, int flags) > /** > * sock_from_file - Return the &socket bounded to @file. > * @file: file > - * @err: pointer to an error code return > * > - * On failure returns %NULL and assigns -ENOTSOCK to @err. > + * On failure returns %NULL. > */ > > -struct socket *sock_from_file(struct file *file, int *err) > +struct socket *sock_from_file(struct file *file) > { > if (file->f_op == &socket_file_ops) > return file->private_data; /* set in sock_map_fd */ > > - *err = -ENOTSOCK; > return NULL; > } > EXPORT_SYMBOL(sock_from_file); > @@ -484,9 +482,11 @@ struct socket *sockfd_lookup(int fd, int *err) > return NULL; > } > > - sock = sock_from_file(file, err); > - if (!sock) > + sock = sock_from_file(file); > + if (!sock) { > + *err = -ENOTSOCK; > fput(file); > + } > return sock; > } > EXPORT_SYMBOL(sockfd_lookup); > @@ -498,11 +498,12 @@ static struct socket *sockfd_lookup_light(int fd, int *err, int *fput_needed) > > *err = -EBADF; > if (f.file) { > - sock = sock_from_file(f.file, err); > + sock = sock_from_file(f.file); > if (likely(sock)) { > *fput_needed = f.flags & FDPUT_FPUT; > return sock; > } > + *err = -ENOTSOCK; > fdput(f); > } > return NULL; > @@ -1715,9 +1716,11 @@ int __sys_accept4_file(struct file *file, unsigned file_flags, > if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK)) > flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK; > > - sock = sock_from_file(file, &err); > - if (!sock) > + sock = sock_from_file(file); > + if (!sock) { > + err = -ENOTSOCK; > goto out; > + } > > err = -ENFILE; > newsock = sock_alloc(); > @@ -1840,9 +1843,11 @@ int __sys_connect_file(struct file *file, struct sockaddr_storage *address, > struct socket *sock; > int err; > > - sock = sock_from_file(file, &err); > - if (!sock) > + sock = sock_from_file(file); > + if (!sock) { > + err = -ENOTSOCK; > goto out; > + } > > err = > security_socket_connect(sock, (struct sockaddr *)address, addrlen); > -- > 2.29.2.299.gdc1121823c-goog >