rndis_host: reduce MTU instead of refusing to talk to devices with low max packet...
authorThomas Sailer <t.sailer@alumni.ethz.ch>
Tue, 23 Oct 2007 22:47:19 +0000 (00:47 +0200)
committerJeff Garzik <jeff@garzik.org>
Thu, 25 Oct 2007 07:34:59 +0000 (03:34 -0400)
This patch makes the host RNDIS driver talk to RNDIS devices with an MTU
less than 1.5k, instead of refusing to talk to such a device.

Signed-Off-by: Thomas Sailer <t.sailer@alumni.ethz.ch>
Acked-by: David Brownell <dbrownell@users.sourceforge.net>
--

Hi Jeff,
are you the right person to send this to?
Nobody else seems to be wanting to forward this to Linus...

Thanks,
Tom

Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/net/usb/rndis_host.c

index cd991a0f75bb3ef919d8ba9f513b982eba884163..1ebe3259be0d1dd937c9807249b3d657e8ef15a6 100644 (file)
@@ -512,11 +512,19 @@ static int rndis_bind(struct usbnet *dev, struct usb_interface *intf)
        }
        tmp = le32_to_cpu(u.init_c->max_transfer_size);
        if (tmp < dev->hard_mtu) {
-               dev_err(&intf->dev,
-                       "dev can't take %u byte packets (max %u)\n",
-                       dev->hard_mtu, tmp);
-               retval = -EINVAL;
-               goto fail_and_release;
+               if (tmp <= net->hard_header_len) {
+                       dev_err(&intf->dev,
+                               "dev can't take %u byte packets (max %u)\n",
+                               dev->hard_mtu, tmp);
+                       retval = -EINVAL;
+                       goto fail_and_release;
+               }
+               dev->hard_mtu = tmp;
+               net->mtu = dev->hard_mtu - net->hard_header_len;
+               dev_warn(&intf->dev,
+                        "dev can't take %u byte packets (max %u), "
+                        "adjusting MTU to %u\n",
+                        dev->hard_mtu, tmp, net->mtu);
        }
 
        /* REVISIT:  peripheral "alignment" request is ignored ... */