All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Loftus, Ciara" <ciara.loftus@intel.com>
To: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Cc: "netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"bpf@vger.kernel.org" <bpf@vger.kernel.org>,
	"Karlsson, Magnus" <magnus.karlsson@intel.com>,
	"bjorn@kernel.org" <bjorn@kernel.org>,
	"magnus.karlsson@gmail.com" <magnus.karlsson@gmail.com>
Subject: RE: [PATCH v2 bpf 3/3] libbpf: ignore return values of setsockopt for XDP rings.
Date: Mon, 29 Mar 2021 08:41:29 +0000	[thread overview]
Message-ID: <bc1d9e861d27499da5f5a84bc6d22177@intel.com> (raw)
In-Reply-To: <20210327022729.cgizt5xnhkerbrmy@ast-mbp>

> 
> On Fri, Mar 26, 2021 at 02:29:46PM +0000, Ciara Loftus wrote:
> > During xsk_socket__create the XDP_RX_RING and XDP_TX_RING
> setsockopts
> > are called to create the rx and tx rings for the AF_XDP socket. If the ring
> > has already been set up, the setsockopt will return an error. However,
> > in the event of a failure during xsk_socket__create(_shared) after the
> > rings have been set up, the user may wish to retry the socket creation
> > using these pre-existing rings. In this case we can ignore the error
> > returned by the setsockopts. If there is a true error, the subsequent
> > call to mmap() will catch it.
> >
> > Fixes: 1cad07884239 ("libbpf: add support for using AF_XDP sockets")
> >
> > Acked-by: Magnus Karlsson <magnus.karlsson@intel.com>
> > Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
> > ---
> >  tools/lib/bpf/xsk.c | 34 ++++++++++++++++------------------
> >  1 file changed, 16 insertions(+), 18 deletions(-)
> >
> > diff --git a/tools/lib/bpf/xsk.c b/tools/lib/bpf/xsk.c
> > index d4991ddff05a..cfc4abf505c3 100644
> > --- a/tools/lib/bpf/xsk.c
> > +++ b/tools/lib/bpf/xsk.c
> > @@ -900,24 +900,22 @@ int xsk_socket__create_shared(struct xsk_socket
> **xsk_ptr,
> >  	}
> >  	xsk->ctx = ctx;
> >
> > -	if (rx) {
> > -		err = setsockopt(xsk->fd, SOL_XDP, XDP_RX_RING,
> > -				 &xsk->config.rx_size,
> > -				 sizeof(xsk->config.rx_size));
> > -		if (err) {
> > -			err = -errno;
> > -			goto out_put_ctx;
> > -		}
> > -	}
> > -	if (tx) {
> > -		err = setsockopt(xsk->fd, SOL_XDP, XDP_TX_RING,
> > -				 &xsk->config.tx_size,
> > -				 sizeof(xsk->config.tx_size));
> > -		if (err) {
> > -			err = -errno;
> > -			goto out_put_ctx;
> > -		}
> > -	}
> > +	/* The return values of these setsockopt calls are intentionally not
> checked.
> > +	 * If the ring has already been set up setsockopt will return an error.
> However,
> > +	 * this scenario is acceptable as the user may be retrying the socket
> creation
> > +	 * with rings which were set up in a previous but ultimately
> unsuccessful call
> > +	 * to xsk_socket__create(_shared). The call later to mmap() will fail if
> there
> > +	 * is a real issue and we handle that return value appropriately there.
> > +	 */
> > +	if (rx)
> > +		setsockopt(xsk->fd, SOL_XDP, XDP_RX_RING,
> > +			   &xsk->config.rx_size,
> > +			   sizeof(xsk->config.rx_size));
> > +
> > +	if (tx)
> > +		setsockopt(xsk->fd, SOL_XDP, XDP_TX_RING,
> > +			   &xsk->config.tx_size,
> > +			   sizeof(xsk->config.tx_size));
> 
> Instead of ignoring the error can you remember that setsockopt was done
> in struct xsk_socket and don't do it the second time?

Ideally we don't have to ignore the error. However in the event of failure struct xsk_socket is freed at the end of xsk_socket__create so we can't use it to remember state between subsequent calls to __create(). 

  reply	other threads:[~2021-03-29  8:48 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-26 14:29 [PATCH v2 bpf 0/3] AF_XDP Socket Creation Fixes Ciara Loftus
2021-03-26 14:29 ` [PATCH v2 bpf 1/3] libbpf: ensure umem pointer is non-NULL before dereferencing Ciara Loftus
2021-03-26 14:29 ` [PATCH v2 bpf 2/3] libbpf: restore umem state after socket create failure Ciara Loftus
2021-03-26 14:29 ` [PATCH v2 bpf 3/3] libbpf: ignore return values of setsockopt for XDP rings Ciara Loftus
2021-03-27  2:27   ` Alexei Starovoitov
2021-03-29  8:41     ` Loftus, Ciara [this message]
2021-03-29 15:28       ` Alexei Starovoitov
2021-03-30 12:04         ` Loftus, Ciara

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bc1d9e861d27499da5f5a84bc6d22177@intel.com \
    --to=ciara.loftus@intel.com \
    --cc=alexei.starovoitov@gmail.com \
    --cc=bjorn@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=magnus.karlsson@gmail.com \
    --cc=magnus.karlsson@intel.com \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.