]> git.neil.brown.name Git - history.git/commitdiff
Import 1.3.8 1.3.8
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:10:05 +0000 (15:10 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:10:05 +0000 (15:10 -0500)
26 files changed:
CREDITS
Makefile
arch/i386/config.in
arch/i386/lib/checksum.c
drivers/net/lance.c
drivers/scsi/eata.c
drivers/scsi/eata.h
fs/binfmt_elf.c
fs/exec.c
fs/ext2/namei.c
fs/isofs/dir.c
include/asm-alpha/socket.h [new file with mode: 0644]
include/asm-i386/socket.h [new file with mode: 0644]
include/linux/binfmts.h
include/linux/proc_fs.h
include/linux/sched.h
include/linux/socket.h
kernel/ksyms.c
net/appletalk/ddp.c
net/core/dev.c
net/core/skbuff.c
net/core/sock.c
net/ipv4/af_inet.c
net/ipv4/ip.c
net/ipv4/tcp.c
net/ipx/af_ipx.c

diff --git a/CREDITS b/CREDITS
index 724c5fad556310c248f9fca3c73c4d91c1099d45..f730b91d9226fc6eb22460c22f4bcd958f0f2667 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -233,6 +233,13 @@ S: Myrstuguv. 83
 S: S-143 32 VARBY
 S: Sweden
 
+N: Paal-Kristian Engstad
+E: engstad@funcom.com
+D: Wrote smbfs (to mount WfW, NT and OS/2 network drives.)
+S: Oscars gt. 35
+S: N-0258 OSLO
+S: Norway
+
 N: Doug Evans
 E: dje@cygnus.com
 D: Wrote Xenix FS (part of standard kernel since 0.99.15)
@@ -452,6 +459,14 @@ N: Rudolf Koenig
 E: rfkoenig@immd4.informatik.uni-erlangen.de
 D: The Linux Support Team Erlangen
 
+N: Markus Kuhn
+E: mskuhn@cip.informatik.uni-erlangen.de
+W: http://wwwcip.informatik.uni-erlangen.de/user/mskuhn
+D: Unicode, time, standards
+S: Schlehenweg 9
+S: D-91080 Uttenreuth
+S: Germany
+
 N: Bas Laarhoven
 E: bas@vimec.nl
 D: Loadable modules and ftape driver
index 7ed658cbcdeb3353b54bdab12a4a64ffbb3d7918..bb9ff77190c3fe2676224cba6cb3b21ba1bd0aa7 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 3
-SUBLEVEL = 7
+SUBLEVEL = 8
 
 ARCH = i386
 
index 30a2732e244daa66e1d25578c2166fa901c63c21..ba23c27ee60280acaa8c9dda0c947fc20d96d7bb 100644 (file)
@@ -112,7 +112,7 @@ bool 'Seagate ST-02 and Future Domain TMC-8xx SCSI support' CONFIG_SCSI_SEAGATE
 bool 'Trantor T128/T128F/T228 SCSI support' CONFIG_SCSI_T128 n
 bool 'UltraStor SCSI support' CONFIG_SCSI_ULTRASTOR n
 bool '7000FASST SCSI support' CONFIG_SCSI_7000FASST n
-#bool 'EATA ISA/EISA (DPT PM2011/021/012/022/122/322) support' CONFIG_SCSI_EATA n
+bool 'EATA ISA/EISA (DPT PM2011/021/012/022/122/322) support' CONFIG_SCSI_EATA n
 #bool 'SCSI debugging host adapter' CONFIG_SCSI_DEBUG n
 fi
 
index 5543b355608e6e22b34d628efd0af4b40d22e986..055610d3c899fb0ec417063615459677f3a36e94 100644 (file)
@@ -180,7 +180,7 @@ unsigned int csum_partial_copy_fromuser( char *src, char *dst,
        movw %%cx, (%%edi)
        leal 2(%%edi), %%edi
        je 6f
-       shll $16,%%edx
+       shll $16,%%ecx
 5:     movb %%fs:(%%esi), %%cl
        movb %%cl, (%%edi)
 6:     addl %%ecx, %%eax
@@ -275,7 +275,7 @@ unsigned int csum_partial_copy( char *src, char *dst,
        movw %%cx, (%%edi)
        leal 2(%%edi), %%edi
        je 6f
-       shll $16,%%edx
+       shll $16,%%ecx
 5:     movb (%%esi), %%cl
        movb %%cl, (%%edi)
 6:     addl %%ecx, %%eax
index 689c07744525bb7016d3bd98a6a3b9501d395cee..38667bac3d431fbb73be27bf49a0d7df3560581a 100644 (file)
@@ -1000,7 +1000,6 @@ lance_rx(struct device *dev)
                        }
                        skb->dev = dev;
                        skb_reserve(skb,2);     /* 16 byte align */
-                       skb_put(skb,pkt_len);   /* Make room */
                        eth_copy_and_sum(skb_put(skb,pkt_len),
                                   (unsigned char *)(lp->rx_ring[entry].base & 0x00ffffff),
                                   pkt_len,0);
index 99a5924d38ee42721e76143fcf41faa1708db5dd..7fee555a345759921f1c21e005b546bc944472fa 100644 (file)
@@ -1,6 +1,9 @@
 /*
  *      eata.c - Low-level driver for EATA/DMA SCSI host adapters.
  *
+ *       6 Jul 1995 rev. 2.01 for linux 1.3.7
+ *          Update required by the new /proc/scsi support.
+ *
  *      11 Mar 1995 rev. 2.00 for linux 1.2.0
  *          Fixed a bug which prevented media change detection for removable
  *          disk drives.
 #include <linux/ioport.h>
 #include <asm/io.h>
 #include <asm/system.h>
+#include <linux/proc_fs.h>
 #include "../block/blk.h"
 #include "scsi.h"
 #include "hosts.h"
index 8b9916c9c27bb68ef950e78160854189308ef590..36329c16510565082fab6fc2fcba13cac5f2934c 100644 (file)
@@ -7,16 +7,19 @@
 
 #include <linux/scsicam.h>
 
-#define EATA_VERSION "2.00.00"
-
 int eata2x_detect(Scsi_Host_Template *);
 int eata2x_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
 int eata2x_abort(Scsi_Cmnd *);
 int eata2x_reset(Scsi_Cmnd *);
 
+#define EATA_VERSION "2.01.00"
+
 #define EATA {                                                 \
                NULL, /* Ptr for modules */                    \
                NULL, /* usage count for modules */            \
+               NULL,                                          \
+               "eata2x",                                      \
+               PROC_SCSI_EATA2X,                              \
                "EATA/DMA 2.0x rev. " EATA_VERSION " ",        \
                eata2x_detect,                                 \
                NULL, /* Release */                            \
index 3e9ffb4929c43cf4eaf7d58236f74eac1a46cad7..ba6b22ea2a3d4a38e27b0e8a16220f72130acc13 100644 (file)
@@ -53,11 +53,17 @@ static int load_elf_library(int fd);
 static int elf_core_dump(long signr, struct pt_regs * regs);
 extern int dump_fpu (elf_fpregset_t *);
 
+/*
+ * Please do not change the default core dump format to ELF when most people
+ * do not have a gdb capable of interpreting ELF core files.  Once a gdb has
+ * been released that understands ELF, *THEN* switch the core dump format.
+ */
+
 struct linux_binfmt elf_format = {
 #ifndef MODULE
-       NULL, NULL, load_elf_binary, load_elf_library, elf_core_dump
+       NULL, NULL, load_elf_binary, load_elf_library, aout_core_dump
 #else
-       NULL, &mod_use_count_, load_elf_binary, load_elf_library, elf_core_dump
+       NULL, &mod_use_count_, load_elf_binary, load_elf_library, aout_core_dump
 #endif
 };
 
index c335eeb10841625cb9ded9ab8e2bb15ff5b3f259..bd9f2d5ad4ac4683f5bb95bbb039f23e3f052d11 100644 (file)
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -50,7 +50,6 @@ asmlinkage int sys_brk(unsigned long);
 
 static int load_aout_binary(struct linux_binprm *, struct pt_regs * regs);
 static int load_aout_library(int fd);
-static int aout_core_dump(long signr, struct pt_regs * regs);
 
 extern void dump_thread(struct pt_regs *, struct user *);
 
@@ -163,7 +162,7 @@ if (file.f_op->lseek) { \
  * field, which also makes sure the core-dumps won't be recursive if the
  * dumping of the process results in another error..
  */
-static int aout_core_dump(long signr, struct pt_regs * regs)
+int aout_core_dump(long signr, struct pt_regs * regs)
 {
        struct inode * inode = NULL;
        struct file file;
index 6c0b277e2c7bef4543e1d38de793d1cd0022fe69..5afce3e29b4fb239ad7fb8fbd37fb8d4e1f533a2 100644 (file)
@@ -759,7 +759,7 @@ int ext2_symlink (struct inode * dir, const char * name, int len,
        for (l = 0; l < inode->i_sb->s_blocksize - 1 &&
             symname [l]; l++)
                ;
-       if (l >= EXT2_N_BLOCKS * sizeof (unsigned long)) {
+       if (l >= EXT2_N_BLOCKS * sizeof (__u32)) {
 
                ext2_debug ("l=%d, normal symlink\n", l);
 
index f5e555a221aa918de68d7fb98ec8249c773609c8..36c98bc9bfb59dcfe11ba57bfc1a36dad29742a9 100644 (file)
@@ -231,6 +231,7 @@ static int do_isofs_readdir(struct inode *inode, struct file *filp,
                        /* rrflag == 1 means that we have a new name (kmalloced) */
                        if (rrflag == 1) {
                                rrflag = filldir(dirent, name, len, filp->f_pos, inode_number);
+                               dcache_add(inode, name, len, inode_number);
                                kfree(name); /* this was allocated in get_r_r_filename.. */
                                if (rrflag < 0)
                                        break;
@@ -243,6 +244,7 @@ static int do_isofs_readdir(struct inode *inode, struct file *filp,
                        len = isofs_name_translate(name, len, tmpname);
                        if (filldir(dirent, tmpname, len, filp->f_pos, inode_number) < 0)
                                break;
+                       dcache_add(inode, tmpname, len, inode_number);
                        filp->f_pos += de_len;
                        continue;
                }
@@ -250,6 +252,7 @@ static int do_isofs_readdir(struct inode *inode, struct file *filp,
                if (filldir(dirent, name, len, filp->f_pos, inode_number) < 0)
                        break;
 
+               dcache_add(inode, name, len, inode_number);
                filp->f_pos += de_len;
                continue;
        }
diff --git a/include/asm-alpha/socket.h b/include/asm-alpha/socket.h
new file mode 100644 (file)
index 0000000..1c2cf6a
--- /dev/null
@@ -0,0 +1,31 @@
+#ifndef _ASM_SOCKET_H
+#define _ASM_SOCKET_H
+
+/* For setsockoptions(2) */
+/*
+ * Note: we only bother about making the SOL_SOCKET options
+ * same as OSF/1, as that's all that "normal" programs are
+ * likely to set.  We don't necessarily want to be binary
+ * compatible with _everything_. 
+ */
+#define SOL_SOCKET     0xffff
+
+#define SO_DEBUG       0x0001
+#define SO_REUSEADDR   0x0004
+#define SO_KEEPALIVE   0x0008
+#define SO_DONTROUTE   0x0010
+#define SO_BROADCAST   0x0020
+#define SO_LINGER      0x0080
+#define SO_OOBINLINE   0x0100
+/* To add :#define SO_REUSEPORT 0x0200 */
+
+#define SO_TYPE                0x1008
+#define SO_ERROR       0x1007
+#define SO_SNDBUF      0x1001
+#define SO_RCVBUF      0x1002
+
+/* linux-specific, might as well be the same as on i386 */
+#define SO_NO_CHECK    11
+#define SO_PRIORITY    12
+
+#endif /* _ASM_SOCKET_H */
diff --git a/include/asm-i386/socket.h b/include/asm-i386/socket.h
new file mode 100644 (file)
index 0000000..fc5a73c
--- /dev/null
@@ -0,0 +1,22 @@
+#ifndef _ASM_SOCKET_H
+#define _ASM_SOCKET_H
+
+/* For setsockoptions(2) */
+#define SOL_SOCKET     1
+
+#define SO_DEBUG       1
+#define SO_REUSEADDR   2
+#define SO_TYPE                3
+#define SO_ERROR       4
+#define SO_DONTROUTE   5
+#define SO_BROADCAST   6
+#define SO_SNDBUF      7
+#define SO_RCVBUF      8
+#define SO_KEEPALIVE   9
+#define SO_OOBINLINE   10
+#define SO_NO_CHECK    11
+#define SO_PRIORITY    12
+#define SO_LINGER      13
+/* To add :#define SO_REUSEPORT 14 */
+
+#endif /* _ASM_SOCKET_H */
index a08b3af3f47a82afc2ce59281c2d3d63bd65829e..336dfdd9dd5c16775cb5de0074f3067b8264e263 100644 (file)
@@ -44,6 +44,7 @@ extern int read_exec(struct inode *inode, unsigned long offset,
        char * addr, unsigned long count, int to_kmem);
 
 extern int open_inode(struct inode * inode, int mode);
+extern int aout_core_dump(long signr, struct pt_regs * regs);
 
 extern void flush_old_exec(struct linux_binprm * bprm);
 extern unsigned long setup_arg_pages(unsigned long text_size,unsigned long * page);
index a561f47a5f00db66ea476ef8a1214f220f0a64de..769f9231cbb979582f36cb6cc97a288928f2de41 100644 (file)
@@ -127,6 +127,7 @@ enum scsi_directory_inos {
        PROC_SCSI_NCR53C7xx,
        PROC_SCSI_ULTRASTOR,
        PROC_SCSI_7000FASST,
+       PROC_SCSI_EATA2X,
        PROC_SCSI_SCSI_DEBUG,   
        PROC_SCSI_NOT_PRESENT,
        PROC_SCSI_FILE,                        /* I'm asuming here that we */
index 31aa94d56064a5c060b7baa8a0a5dd6eec6ff0be..45cc578b767fa11852d5c83b88b1385ab3c11c56 100644 (file)
@@ -225,7 +225,7 @@ struct task_struct {
  * your own risk!. Base=0, limit=0x1fffff (=2MB)
  */
 #define INIT_TASK \
-/* state etc */        { 0,15,15,0,0,0,0, \
+/* state etc */        { 0,15*HZ/100,15*HZ/100,0,0,0,0, \
 /* debugregs */ { 0, },            \
 /* exec domain */&default_exec_domain, \
 /* binfmt */   NULL, \
index 44cff1fc4ffb1ed2d6e314c64d2b197f52f6844d..121969c62ce5b324615aa85643d593177ba26f01 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef _LINUX_SOCKET_H
 #define _LINUX_SOCKET_H
 
+#include <asm/socket.h>                        /* arch-dependent defines       */
 #include <linux/sockios.h>             /* the SIOCxxx I/O controls     */
 
 
@@ -59,7 +60,6 @@ struct linger {
 #define MSG_DONTROUTE  4
 
 /* Setsockoptions(2) level. Thanks to BSD these must match IPPROTO_xxx */
-#define SOL_SOCKET     1
 #define SOL_IP         0
 #define SOL_IPX                256
 #define SOL_AX25       257
@@ -68,22 +68,6 @@ struct linger {
 #define SOL_TCP                6
 #define SOL_UDP                17
 
-/* For setsockoptions(2) */
-#define SO_DEBUG       1
-#define SO_REUSEADDR   2
-#define SO_TYPE                3
-#define SO_ERROR       4
-#define SO_DONTROUTE   5
-#define SO_BROADCAST   6
-#define SO_SNDBUF      7
-#define SO_RCVBUF      8
-#define SO_KEEPALIVE   9
-#define SO_OOBINLINE   10
-#define SO_NO_CHECK    11
-#define SO_PRIORITY    12
-#define SO_LINGER      13
-/* To add :#define SO_REUSEPORT 14 */
-
 /* IP options */
 #define IP_TOS         1
 #define        IPTOS_LOWDELAY          0x10
index 664899c9aff9da8cc32cabf445fa1cfc9780dca9..a31a4e588d35105883aa30f6f73e71838d4ea73c 100644 (file)
@@ -176,6 +176,7 @@ struct symbol_table symbol_table = {
        X(__wait_on_buffer),
        X(dcache_lookup),
        X(dcache_add),
+       X(aout_core_dump),
 
        /* device registration */
        X(register_chrdev),
index 13dc62816918141a1738745f193dba7c0b7e56bf..1b309e4717b153d3c230cd9596a9b2ead595deb3 100644 (file)
@@ -958,7 +958,7 @@ static int atalk_setsockopt(struct socket *sock, int level, int optname, char *o
                        }
                        break;
                        
-               case SOL_SOCKET:                
+               case SOL_SOCKET:
                        return sock_setsockopt(sk,level,optname,optval,optlen);
 
                default:
index cb8602c1c3b646df5739b5a217f46fb580a75fa2..d83e01a19ffa4440793f64fc9b76827621663cdf 100644 (file)
@@ -356,7 +356,8 @@ void dev_queue_xmit(struct sk_buff *skb, struct device *dev, int pri)
 
        save_flags(flags);
        cli();  
-       if (dev_nit && !where) 
+       if (/*dev_nit && */!where)      /* Always keep order. It helps other hosts
+                                          far more than it costs us */
        {
                skb_queue_tail(dev->buffs + pri,skb);
                skb_device_unlock(skb);         /* Buffer is on the device queue and can be freed safely */
@@ -381,6 +382,7 @@ void dev_queue_xmit(struct sk_buff *skb, struct device *dev, int pri)
                                if ((skb2 = skb_clone(skb, GFP_ATOMIC)) == NULL)
                                        break;
                                skb2->h.raw = skb2->data + dev->hard_header_len;
+                               skb2->mac.raw = skb2->data;
                                ptype->func(skb2, skb->dev, ptype);
                                nitcount--;
                        }
index 69aae72e1b804e28e4518c3c90c693f48e435de5..586137042353902f5f37f2eb082d206f4c3a471b 100644 (file)
@@ -613,6 +613,7 @@ struct sk_buff *skb_clone(struct sk_buff *skb, int priority)
        n->when=skb->when;
        n->dev=skb->dev;
        n->h.raw=skb->h.raw+offset;
+       n->mac.raw=skb->mac.raw+offset;
        n->ip_hdr=(struct iphdr *)(((char *)skb->ip_hdr)+offset);
        n->saddr=skb->saddr;
        n->daddr=skb->daddr;
@@ -674,8 +675,11 @@ void dev_kfree_skb(struct sk_buff *skb, int mode)
 
 struct sk_buff *dev_alloc_skb(unsigned int length)
 {
-       struct sk_buff *skb=alloc_skb(length+16, GFP_ATOMIC);
-       skb_reserve(skb,16);
+       struct sk_buff *skb;
+
+       skb = alloc_skb(length+16, GFP_ATOMIC);
+       if (skb)
+               skb_reserve(skb,16);
        return skb;
 }
 
index a06fc18afe2b0ccb9cdf1ad081d879b4fe66b715..c12a548d6bc6ac66cc0eb05be69377c7b6ab97f1 100644 (file)
@@ -129,7 +129,7 @@ int sock_setsockopt(struct sock *sk, int level, int optname,
        if(err)
                return err;
        
-       val = get_fs_long((unsigned long *)optval);
+       val = get_user((int *)optval);
        valbool = val?1:0;
        
        switch(optname) 
index ff305d54b8dd162475061526395ea1e4acdd4c7b..e3f6256682b72cfd2559a1a2ff0fd40f029aaf4b 100644 (file)
@@ -1280,7 +1280,7 @@ static int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 {
        struct sock *sk=(struct sock *)sock->data;
        int err;
-       int tmp;
+       int pid;
 
        switch(cmd) 
        {
@@ -1289,11 +1289,11 @@ static int inet_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
                        err=verify_area(VERIFY_READ,(int *)arg,sizeof(long));
                        if(err)
                                return err;
-                       tmp = get_fs_long((int *) arg);
+                       pid = get_user((int *) arg);
                        /* see inet_fcntl */
-                       if (current->pid != tmp && current->pgrp != -tmp && !suser())
+                       if (current->pid != pid && current->pgrp != -pid && !suser())
                                return -EPERM;
-                       sk->proc = tmp;
+                       sk->proc = pid;
                        return(0);
                case FIOGETOWN:
                case SIOCGPGRP:
index c402688d7264a7cca3eb3543b31a3ee3b59b830d..e7ea2dcbe0bf31c92429a472a31d954547c2ec97 100644 (file)
@@ -1660,7 +1660,7 @@ static void ip_loopback(struct device *old_dev, struct sk_buff *skb)
        extern struct device loopback_dev;
        struct device *dev=&loopback_dev;
        int len=skb->len-old_dev->hard_header_len;
-       struct sk_buff *newskb=dev_alloc_skb(len+dev->hard_header_len);
+       struct sk_buff *newskb=dev_alloc_skb(len+dev->hard_header_len+15);
        
        if(newskb==NULL)
                return;
index 579af8031ee9d95676fc325b34b5bb010c7ebefd..8a7a0c7d2cd4926191102d7f25ad6e8740bad875 100644 (file)
@@ -2020,7 +2020,7 @@ static int tcp_read(struct sock *sk, unsigned char *to,
        while (len > 0) 
        {
                struct sk_buff * skb;
-               unsigned long offset;
+               u32 offset;
        
                /*
                 * Are we at urgent data? Stop if we have read anything.
@@ -2125,7 +2125,7 @@ static int tcp_read(struct sock *sk, unsigned char *to,
                
                if (sk->urg_data) 
                {
-                       unsigned long urg_offset = sk->urg_seq - *seq;
+                       u32 urg_offset = sk->urg_seq - *seq;
                        if (urg_offset < used) 
                        {
                                if (!urg_offset) 
@@ -4085,7 +4085,7 @@ extern __inline__ int tcp_data(struct sk_buff *skb, struct sock *sk,
  
 static void tcp_check_urg(struct sock * sk, struct tcphdr * th)
 {
-       unsigned long ptr = ntohs(th->urg_ptr);
+       u32 ptr = ntohs(th->urg_ptr);
 
        if (ptr)
                ptr--;
@@ -4118,7 +4118,7 @@ static void tcp_check_urg(struct sock * sk, struct tcphdr * th)
 extern __inline__ int tcp_urg(struct sock *sk, struct tcphdr *th,
        unsigned long saddr, unsigned long len)
 {
-       unsigned long ptr;
+       u32 ptr;
 
        /*
         *      Check if we get a new urgent pointer - normally not 
index bb65ff45d7e4340e2ca1ec8c4f2f3761429f7044..cfe35b8534996a315afefd4cb1e44e13494d58c7 100644 (file)
@@ -1298,7 +1298,7 @@ static int ipx_setsockopt(struct socket *sock, int level, int optname, char *opt
                        }
                        break;
                        
-               case SOL_SOCKET:                
+               case SOL_SOCKET:
                        return sock_setsockopt(sk,level,optname,optval,optlen);
 
                default: