From: Brenden Blanco <bbla...@plumgrid.com> Date: Mon, 11 Jul 2016 23:35:00 -0700
> On Mon, Jul 11, 2016 at 11:12:24PM -0700, David Miller wrote: >> From: Brenden Blanco <bbla...@plumgrid.com> >> Date: Mon, 11 Jul 2016 14:29:49 -0700 >> >> > + if (fd >= 0) { >> > + prog = bpf_prog_get_type(fd, BPF_PROG_TYPE_XDP); >> > + if (IS_ERR(prog)) >> > + return PTR_ERR(prog); >> > + } >> > + >> > + xdp.command = XDP_SETUP_PROG; >> > + xdp.prog = prog; >> > + err = ops->ndo_xdp(dev, &xdp); >> > + if (err < 0 && prog) >> > + bpf_prog_put(prog); >> >> I don't understand the reference counting on 'prog' here. >> >> The enumeration documentation states that no matter what, the passed >> in prog doesn't need to be mangaged by the ->ndo_xdp() method. >> >> Therefore, if that is true, we must always put the 'prog' here if it >> is non-NULL. Regardless of the 'err' value. >> > The documentation is unclear then. What I _meant_ to say is that the callee > is not responsible for putting the program on error, but on success it > takes ownership of the reference. In context of that, does the code make > sense? Is there a more conventional way of handling this? Then please document it more clearly, thanks.