Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1502167 > unrolled thread
| Started by | Jakub Kicinski <kubakici@wp.pl> |
|---|---|
| First post | 2016-10-17 18:30 +0200 |
| Last post | 2016-10-17 19:30 +0200 |
| Articles | 9 — 3 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: [PATCH v3 net-next 2/2] net: deprecate eth_change_mtu, remove usage Jakub Kicinski <kubakici@wp.pl> - 2016-10-17 18:30 +0200
Re: [PATCH v3 net-next 2/2] net: deprecate eth_change_mtu, remove usage David Miller <davem@davemloft.net> - 2016-10-17 19:00 +0200
Re: [PATCH v3 net-next 2/2] net: deprecate eth_change_mtu, remove usage Jakub Kicinski <kubakici@wp.pl> - 2016-10-17 19:10 +0200
Re: [PATCH v3 net-next 2/2] net: deprecate eth_change_mtu, remove usage Jakub Kicinski <kubakici@wp.pl> - 2016-10-17 19:10 +0200
Re: [PATCH v3 net-next 2/2] net: deprecate eth_change_mtu, remove usage David Miller <davem@davemloft.net> - 2016-10-17 19:20 +0200
Re: [PATCH v3 net-next 2/2] net: deprecate eth_change_mtu, remove usage David Miller <davem@davemloft.net> - 2016-10-17 19:30 +0200
Re: [PATCH v3 net-next 2/2] net: deprecate eth_change_mtu, remove usage Jarod Wilson <jarod@redhat.com> - 2016-10-17 22:10 +0200
Re: [PATCH v3 net-next 2/2] net: deprecate eth_change_mtu, remove usage Jarod Wilson <jarod@redhat.com> - 2016-10-17 22:30 +0200
Re: [PATCH v3 net-next 2/2] net: deprecate eth_change_mtu, remove usage Jakub Kicinski <kubakici@wp.pl> - 2016-10-17 19:30 +0200
| From | Jakub Kicinski <kubakici@wp.pl> |
|---|---|
| Date | 2016-10-17 18:30 +0200 |
| Subject | Re: [PATCH v3 net-next 2/2] net: deprecate eth_change_mtu, remove usage |
| Message-ID | <stiXv-5Qr-11@gated-at.bofh.it> |
On Fri, 7 Oct 2016 22:04:34 -0400, Jarod Wilson wrote:
> @@ -357,6 +356,8 @@ void ether_setup(struct net_device *dev)
> dev->type = ARPHRD_ETHER;
> dev->hard_header_len = ETH_HLEN;
> dev->mtu = ETH_DATA_LEN;
> + dev->min_mtu = ETH_MIN_MTU;
> + dev->max_mtu = ETH_DATA_LEN;
> dev->addr_len = ETH_ALEN;
> dev->tx_queue_len = 1000; /* Ethernet wants good queues */
> dev->flags = IFF_BROADCAST|IFF_MULTICAST;
This chunk seems to be breaking MTUs > 1500 for me.
On Fri, 7 Oct 2016 22:04:33 -0400, Jarod Wilson wrote:
> diff --git a/net/core/dev.c b/net/core/dev.c
> index f1fe26f..f376639 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -6499,9 +6499,18 @@ int dev_set_mtu(struct net_device *dev, int new_mtu)
> if (new_mtu == dev->mtu)
> return 0;
>
> - /* MTU must be positive. */
> - if (new_mtu < 0)
> + /* MTU must be positive, and in range */
> + if (new_mtu < 0 || new_mtu < dev->min_mtu) {
> + net_err_ratelimited("%s: Invalid MTU %d requested, hw min %d\n",
> + dev->name, new_mtu, dev->min_mtu);
> return -EINVAL;
> + }
> +
> + if (dev->max_mtu > 0 && new_mtu > dev->max_mtu) {
> + net_err_ratelimited("%s: Invalid MTU %d requested, hw max %d\n",
> + dev->name, new_mtu, dev->min_mtu);
> + return -EINVAL;
> + }
Please correct me if I'm wrong but it seems like we are now limiting
_all_ ethernet drivers to ETH_DATA_LEN in net-next.
[toc] | [next] | [standalone]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2016-10-17 19:00 +0200 |
| Message-ID | <stjqz-61C-77@gated-at.bofh.it> |
| In reply to | #1502167 |
From: Jakub Kicinski <kubakici@wp.pl> Date: Mon, 17 Oct 2016 17:20:06 +0100 > Please correct me if I'm wrong but it seems like we are now limiting > _all_ ethernet drivers to ETH_DATA_LEN in net-next. No, because the driver can increase the netdev->max_mtu value as needed.
[toc] | [prev] | [next] | [standalone]
| From | Jakub Kicinski <kubakici@wp.pl> |
|---|---|
| Date | 2016-10-17 19:10 +0200 |
| Message-ID | <stjAf-6l5-79@gated-at.bofh.it> |
| In reply to | #1502231 |
On Mon, 17 Oct 2016 12:49:54 -0400 (EDT), David Miller wrote: > From: Jakub Kicinski <kubakici@wp.pl> > Date: Mon, 17 Oct 2016 17:20:06 +0100 > > > Please correct me if I'm wrong but it seems like we are now limiting > > _all_ ethernet drivers to ETH_DATA_LEN in net-next. > > No, because the driver can increase the netdev->max_mtu value as needed. But since almost no driver is doing that, yet, right now in net-next jumbo frames are not possible, no? I thought the idea was the leave the value at 0 so drivers can opt-in as needed but since setup_ether() is initializing to 1500 now all ethernet driver get a default of limiting to 1500. IOW this patch made checks which were done only in eth_change_mtu() mandatory for all drivers.
[toc] | [prev] | [next] | [standalone]
| From | Jakub Kicinski <kubakici@wp.pl> |
|---|---|
| Date | 2016-10-17 19:10 +0200 |
| Message-ID | <stjAg-6l5-91@gated-at.bofh.it> |
| In reply to | #1502265 |
On Mon, 17 Oct 2016 18:00:27 +0100, Jakub Kicinski wrote: > On Mon, 17 Oct 2016 12:49:54 -0400 (EDT), David Miller wrote: > > From: Jakub Kicinski <kubakici@wp.pl> > > Date: Mon, 17 Oct 2016 17:20:06 +0100 > > > > > Please correct me if I'm wrong but it seems like we are now limiting > > > _all_ ethernet drivers to ETH_DATA_LEN in net-next. > > > > No, because the driver can increase the netdev->max_mtu value as needed. > > But since almost no driver is doing that, yet, right now in net-next > jumbo frames are not possible, no? I thought the idea was the leave > the value at 0 so drivers can opt-in as needed but since setup_ether() > is initializing to 1500 now all ethernet driver get a default of > limiting to 1500. > > IOW this patch made checks which were done only in eth_change_mtu() > mandatory for all drivers. all ethernet drivers to be clear
[toc] | [prev] | [next] | [standalone]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2016-10-17 19:20 +0200 |
| Message-ID | <stjJX-6pe-109@gated-at.bofh.it> |
| In reply to | #1502265 |
From: Jakub Kicinski <kubakici@wp.pl> Date: Mon, 17 Oct 2016 18:00:27 +0100 > On Mon, 17 Oct 2016 12:49:54 -0400 (EDT), David Miller wrote: >> From: Jakub Kicinski <kubakici@wp.pl> >> Date: Mon, 17 Oct 2016 17:20:06 +0100 >> >> > Please correct me if I'm wrong but it seems like we are now limiting >> > _all_ ethernet drivers to ETH_DATA_LEN in net-next. >> >> No, because the driver can increase the netdev->max_mtu value as needed. > > But since almost no driver is doing that, yet, right now in net-next > jumbo frames are not possible, no? I thought the idea was the leave > the value at 0 so drivers can opt-in as needed but since setup_ether() > is initializing to 1500 now all ethernet driver get a default of > limiting to 1500. > > IOW this patch made checks which were done only in eth_change_mtu() > mandatory for all drivers. The conversions he made were in cases where the driver's method was doing exactly the same thing eth_change_mtu() does not. He strictly worked to keep the behavior identical compared to before his changes, please read his patches carefully.
[toc] | [prev] | [next] | [standalone]
| From | David Miller <davem@davemloft.net> |
|---|---|
| Date | 2016-10-17 19:30 +0200 |
| Message-ID | <stjTz-6sY-11@gated-at.bofh.it> |
| In reply to | #1502285 |
From: Jakub Kicinski <kubakici@wp.pl> Date: Mon, 17 Oct 2016 18:20:49 +0100 > Hm. I must be missing something really obvious. I just booted > net-next an hour ago and couldn't set MTU to anything larger than 1500 > on either nfp or igb. As far as I can read the code it will set the > max_mtu to 1500 in setup_ether() but none of the jumbo-capable drivers > had been touched by Jarod so far... Indeed. Jarod, this doesn't work. I guess the idea was that if the driver overrides ndo_change_mtu and enforeced it's limits there, the driver would still work after your changes. But that isn't what is happening, look at the IGB example. It uses ether_setup(), which sets those new defaults, but now when the MTU is changed you enforce those default min/max before the driver's ->ndo_change_mtu() has a change to step in front and make the decision on it's own. This means your changes pretty much did indeed break a lot of drivers's ability to set larger than a 1500 byte MTU.
[toc] | [prev] | [next] | [standalone]
| From | Jarod Wilson <jarod@redhat.com> |
|---|---|
| Date | 2016-10-17 22:10 +0200 |
| Message-ID | <stmop-8jb-23@gated-at.bofh.it> |
| In reply to | #1502292 |
On Mon, Oct 17, 2016 at 01:25:53PM -0400, David Miller wrote: > From: Jakub Kicinski <kubakici@wp.pl> > Date: Mon, 17 Oct 2016 18:20:49 +0100 > > > Hm. I must be missing something really obvious. I just booted > > net-next an hour ago and couldn't set MTU to anything larger than 1500 > > on either nfp or igb. As far as I can read the code it will set the > > max_mtu to 1500 in setup_ether() but none of the jumbo-capable drivers > > had been touched by Jarod so far... > > Indeed. > > Jarod, this doesn't work. > > I guess the idea was that if the driver overrides ndo_change_mtu and > enforeced it's limits there, the driver would still work after your > changes. > > But that isn't what is happening, look at the IGB example. > > It uses ether_setup(), which sets those new defaults, but now when > the MTU is changed you enforce those default min/max before the > driver's ->ndo_change_mtu() has a change to step in front and make > the decision on it's own. > > This means your changes pretty much did indeed break a lot of > drivers's ability to set larger than a 1500 byte MTU. Argh. Yeah, I see it now. I was primarily operating with the follow-on patches also in play, which do touch all the ethernet drivers and set max_mtu to match current behavior, didn't consider the max_mtu case where only the initial patches were applied and the follow-on ones weren't. I've sent that set, which should theoretically make this problem go away, but I can also try to rework things if need be to restore intermediate jumbo frames functionality. (And there are actually non-ethernet devices that also call ether_setup and may or may not have larger than 1500 mtu that aren't yet addressed by that follow-on set). -- Jarod Wilson jarod@redhat.com
[toc] | [prev] | [next] | [standalone]
| From | Jarod Wilson <jarod@redhat.com> |
|---|---|
| Date | 2016-10-17 22:30 +0200 |
| Message-ID | <stmHM-8sQ-17@gated-at.bofh.it> |
| In reply to | #1502422 |
On Mon, Oct 17, 2016 at 04:07:12PM -0400, Jarod Wilson wrote: > On Mon, Oct 17, 2016 at 01:25:53PM -0400, David Miller wrote: > > From: Jakub Kicinski <kubakici@wp.pl> > > Date: Mon, 17 Oct 2016 18:20:49 +0100 > > > > > Hm. I must be missing something really obvious. I just booted > > > net-next an hour ago and couldn't set MTU to anything larger than 1500 > > > on either nfp or igb. As far as I can read the code it will set the > > > max_mtu to 1500 in setup_ether() but none of the jumbo-capable drivers > > > had been touched by Jarod so far... > > > > Indeed. > > > > Jarod, this doesn't work. > > > > I guess the idea was that if the driver overrides ndo_change_mtu and > > enforeced it's limits there, the driver would still work after your > > changes. > > > > But that isn't what is happening, look at the IGB example. > > > > It uses ether_setup(), which sets those new defaults, but now when > > the MTU is changed you enforce those default min/max before the > > driver's ->ndo_change_mtu() has a change to step in front and make > > the decision on it's own. > > > > This means your changes pretty much did indeed break a lot of > > drivers's ability to set larger than a 1500 byte MTU. > > Argh. Yeah, I see it now. I was primarily operating with the follow-on > patches also in play, which do touch all the ethernet drivers and set > max_mtu to match current behavior, didn't consider the max_mtu case where > only the initial patches were applied and the follow-on ones weren't. I've > sent that set, which should theoretically make this problem go away, but I > can also try to rework things if need be to restore intermediate jumbo > frames functionality. (And there are actually non-ethernet devices that > also call ether_setup and may or may not have larger than 1500 mtu that > aren't yet addressed by that follow-on set). Looks like the simplest thing to do is going to be to revert a52ad514, and only make that change after all callers of ether_setup() are setting min/max_mtu themselves as needed, then it can be reintroduced. -- Jarod Wilson jarod@redhat.com
[toc] | [prev] | [next] | [standalone]
| From | Jakub Kicinski <kubakici@wp.pl> |
|---|---|
| Date | 2016-10-17 19:30 +0200 |
| Message-ID | <stjTz-6sY-13@gated-at.bofh.it> |
| In reply to | #1502285 |
On Mon, 17 Oct 2016 13:15:13 -0400 (EDT), David Miller wrote: > From: Jakub Kicinski <kubakici@wp.pl> > Date: Mon, 17 Oct 2016 18:00:27 +0100 > > > On Mon, 17 Oct 2016 12:49:54 -0400 (EDT), David Miller wrote: > >> From: Jakub Kicinski <kubakici@wp.pl> > >> Date: Mon, 17 Oct 2016 17:20:06 +0100 > >> > >> > Please correct me if I'm wrong but it seems like we are now limiting > >> > _all_ ethernet drivers to ETH_DATA_LEN in net-next. > >> > >> No, because the driver can increase the netdev->max_mtu value as needed. > > > > But since almost no driver is doing that, yet, right now in net-next > > jumbo frames are not possible, no? I thought the idea was the leave > > the value at 0 so drivers can opt-in as needed but since setup_ether() > > is initializing to 1500 now all ethernet driver get a default of > > limiting to 1500. > > > > IOW this patch made checks which were done only in eth_change_mtu() > > mandatory for all drivers. > > The conversions he made were in cases where the driver's method was doing > exactly the same thing eth_change_mtu() does not. > > He strictly worked to keep the behavior identical compared to before his > changes, please read his patches carefully. Hm. I must be missing something really obvious. I just booted net-next an hour ago and couldn't set MTU to anything larger than 1500 on either nfp or igb. As far as I can read the code it will set the max_mtu to 1500 in setup_ether() but none of the jumbo-capable drivers had been touched by Jarod so far...
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web