From 6b141b34c059a74a3c8ae2c9c31707745b9b572b Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Fri, 23 Nov 2007 15:10:05 -0500 Subject: [PATCH] Import 1.3.8 --- CREDITS | 15 +++++++++++++++ Makefile | 2 +- arch/i386/config.in | 2 +- arch/i386/lib/checksum.c | 4 ++-- drivers/net/lance.c | 1 - drivers/scsi/eata.c | 4 ++++ drivers/scsi/eata.h | 7 +++++-- fs/binfmt_elf.c | 10 ++++++++-- fs/exec.c | 3 +-- fs/ext2/namei.c | 2 +- fs/isofs/dir.c | 3 +++ include/asm-alpha/socket.h | 31 +++++++++++++++++++++++++++++++ include/asm-i386/socket.h | 22 ++++++++++++++++++++++ include/linux/binfmts.h | 1 + include/linux/proc_fs.h | 1 + include/linux/sched.h | 2 +- include/linux/socket.h | 18 +----------------- kernel/ksyms.c | 1 + net/appletalk/ddp.c | 2 +- net/core/dev.c | 4 +++- net/core/skbuff.c | 8 ++++++-- net/core/sock.c | 2 +- net/ipv4/af_inet.c | 8 ++++---- net/ipv4/ip.c | 2 +- net/ipv4/tcp.c | 8 ++++---- net/ipx/af_ipx.c | 2 +- 26 files changed, 120 insertions(+), 45 deletions(-) create mode 100644 include/asm-alpha/socket.h create mode 100644 include/asm-i386/socket.h diff --git a/CREDITS b/CREDITS index 724c5fad5563..f730b91d9226 100644 --- 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 diff --git a/Makefile b/Makefile index 7ed658cbcdeb..bb9ff77190c3 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ VERSION = 1 PATCHLEVEL = 3 -SUBLEVEL = 7 +SUBLEVEL = 8 ARCH = i386 diff --git a/arch/i386/config.in b/arch/i386/config.in index 30a2732e244d..ba23c27ee602 100644 --- a/arch/i386/config.in +++ b/arch/i386/config.in @@ -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 diff --git a/arch/i386/lib/checksum.c b/arch/i386/lib/checksum.c index 5543b355608e..055610d3c899 100644 --- a/arch/i386/lib/checksum.c +++ b/arch/i386/lib/checksum.c @@ -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 diff --git a/drivers/net/lance.c b/drivers/net/lance.c index 689c07744525..38667bac3d43 100644 --- a/drivers/net/lance.c +++ b/drivers/net/lance.c @@ -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); diff --git a/drivers/scsi/eata.c b/drivers/scsi/eata.c index 99a5924d38ee..7fee555a3457 100644 --- a/drivers/scsi/eata.c +++ b/drivers/scsi/eata.c @@ -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. @@ -118,6 +121,7 @@ #include #include #include +#include #include "../block/blk.h" #include "scsi.h" #include "hosts.h" diff --git a/drivers/scsi/eata.h b/drivers/scsi/eata.h index 8b9916c9c27b..36329c165105 100644 --- a/drivers/scsi/eata.h +++ b/drivers/scsi/eata.h @@ -7,16 +7,19 @@ #include -#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 */ \ diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index 3e9ffb4929c4..ba6b22ea2a3d 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -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 }; diff --git a/fs/exec.c b/fs/exec.c index c335eeb10841..bd9f2d5ad4ac 100644 --- 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; diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c index 6c0b277e2c7b..5afce3e29b4f 100644 --- a/fs/ext2/namei.c +++ b/fs/ext2/namei.c @@ -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); diff --git a/fs/isofs/dir.c b/fs/isofs/dir.c index f5e555a221aa..36c98bc9bfb5 100644 --- a/fs/isofs/dir.c +++ b/fs/isofs/dir.c @@ -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 index 000000000000..1c2cf6a98c2a --- /dev/null +++ b/include/asm-alpha/socket.h @@ -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 index 000000000000..fc5a73cbf480 --- /dev/null +++ b/include/asm-i386/socket.h @@ -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 */ diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h index a08b3af3f47a..336dfdd9dd5c 100644 --- a/include/linux/binfmts.h +++ b/include/linux/binfmts.h @@ -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); diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h index a561f47a5f00..769f9231cbb9 100644 --- a/include/linux/proc_fs.h +++ b/include/linux/proc_fs.h @@ -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 */ diff --git a/include/linux/sched.h b/include/linux/sched.h index 31aa94d56064..45cc578b767f 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -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, \ diff --git a/include/linux/socket.h b/include/linux/socket.h index 44cff1fc4ffb..121969c62ce5 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h @@ -1,6 +1,7 @@ #ifndef _LINUX_SOCKET_H #define _LINUX_SOCKET_H +#include /* arch-dependent defines */ #include /* 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 diff --git a/kernel/ksyms.c b/kernel/ksyms.c index 664899c9aff9..a31a4e588d35 100644 --- a/kernel/ksyms.c +++ b/kernel/ksyms.c @@ -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), diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c index 13dc62816918..1b309e4717b1 100644 --- a/net/appletalk/ddp.c +++ b/net/appletalk/ddp.c @@ -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: diff --git a/net/core/dev.c b/net/core/dev.c index cb8602c1c3b6..d83e01a19ffa 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -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--; } diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 69aae72e1b80..586137042353 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -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; } diff --git a/net/core/sock.c b/net/core/sock.c index a06fc18afe2b..c12a548d6bc6 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -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) diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index ff305d54b8dd..e3f6256682b7 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -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: diff --git a/net/ipv4/ip.c b/net/ipv4/ip.c index c402688d7264..e7ea2dcbe0bf 100644 --- a/net/ipv4/ip.c +++ b/net/ipv4/ip.c @@ -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; diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 579af8031ee9..8a7a0c7d2cd4 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -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 diff --git a/net/ipx/af_ipx.c b/net/ipx/af_ipx.c index bb65ff45d7e4..cfe35b853499 100644 --- a/net/ipx/af_ipx.c +++ b/net/ipx/af_ipx.c @@ -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: -- 2.39.5