Subject: linux-next: manual merge of the block tree with the net-next tree

From: Mark Brown <[email-masked]>
Date: Fri, 10 Apr 2026 13:21:34 +0100

Hi all,

Today's linux-next merge of the block tree got a conflict in:

  io_uring/zcrx.c

between commit:

  222b5566a02dbf ("net: Proxy netdev_queue_get_dma_dev for leased queues")

from the net-next tree and commit:

  06fc3b6d388dfa ("io_uring/zcrx: extract netdev+area init into a helper")

from the block tree.

I fixed it up (see below) and can carry the fix as necessary. This
is now fixed as far as linux-next is concerned, but any non trivial
conflicts should be mentioned to your upstream maintainer when your tree
is submitted for merging.  You may also want to consider cooperating
with the maintainer of the conflicting tree to minimise any particularly
complex conflicts.

diff --cc io_uring/zcrx.c
index f4a7809ba0c2b1,bd970fb084c19a..00000000000000
--- a/io_uring/zcrx.c
+++ b/io_uring/zcrx.c
@@@ -754,10 -779,50 +782,51 @@@ err
  	return ret;
  }
  
- int io_register_zcrx_ifq(struct io_ring_ctx *ctx,
- 			  struct io_uring_zcrx_ifq_reg __user *arg)
+ static int zcrx_register_netdev(struct io_zcrx_ifq *ifq,
+ 				struct io_uring_zcrx_ifq_reg *reg,
+ 				struct io_uring_zcrx_area_reg *area)
  {
  	struct pp_memory_provider_params mp_param = {};
+ 	unsigned if_rxq = reg->if_rxq;
+ 	int ret;
+ 
+ 	ifq->netdev = netdev_get_by_index_lock(current->nsproxy->net_ns,
+ 						reg->if_idx);
+ 	if (!ifq->netdev)
+ 		return -ENODEV;
+ 
+ 	netdev_hold(ifq->netdev, &ifq->netdev_tracker, GFP_KERNEL);
+ 
 -	ifq->dev = netdev_queue_get_dma_dev(ifq->netdev, if_rxq);
++	ifq->dev = netdev_queue_get_dma_dev(ifq->netdev, if_rxq,
++					    NETDEV_QUEUE_TYPE_RX);
+ 	if (!ifq->dev) {
+ 		ret = -EOPNOTSUPP;
+ 		goto netdev_put_unlock;
+ 	}
+ 	get_device(ifq->dev);
+ 
+ 	ret = io_zcrx_create_area(ifq, area, reg);
+ 	if (ret)
+ 		goto netdev_put_unlock;
+ 
+ 	if (reg->rx_buf_len)
+ 		mp_param.rx_page_size = 1U << ifq->niov_shift;
+ 	mp_param.mp_ops = &io_uring_pp_zc_ops;
+ 	mp_param.mp_priv = ifq;
+ 	ret = __net_mp_open_rxq(ifq->netdev, if_rxq, &mp_param, NULL);
+ 	if (ret)
+ 		goto netdev_put_unlock;
+ 
+ 	ifq->if_rxq = if_rxq;
+ 	ret = 0;
+ netdev_put_unlock:
+ 	netdev_unlock(ifq->netdev);
+ 	return ret;
+ }
+ 
+ int io_register_zcrx(struct io_ring_ctx *ctx,
+ 		     struct io_uring_zcrx_ifq_reg __user *arg)
+ {
  	struct io_uring_zcrx_area_reg area;
  	struct io_uring_zcrx_ifq_reg reg;
  	struct io_uring_region_desc rd;