summaryrefslogtreecommitdiff
path: root/drivers/net/usb/rndis_host.c
diff options
context:
space:
mode:
authorThomas Sailer <t.sailer@alumni.ethz.ch>2007-10-23 22:47:19 (GMT)
committerJeff Garzik <jeff@garzik.org>2007-10-25 07:34:59 (GMT)
commit500d2c2f7b8c1cf6194dc9e8f47c6e2295fc5be5 (patch)
treeb35d2b2243f78e944848d5853d51d8530b6e6fad /drivers/net/usb/rndis_host.c
parentb88219f8a2028a1ca2dd17aa7c9d9b643615646e (diff)
downloadlinux-fsl-qoriq-500d2c2f7b8c1cf6194dc9e8f47c6e2295fc5be5.tar.xz
rndis_host: reduce MTU instead of refusing to talk to devices with low max packet size
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>
Diffstat (limited to 'drivers/net/usb/rndis_host.c')
-rw-r--r--drivers/net/usb/rndis_host.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/net/usb/rndis_host.c b/drivers/net/usb/rndis_host.c
index cd991a0..1ebe325 100644
--- a/drivers/net/usb/rndis_host.c
+++ b/drivers/net/usb/rndis_host.c
@@ -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 ... */