On 10/05/2018 01:25 PM, Björn Töpel wrote: > From: Björn Töpel <bjorn.to...@intel.com> > > The AF_XDP socket struct can exist in three different, implicit > states: setup, bound and released. Setup is prior the socket has been > bound to a device. Bound is when the socket is active for receive and > send. Released is when the process/userspace side of the socket is > released, but the sock object is still lingering, e.g. when there is a > reference to the socket in an XSKMAP after process termination. > > The Rx fast-path code uses the "dev" member of struct xdp_sock to > check whether a socket is bound or relased, and the Tx code uses the > struct xdp_umem "xsk_list" member in conjunction with "dev" to > determine the state of a socket. > > However, the transition from bound to released did not tear the socket > down in correct order. > > On the Rx side "dev" was cleared after synchronize_net() making the > synchronization useless. On the Tx side, the internal queues were > destroyed prior removing them from the "xsk_list". > > This commit corrects the cleanup order, and by doing so > xdp_del_sk_umem() can be simplified and one synchronize_net() can be > removed. > > Fixes: 965a99098443 ("xsk: add support for bind for Rx") > Fixes: ac98d8aab61b ("xsk: wire upp Tx zero-copy functions") > Reported-by: Jesper Dangaard Brouer <bro...@redhat.com> > Signed-off-by: Björn Töpel <bjorn.to...@intel.com>
Applied to bpf-next, thanks Björn!