Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6

+87 -25
+4 -1
drivers/atm/atmtcp.c
··· 392 392 atm_dev_put(dev); 393 393 return -EMEDIUMTYPE; 394 394 } 395 - if (PRIV(dev)->vcc) return -EBUSY; 395 + if (PRIV(dev)->vcc) { 396 + atm_dev_put(dev); 397 + return -EBUSY; 398 + } 396 399 } 397 400 else { 398 401 int error;
+1
drivers/isdn/gigaset/capi.c
··· 1900 1900 if (b3skb == NULL) { 1901 1901 dev_err(cs->dev, "%s: out of memory\n", __func__); 1902 1902 send_conf(iif, ap, skb, CAPI_MSGOSRESOURCEERR); 1903 + kfree(b3cmsg); 1903 1904 return; 1904 1905 } 1905 1906 capi_cmsg2message(b3cmsg,
+10
drivers/net/atlx/atl1.c
··· 3504 3504 struct atl1_rfd_ring rfd_old, rfd_new; 3505 3505 struct atl1_rrd_ring rrd_old, rrd_new; 3506 3506 struct atl1_ring_header rhdr_old, rhdr_new; 3507 + struct atl1_smb smb; 3508 + struct atl1_cmb cmb; 3507 3509 int err; 3508 3510 3509 3511 tpd_old = adapter->tpd_ring; ··· 3546 3544 adapter->rrd_ring = rrd_old; 3547 3545 adapter->tpd_ring = tpd_old; 3548 3546 adapter->ring_header = rhdr_old; 3547 + /* 3548 + * Save SMB and CMB, since atl1_free_ring_resources 3549 + * will clear them. 3550 + */ 3551 + smb = adapter->smb; 3552 + cmb = adapter->cmb; 3549 3553 atl1_free_ring_resources(adapter); 3550 3554 adapter->rfd_ring = rfd_new; 3551 3555 adapter->rrd_ring = rrd_new; 3552 3556 adapter->tpd_ring = tpd_new; 3553 3557 adapter->ring_header = rhdr_new; 3558 + adapter->smb = smb; 3559 + adapter->cmb = cmb; 3554 3560 3555 3561 err = atl1_up(adapter); 3556 3562 if (err)
+8 -2
drivers/net/cnic.c
··· 951 951 &udev->l2_ring_map, 952 952 GFP_KERNEL | __GFP_COMP); 953 953 if (!udev->l2_ring) 954 - return -ENOMEM; 954 + goto err_udev; 955 955 956 956 udev->l2_buf_size = (cp->l2_rx_ring_size + 1) * cp->l2_single_buf_size; 957 957 udev->l2_buf_size = PAGE_ALIGN(udev->l2_buf_size); ··· 959 959 &udev->l2_buf_map, 960 960 GFP_KERNEL | __GFP_COMP); 961 961 if (!udev->l2_buf) 962 - return -ENOMEM; 962 + goto err_dma; 963 963 964 964 write_lock(&cnic_dev_lock); 965 965 list_add(&udev->list, &cnic_udev_list); ··· 970 970 cp->udev = udev; 971 971 972 972 return 0; 973 + err_dma: 974 + dma_free_coherent(&udev->pdev->dev, udev->l2_ring_size, 975 + udev->l2_ring, udev->l2_ring_map); 976 + err_udev: 977 + kfree(udev); 978 + return -ENOMEM; 973 979 } 974 980 975 981 static int cnic_init_uio(struct cnic_dev *dev)
+7
drivers/net/ehea/ehea_ethtool.c
··· 265 265 266 266 static int ehea_set_flags(struct net_device *dev, u32 data) 267 267 { 268 + /* Avoid changing the VLAN flags */ 269 + if ((data & (ETH_FLAG_RXVLAN | ETH_FLAG_TXVLAN)) != 270 + (ethtool_op_get_flags(dev) & (ETH_FLAG_RXVLAN | 271 + ETH_FLAG_TXVLAN))){ 272 + return -EINVAL; 273 + } 274 + 268 275 return ethtool_op_set_flags(dev, data, ETH_FLAG_LRO 269 276 | ETH_FLAG_TXVLAN 270 277 | ETH_FLAG_RXVLAN);
+7 -2
drivers/net/ppp_generic.c
··· 1283 1283 } 1284 1284 1285 1285 #ifdef CONFIG_PPP_MULTILINK 1286 + static bool mp_protocol_compress __read_mostly = true; 1287 + module_param(mp_protocol_compress, bool, S_IRUGO | S_IWUSR); 1288 + MODULE_PARM_DESC(mp_protocol_compress, 1289 + "compress protocol id in multilink fragments"); 1290 + 1286 1291 /* 1287 1292 * Divide a packet to be transmitted into fragments and 1288 1293 * send them out the individual links. ··· 1350 1345 if (nfree == 0 || nfree < navail / 2) 1351 1346 return 0; /* can't take now, leave it in xmit_pending */ 1352 1347 1353 - /* Do protocol field compression (XXX this should be optional) */ 1348 + /* Do protocol field compression */ 1354 1349 p = skb->data; 1355 1350 len = skb->len; 1356 - if (*p == 0) { 1351 + if (*p == 0 && mp_protocol_compress) { 1357 1352 ++p; 1358 1353 --len; 1359 1354 }
+1 -1
drivers/net/skfp/skfddi.c
··· 412 412 bp->SharedMemAddr = pci_alloc_consistent(&bp->pdev, 413 413 bp->SharedMemSize, 414 414 &bp->SharedMemDMA); 415 - if (!bp->SharedMemSize) { 415 + if (!bp->SharedMemAddr) { 416 416 printk("could not allocate mem for "); 417 417 printk("hardware module: %ld byte\n", 418 418 bp->SharedMemSize);
+1 -1
drivers/net/starfire.c
··· 148 148 * This SUCKS. 149 149 * We need a much better method to determine if dma_addr_t is 64-bit. 150 150 */ 151 - #if (defined(__i386__) && defined(CONFIG_HIGHMEM64G)) || defined(__x86_64__) || defined (__ia64__) || defined(__alpha__) || defined(__mips64__) || (defined(__mips__) && defined(CONFIG_HIGHMEM) && defined(CONFIG_64BIT_PHYS_ADDR)) || (defined(__powerpc64__) || defined(CONFIG_PHYS_64BIT)) 151 + #if (defined(__i386__) && defined(CONFIG_HIGHMEM64G)) || defined(__x86_64__) || defined (__ia64__) || defined(__alpha__) || (defined(CONFIG_MIPS) && ((defined(CONFIG_HIGHMEM) && defined(CONFIG_64BIT_PHYS_ADDR)) || defined(CONFIG_64BIT))) || (defined(__powerpc64__) || defined(CONFIG_PHYS_64BIT)) 152 152 /* 64-bit dma_addr_t */ 153 153 #define ADDR_64BITS /* This chip uses 64 bit addresses. */ 154 154 #define netdrv_addr_t __le64
+1 -1
drivers/net/tg3.c
··· 12694 12694 cnt = pci_read_vpd(tp->pdev, pos, 12695 12695 TG3_NVM_VPD_LEN - pos, 12696 12696 &vpd_data[pos]); 12697 - if (cnt == -ETIMEDOUT || -EINTR) 12697 + if (cnt == -ETIMEDOUT || cnt == -EINTR) 12698 12698 cnt = 0; 12699 12699 else if (cnt < 0) 12700 12700 goto out_not_found;
+19 -3
drivers/usb/atm/ueagle-atm.c
··· 2206 2206 goto err1; 2207 2207 } 2208 2208 2209 - sc->kthread = kthread_run(uea_kthread, sc, "ueagle-atm"); 2210 - if (sc->kthread == ERR_PTR(-ENOMEM)) { 2209 + /* Create worker thread, but don't start it here. Start it after 2210 + * all usbatm generic initialization is done. 2211 + */ 2212 + sc->kthread = kthread_create(uea_kthread, sc, "ueagle-atm"); 2213 + if (IS_ERR(sc->kthread)) { 2211 2214 uea_err(INS_TO_USBDEV(sc), "failed to create thread\n"); 2212 2215 goto err2; 2213 2216 } ··· 2627 2624 static int uea_probe(struct usb_interface *intf, const struct usb_device_id *id) 2628 2625 { 2629 2626 struct usb_device *usb = interface_to_usbdev(intf); 2627 + int ret; 2630 2628 2631 2629 uea_enters(usb); 2632 2630 uea_info(usb, "ADSL device founded vid (%#X) pid (%#X) Rev (%#X): %s\n", ··· 2641 2637 if (UEA_IS_PREFIRM(id)) 2642 2638 return uea_load_firmware(usb, UEA_CHIP_VERSION(id)); 2643 2639 2644 - return usbatm_usb_probe(intf, id, &uea_usbatm_driver); 2640 + ret = usbatm_usb_probe(intf, id, &uea_usbatm_driver); 2641 + if (ret == 0) { 2642 + struct usbatm_data *usbatm = usb_get_intfdata(intf); 2643 + struct uea_softc *sc = usbatm->driver_data; 2644 + 2645 + /* Ensure carrier is initialized to off as early as possible */ 2646 + UPDATE_ATM_SIGNAL(ATM_PHY_SIG_LOST); 2647 + 2648 + /* Only start the worker thread when all init is done */ 2649 + wake_up_process(sc->kthread); 2650 + } 2651 + 2652 + return ret; 2645 2653 } 2646 2654 2647 2655 static void uea_disconnect(struct usb_interface *intf)
+18 -10
net/bridge/br_multicast.c
··· 1451 1451 struct net_bridge_port *port, 1452 1452 struct sk_buff *skb) 1453 1453 { 1454 - struct sk_buff *skb2 = skb; 1454 + struct sk_buff *skb2; 1455 1455 struct ipv6hdr *ip6h; 1456 1456 struct icmp6hdr *icmp6h; 1457 1457 u8 nexthdr; ··· 1490 1490 if (!skb2) 1491 1491 return -ENOMEM; 1492 1492 1493 + err = -EINVAL; 1494 + if (!pskb_may_pull(skb2, offset + sizeof(struct icmp6hdr))) 1495 + goto out; 1496 + 1493 1497 len -= offset - skb_network_offset(skb2); 1494 1498 1495 1499 __skb_pull(skb2, offset); 1496 1500 skb_reset_transport_header(skb2); 1497 - 1498 - err = -EINVAL; 1499 - if (!pskb_may_pull(skb2, sizeof(*icmp6h))) 1500 - goto out; 1501 1501 1502 1502 icmp6h = icmp6_hdr(skb2); 1503 1503 ··· 1537 1537 switch (icmp6h->icmp6_type) { 1538 1538 case ICMPV6_MGM_REPORT: 1539 1539 { 1540 - struct mld_msg *mld = (struct mld_msg *)icmp6h; 1540 + struct mld_msg *mld; 1541 + if (!pskb_may_pull(skb2, sizeof(*mld))) { 1542 + err = -EINVAL; 1543 + goto out; 1544 + } 1545 + mld = (struct mld_msg *)skb_transport_header(skb2); 1541 1546 BR_INPUT_SKB_CB(skb2)->mrouters_only = 1; 1542 1547 err = br_ip6_multicast_add_group(br, port, &mld->mld_mca); 1543 1548 break; ··· 1555 1550 break; 1556 1551 case ICMPV6_MGM_REDUCTION: 1557 1552 { 1558 - struct mld_msg *mld = (struct mld_msg *)icmp6h; 1553 + struct mld_msg *mld; 1554 + if (!pskb_may_pull(skb2, sizeof(*mld))) { 1555 + err = -EINVAL; 1556 + goto out; 1557 + } 1558 + mld = (struct mld_msg *)skb_transport_header(skb2); 1559 1559 br_ip6_multicast_leave_group(br, port, &mld->mld_mca); 1560 1560 } 1561 1561 } 1562 1562 1563 1563 out: 1564 - __skb_push(skb2, offset); 1565 - if (skb2 != skb) 1566 - kfree_skb(skb2); 1564 + kfree_skb(skb2); 1567 1565 return err; 1568 1566 } 1569 1567 #endif
+2
net/bridge/br_stp_bpdu.c
··· 50 50 51 51 llc_mac_hdr_init(skb, p->dev->dev_addr, p->br->group_addr); 52 52 53 + skb_reset_mac_header(skb); 54 + 53 55 NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT, skb, NULL, skb->dev, 54 56 dev_queue_xmit); 55 57 }
+2 -2
net/can/bcm.c
··· 125 125 struct list_head tx_ops; 126 126 unsigned long dropped_usr_msgs; 127 127 struct proc_dir_entry *bcm_proc_read; 128 - char procname [20]; /* pointer printed in ASCII with \0 */ 128 + char procname [32]; /* inode number in decimal with \0 */ 129 129 }; 130 130 131 131 static inline struct bcm_sock *bcm_sk(const struct sock *sk) ··· 1521 1521 1522 1522 if (proc_dir) { 1523 1523 /* unique socket address as filename */ 1524 - sprintf(bo->procname, "%p", sock); 1524 + sprintf(bo->procname, "%lu", sock_i_ino(sk)); 1525 1525 bo->bcm_proc_read = proc_create_data(bo->procname, 0644, 1526 1526 proc_dir, 1527 1527 &bcm_proc_fops, sk);
+6 -2
net/ipv4/route.c
··· 2626 2626 } 2627 2627 2628 2628 if (res.type == RTN_LOCAL) { 2629 - if (!fl.fl4_src) 2630 - fl.fl4_src = fl.fl4_dst; 2629 + if (!fl.fl4_src) { 2630 + if (res.fi->fib_prefsrc) 2631 + fl.fl4_src = res.fi->fib_prefsrc; 2632 + else 2633 + fl.fl4_src = fl.fl4_dst; 2634 + } 2631 2635 dev_out = net->loopback_dev; 2632 2636 fl.oif = dev_out->ifindex; 2633 2637 res.fi = NULL;