summaryrefslogtreecommitdiff
path: root/drivers
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
parentb88219f8a2028a1ca2dd17aa7c9d9b643615646e (diff)
downloadlinux-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')
-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 ... */