Message ID | 20210602031001.18656-1-wanghai38@huawei.com |
---|---|
State | New |
Headers | show |
Series | [net-next] xsk: Return -EINVAL instead of -EBUSY after xsk_get_pool_from_qid() fails | expand |
On Wed, Jun 2, 2021 at 6:02 AM Wang Hai <wanghai38@huawei.com> wrote: > > xsk_get_pool_from_qid() fails not because the device's queues are busy, > but because the queue_id exceeds the current number of queues. > So when it fails, it is better to return -EINVAL instead of -EBUSY. > > Signed-off-by: Wang Hai <wanghai38@huawei.com> > --- > net/xdp/xsk_buff_pool.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/net/xdp/xsk_buff_pool.c b/net/xdp/xsk_buff_pool.c > index 8de01aaac4a0..30ece117117a 100644 > --- a/net/xdp/xsk_buff_pool.c > +++ b/net/xdp/xsk_buff_pool.c > @@ -135,7 +135,7 @@ int xp_assign_dev(struct xsk_buff_pool *pool, > return -EINVAL; > > if (xsk_get_pool_from_qid(netdev, queue_id)) > - return -EBUSY; > + return -EINVAL; I guess your intent here is to return -EINVAL only when the queue_id is larger than the number of active queues. But this patch also changes the return code when the queue id is already in use and in that case we should continue to return -EBUSY. As this function is used by a number of drivers, the easiest way to accomplish this is to introduce a test for queue_id out of bounds before this if-statement and return -EINVAL there. > pool->netdev = netdev; > pool->queue_id = queue_id; > -- > 2.17.1 >
Sorry, I misunderstood here, this is a faulty patch and no changes are needed here. Please ignore this patch 在 2021/6/2 16:29, Magnus Karlsson 写道: > On Wed, Jun 2, 2021 at 6:02 AM Wang Hai <wanghai38@huawei.com> wrote: >> xsk_get_pool_from_qid() fails not because the device's queues are busy, >> but because the queue_id exceeds the current number of queues. >> So when it fails, it is better to return -EINVAL instead of -EBUSY. >> >> Signed-off-by: Wang Hai <wanghai38@huawei.com> >> --- >> net/xdp/xsk_buff_pool.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/net/xdp/xsk_buff_pool.c b/net/xdp/xsk_buff_pool.c >> index 8de01aaac4a0..30ece117117a 100644 >> --- a/net/xdp/xsk_buff_pool.c >> +++ b/net/xdp/xsk_buff_pool.c >> @@ -135,7 +135,7 @@ int xp_assign_dev(struct xsk_buff_pool *pool, >> return -EINVAL; >> >> if (xsk_get_pool_from_qid(netdev, queue_id)) >> - return -EBUSY; >> + return -EINVAL; > I guess your intent here is to return -EINVAL only when the queue_id > is larger than the number of active queues. Yes, I just confirmed that this has been implemented in xp_assign_dev(). int xp_assign_dev() { ... err = xsk_reg_pool_at_qid(netdev, pool, queue_id); if (err) return err; //return -EINVAL; ... } > But this patch also > changes the return code when the queue id is already in use and in > that case we should continue to return -EBUSY. As this function is > used by a number of drivers, the easiest way to accomplish this is to > introduce a test for queue_id out of bounds before this if-statement > and return -EINVAL there. > >> pool->netdev = netdev; >> pool->queue_id = queue_id; >> -- >> 2.17.1 >> > . >
diff --git a/net/xdp/xsk_buff_pool.c b/net/xdp/xsk_buff_pool.c index 8de01aaac4a0..30ece117117a 100644 --- a/net/xdp/xsk_buff_pool.c +++ b/net/xdp/xsk_buff_pool.c @@ -135,7 +135,7 @@ int xp_assign_dev(struct xsk_buff_pool *pool, return -EINVAL; if (xsk_get_pool_from_qid(netdev, queue_id)) - return -EBUSY; + return -EINVAL; pool->netdev = netdev; pool->queue_id = queue_id;
xsk_get_pool_from_qid() fails not because the device's queues are busy, but because the queue_id exceeds the current number of queues. So when it fails, it is better to return -EINVAL instead of -EBUSY. Signed-off-by: Wang Hai <wanghai38@huawei.com> --- net/xdp/xsk_buff_pool.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)