Message ID | 1608864736-24332-1-git-send-email-wangyunjian@huawei.com |
---|---|
State | New |
Headers | show |
Series | [net,v2] tun: fix return value when the number of iovs exceeds MAX_SKB_FRAGS | expand |
On 2020/12/25 上午10:52, wangyunjian wrote: > From: Yunjian Wang <wangyunjian@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. > > The following distinctions are matters: > 1. the caller need to drop the bad packet when -EMSGSIZE is returned, > which means meeting a persistent failure. > 2. the caller can try again when -ENOMEM is returned, which means > meeting a transient failure. > > Fixes: 90e33d459407 ("tun: enable napi_gro_frags() for TUN/TAP driver") > Signed-off-by: Yunjian Wang <wangyunjian@huawei.com> > Acked-by: Willem de Bruijn <willemb@google.com> > --- > v2: > * update commit log suggested by Willem de Bruijn > --- > drivers/net/tun.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/tun.c b/drivers/net/tun.c > index 2dc1988a8973..15c6dd7fb04c 100644 > --- a/drivers/net/tun.c > +++ b/drivers/net/tun.c > @@ -1365,7 +1365,7 @@ static struct sk_buff *tun_napi_alloc_frags(struct tun_file *tfile, > int i; > > if (it->nr_segs > MAX_SKB_FRAGS + 1) > - return ERR_PTR(-ENOMEM); > + return ERR_PTR(-EMSGSIZE); > > local_bh_disable(); > skb = napi_get_frags(&tfile->napi); Acked-by: Jason Wang <jasowang@redhat.com>
On Fri, Dec 25, 2020 at 10:52:16AM +0800, wangyunjian wrote: > From: Yunjian Wang <wangyunjian@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. > > The following distinctions are matters: > 1. the caller need to drop the bad packet when -EMSGSIZE is returned, > which means meeting a persistent failure. > 2. the caller can try again when -ENOMEM is returned, which means > meeting a transient failure. > > Fixes: 90e33d459407 ("tun: enable napi_gro_frags() for TUN/TAP driver") > Signed-off-by: Yunjian Wang <wangyunjian@huawei.com> > Acked-by: Willem de Bruijn <willemb@google.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> > --- > v2: > * update commit log suggested by Willem de Bruijn > --- > drivers/net/tun.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/net/tun.c b/drivers/net/tun.c > index 2dc1988a8973..15c6dd7fb04c 100644 > --- a/drivers/net/tun.c > +++ b/drivers/net/tun.c > @@ -1365,7 +1365,7 @@ static struct sk_buff *tun_napi_alloc_frags(struct tun_file *tfile, > int i; > > if (it->nr_segs > MAX_SKB_FRAGS + 1) > - return ERR_PTR(-ENOMEM); > + return ERR_PTR(-EMSGSIZE); > > local_bh_disable(); > skb = napi_get_frags(&tfile->napi); > -- > 2.23.0
On Fri, 25 Dec 2020 10:52:16 +0800 wangyunjian wrote: > From: Yunjian Wang <wangyunjian@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. > > The following distinctions are matters: > 1. the caller need to drop the bad packet when -EMSGSIZE is returned, > which means meeting a persistent failure. > 2. the caller can try again when -ENOMEM is returned, which means > meeting a transient failure. > > Fixes: 90e33d459407 ("tun: enable napi_gro_frags() for TUN/TAP driver") > Signed-off-by: Yunjian Wang <wangyunjian@huawei.com> > Acked-by: Willem de Bruijn <willemb@google.com> Applied, thanks everyone!
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 2dc1988a8973..15c6dd7fb04c 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -1365,7 +1365,7 @@ static struct sk_buff *tun_napi_alloc_frags(struct tun_file *tfile, int i; if (it->nr_segs > MAX_SKB_FRAGS + 1) - return ERR_PTR(-ENOMEM); + return ERR_PTR(-EMSGSIZE); local_bh_disable(); skb = napi_get_frags(&tfile->napi);