netdev ops must be called under instance lock or rtnl_lock, but
io_register_zcrx_ifq() isn't doing this for netdev_queue_get_dma_dev().
Fix this by taking the instance lock using netdev_get_by_index_lock().
netdev_get_by_index_lock() isn't exported by default, so the first patch
is a prep patch to export this under linux/netdevice.h.
Extended the instance lock section to include attaching a memory
provider. Could not move io_zcrx_create_area() outside, since the dmabuf
codepath IORING_ZCRX_AREA_DMABUF requires ifq->dev. Happy to do whatever
here, either keep this extended section or relock for net_mp_open_rxq().
v2:
- add Fixes tag
- export netdev_get_by_index_lock()
- use netdev_get_by_index_lock() + netdev_hold()
- extend lock section to include net_mp_open_rxq()
David Wei (2):
net: export netdev_get_by_index_lock()
net: io_uring/zcrx: call netdev_queue_get_dma_dev() under instance
lock
include/linux/netdevice.h | 1 +
io_uring/zcrx.c | 15 +++++++++------
net/core/dev.c | 1 +
net/core/dev.h | 1 -
4 files changed, 11 insertions(+), 7 deletions(-)
--
2.47.3