Willem de Bruijn
2020-Dec-24 15:56 UTC
[PATCH net] tun: fix return value when the number of iovs exceeds MAX_SKB_FRAGS
On Thu, Dec 24, 2020 at 6:51 AM wangyunjian <wangyunjian at huawei.com> wrote:> > From: Yunjian Wang <wangyunjian at huawei.com> > > Currently the tun_napi_alloc_frags() function returns -ENOMEM when the > number of iovs exceeds MAX_SKB_FRAGS + 1. However this is inappropriate, > we should use -EMSGSIZE instead of -ENOMEM. > > Fixes: 90e33d459407 ("tun: enable napi_gro_frags() for TUN/TAP driver") > Signed-off-by: Yunjian Wang <wangyunjian at huawei.com>Acked-by: Willem de Bruijn <willemb at google.com> It might be good to explain why the distinction matters: one denotes a transient failure that the caller (specifically vhost_net) can retry, the other a persistent failure due to bad packet geometry that should be dropped.
Michael S. Tsirkin
2020-Dec-27 11:18 UTC
[PATCH net] tun: fix return value when the number of iovs exceeds MAX_SKB_FRAGS
On Thu, Dec 24, 2020 at 10:56:16AM -0500, Willem de Bruijn wrote:> On Thu, Dec 24, 2020 at 6:51 AM wangyunjian <wangyunjian at huawei.com> wrote: > > > > From: Yunjian Wang <wangyunjian at huawei.com> > > > > Currently the tun_napi_alloc_frags() function returns -ENOMEM when the > > number of iovs exceeds MAX_SKB_FRAGS + 1. However this is inappropriate, > > we should use -EMSGSIZE instead of -ENOMEM. > > > > Fixes: 90e33d459407 ("tun: enable napi_gro_frags() for TUN/TAP driver") > > Signed-off-by: Yunjian Wang <wangyunjian at huawei.com> > > Acked-by: Willem de Bruijn <willemb at google.com> > > It might be good to explain why the distinction matters: one denotes a > transient failure that the caller (specifically vhost_net) can retry, > the other a persistent failure due to bad packet geometry that should > be dropped.It would be good to have a definition of what constitutes a transient failure. At the moment there's a proposed patch to vhost that tests for err == -EAGAIN || err == -ENOMEM || err == -ENOBUFS and we'll likely add EIO to that. Alternatively, I'm inclined to say any invalid input should just return EINVAL except maybe for memory access errors which traditionally are EFAULT. Then vhost can handle any failure except EINVAL and EFAULT as transient. -- MST