]> git.neil.brown.name Git - history.git/commitdiff
Import 1.1.27 1.1.27
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:09:33 +0000 (15:09 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:09:33 +0000 (15:09 -0500)
Makefile
drivers/net/3c509.c
fs/devices.c
include/linux/nfs_fs.h
net/inet/icmp.c

index 21b9affc5cb2c6a78fd19d314a3d533c9cb3fba0..ef491711f06eaa008bb388c1add05be7b6fde9ff 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 1
-SUBLEVEL = 26
+SUBLEVEL = 27
 
 all:   Version zImage
 
index f4d03f08cb0738ee4c9710f9c62a48e3d103d256..e21b3e54add65422102cd168099430bd2fd479d2 100644 (file)
@@ -1,7 +1,8 @@
 /* 3c509.c: A 3c509 EtherLink3 ethernet driver for linux. */
 /*
-       Written 1993 by Donald Becker.
+       Written 1993,1994 by Donald Becker.
 
+       Copyright 1994 by Donald Becker. 
        Copyright 1993 United States Government as represented by the
        Director, National Security Agency.      This software may be used and
        distributed according to the terms of the GNU Public License,
        
        This driver is for the 3Com EtherLinkIII series.
 
-       The author may be reached as becker@super.org or
-       C/O Supercomputing Research Ctr., 17100 Science Dr., Bowie MD 20715
+       The author may be reached as becker@cesdis.gsfc.nasa.gov or
+       C/O Center of Excellence in Space Data and Information Sciences
+               Code 930.5, Goddard Space Flight Center, Greenbelt MD 20771
+
+       Known limitations:
+       Because of the way 3c509 ISA detection works it's difficult to predict
+       a priori which of several ISA-mode cards will be detected first.
+
+       This driver does not use predictive interrupt mode, resulting in higher
+       packet latency but lower overhead.  If interrupts are disabled for an
+       unusually long time it could also result in missed packets, but in
+       practice this rarely happens.
 */
 
-static char *version = "3c509.c:pl15k 3/5/94 becker@super.org\n";
+static char *version = "3c509.c:1.01 7/5/94 becker@cesdis.gsfc.nasa.gov\n";
 
 #include <linux/config.h>
 #include <linux/kernel.h>
@@ -92,11 +103,14 @@ int el3_probe(struct device *dev)
        short *phys_addr = (short *)dev->dev_addr;
        static int current_tag = 0;
 
-       /* First check for a board on the EISA bus. */
+       /* First check all slots of the EISA bus.  The next slot address to
+          probe is kept in 'eisa_addr' to support multiple probe() calls. */
        if (EISA_bus) {
-               static int eisa_addr;
-               for (ioaddr=0x1000 ; ioaddr < 0x9000; ioaddr += 0x1000) {
-                       eisa_addr = ioaddr;
+               static int eisa_addr = 0x1000;
+               while (eisa_addr < 0x9000) {
+                       ioaddr = eisa_addr;
+                       eisa_addr += 0x1000;
+
                        /* Check the standard EISA ID register for an encoded '3Com'. */
                        if (inw(ioaddr + 0xC80) != 0x6d50)
                                continue;
@@ -136,7 +150,10 @@ int el3_probe(struct device *dev)
        }
 #endif   
 
-       /* Send the ID sequence to the ID_PORT. */
+       /* Next check for all ISA bus boards by sending the ID sequence to the
+          ID_PORT.  We find cards past the first by setting the 'current_tag'
+          on cards as they are found.  Cards with their tag set will not
+          respond to subseqent ID seqences. */
        outb(0x00, ID_PORT);
        outb(0x00, ID_PORT);
        for(i = 0; i < 255; i++) {
@@ -169,9 +186,6 @@ int el3_probe(struct device *dev)
        }
        irq = id_read_eeprom(9) >> 12;
 
-       /* The current Space.c structure makes it difficult to have more
-          than one adaptor initialized.  Send me email if you have a need for
-          multiple adaptors, and we'll work out something.      -becker@super.org */
        if (dev->base_addr != 0
                &&      dev->base_addr != (unsigned short)ioaddr) {
                return -ENODEV;
index aa309ce50caff8c74f2ee9f253cdbcc9dd6f7ecf..f46c31ddc78969d7de33a0d9804087b4f5febee7 100644 (file)
@@ -127,10 +127,10 @@ int check_disk_change(dev_t dev)
        i = MAJOR(dev);
        if (i >= MAX_BLKDEV || (fops = blkdevs[i].fops) == NULL)
                return 0;
-       if (fops->check_media_change != NULL) {
-               if (!fops->check_media_change(dev))
-                       return 0;
-       } 
+       if (fops->check_media_change == NULL)
+               return 0;
+       if (!fops->check_media_change(dev))
+               return 0;
 
        printk("VFS: Disk change detected on device %d/%d\n",
                                        MAJOR(dev), MINOR(dev));
index e6d5de1e03741e41d1b666ed881bc9eae4f0cd55..902d5f269498f2d713c3be8631d544b5d9904e34 100644 (file)
@@ -22,7 +22,7 @@
 
 #define NFS_READDIR_CACHE_SIZE         64
 
-#define NFS_MAX_FILE_IO_BUFFER_SIZE    (7*512)
+#define NFS_MAX_FILE_IO_BUFFER_SIZE    16834
 #define NFS_DEF_FILE_IO_BUFFER_SIZE    1024
 
 /*
index b928abaf40164fa3fbadc408b4cbe5a1405cd22a..fd94a59682d681bd019f074d14b2168cf4fdd8b4 100644 (file)
@@ -21,6 +21,8 @@
  *             Alan Cox        :       Routing errors
  *             Alan Cox        :       Changes for newer routing code
  *             Alan Cox        :       Removed old debugging junk
+ *             Alan Cox        :       Fixed the ICMP error status of net/host unreachable
+ *     Gerhard Koerting        :       Fixed broadcast ping properly
  *
  * 
  *
@@ -65,8 +67,8 @@ struct icmp_mib       icmp_statistics={0,};
 
 /* An array of errno for error messages from dest unreach. */
 struct icmp_err icmp_err_convert[] = {
-  { ENETUNREACH,       1 },    /*      ICMP_NET_UNREACH        */
-  { EHOSTUNREACH,      1 },    /*      ICMP_HOST_UNREACH       */
+  { ENETUNREACH,       0 },    /*      ICMP_NET_UNREACH        */
+  { EHOSTUNREACH,      0 },    /*      ICMP_HOST_UNREACH       */
   { ENOPROTOOPT,       1 },    /*      ICMP_PROT_UNREACH       */
   { ECONNREFUSED,      1 },    /*      ICMP_PORT_UNREACH       */
   { EOPNOTSUPP,                0 },    /*      ICMP_FRAG_NEEDED        */
@@ -370,7 +372,7 @@ static void icmp_echo(struct icmphdr *icmph, struct sk_buff *skb, struct device
        skb2->free = 1;
 
        /* Build Layer 2-3 headers for message back to source */
-       offset = ip_build_header(skb2, daddr, dev->pa_addr, &ndev,
+       offset = ip_build_header(skb2, daddr, saddr, &ndev,
                IPPROTO_ICMP, opt, len, skb->ip_hdr->tos,255);
        if (offset < 0) 
        {
@@ -611,12 +613,16 @@ int icmp_rcv(struct sk_buff *skb1, struct device *dev, struct options *opt,
         *      Parse the ICMP message 
         */
 
-       if (ip_chk_addr(daddr) == IS_BROADCAST && icmph->type != ICMP_ECHO) 
+       if (ip_chk_addr(daddr) == IS_BROADCAST)
        {
-               icmp_statistics.IcmpInErrors++;
-               kfree_skb(skb1, FREE_READ);
-               return(0);
-       }
+               if (icmph->type != ICMP_ECHO) 
+               {
+                       icmp_statistics.IcmpInErrors++;
+                       kfree_skb(skb1, FREE_READ);
+                       return(0);
+               }
+               daddr=dev->pa_addr;
+       }
 
        switch(icmph->type) 
        {