]> err.no Git - linux-2.6/blobdiff - drivers/net/usb/rndis_host.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[linux-2.6] / drivers / net / usb / rndis_host.c
index 980e4aaa97aaa9ed4a8e77e32e2b973ceded9b38..1ebe3259be0d1dd937c9807249b3d657e8ef15a6 100644 (file)
@@ -512,10 +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);
-               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 ... */