diff options
author | Linus Torvalds <torvalds@cc.helsinki.fi> | 1994-03-13 01:55:41 +0200 |
---|---|---|
committer | Nicolas Pitre <nico@cam.org> | 2007-08-19 14:19:36 -0400 |
commit | ab95eb709f42d5dabcda86b31d35429f25a4934b (patch) | |
tree | 3daace3103106c322d222f261d4c784920e5e275 | |
parent | 73907e3b1b8e4719e039eb6b46b2f376e952356c (diff) | |
download | archive-ab95eb709f42d5dabcda86b31d35429f25a4934b.tar.gz |
ALPHA-1.0
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | README | 14 | ||||
-rw-r--r-- | config.in | 4 | ||||
-rw-r--r-- | drivers/net/3c509.c | 10 | ||||
-rw-r--r-- | drivers/scsi/scsi.c | 8 | ||||
-rw-r--r-- | fs/buffer.c | 6 | ||||
-rw-r--r-- | fs/ext2/CHANGES | 11 | ||||
-rw-r--r-- | fs/ext2/super.c | 28 | ||||
-rw-r--r-- | fs/proc/link.c | 4 | ||||
-rw-r--r-- | include/linux/ext2_fs.h | 4 | ||||
-rw-r--r-- | include/linux/interrupt.h | 6 | ||||
-rw-r--r-- | kernel/traps.c | 8 | ||||
-rw-r--r-- | mm/kmalloc.c | 6 | ||||
-rw-r--r-- | mm/swap.c | 6 | ||||
-rw-r--r-- | net/inet/ip.c | 2 | ||||
-rw-r--r-- | net/inet/skbuff.c | 10 | ||||
-rw-r--r-- | net/inet/sock.c | 6 | ||||
-rw-r--r-- | net/inet/tcp.c | 94 | ||||
-rw-r--r-- | zBoot/Makefile | 2 |
19 files changed, 100 insertions, 133 deletions
@@ -149,7 +149,7 @@ init/main.o: $(CONFIGURE) init/main.c $(CC) $(CFLAGS) $(PROFILING) -c -o $*.o $< tools/system: boot/head.o init/main.o tools/version.o linuxsubdirs - $(LD) $(LDFLAGS) -T 1000 boot/head.o init/main.o tools/version.o \ + $(LD) $(LDFLAGS) -Ttext 1000 boot/head.o init/main.o tools/version.o \ $(ARCHIVES) \ $(FILESYSTEMS) \ $(DRIVERS) \ @@ -194,7 +194,7 @@ zlilo: $(CONFIGURE) zImage if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi tools/zSystem: boot/head.o init/main.o tools/version.o linuxsubdirs - $(LD) $(LDFLAGS) -T 100000 boot/head.o init/main.o tools/version.o \ + $(LD) $(LDFLAGS) -Ttext 100000 boot/head.o init/main.o tools/version.o \ $(ARCHIVES) \ $(FILESYSTEMS) \ $(DRIVERS) \ @@ -1,18 +1,18 @@ - Linux kernel release 0.99 patchlevel 15 + Linux kernel release 1.0 -These are the release notes for linux version 0.99.15. Read them -carefully, as they tell you what's new, explain how to install the -kernel, and what to do if something goes wrong. +These are the release notes for linux version 1.0. Read them carefully, +as they tell you what's new, explain how to install the kernel, and what +to do if something goes wrong. INSTALLING the kernel: - - if you install by patching, you need a *clean* 0.99.14 source tree, + - if you install by patching, you need a *clean* 0.99.15 source tree, which presumably exists in /usr/src/linux. If so, to get the kernel patched, just do a cd /usr/src - patch -p0 < linux-0.99.patch15 + patch -p0 < linux-1.0.patch and you should be ok. You may want to remove the backup files (xxx~ or xxx.orig), and make sure that there are no failed patches (xxx# or @@ -21,7 +21,7 @@ INSTALLING the kernel: - If you install the full sources, do a cd /usr/src - tar xvf linux-0.99.15.tar + tar xvf linux-1.0.tar to get it all put in place. @@ -106,7 +106,7 @@ bool 'System V and Coherent filesystem support' CONFIG_SYSV_FS n * #bool 'Keyboard meta-key sends ESC-prefix' CONFIG_KBD_META y #bool 'Keyboard Num Lock on by default' CONFIG_KBD_NUML y -bool 'Parallel printer support' CONFIG_PRINTER y +bool 'Parallel printer support' CONFIG_PRINTER n bool 'Logitech busmouse support' CONFIG_BUSMOUSE n bool 'PS/2 mouse (aka "auxiliary device") support' CONFIG_PSMOUSE y if [ "$CONFIG_PSMOUSE" = "y" ] @@ -114,7 +114,7 @@ bool 'C&T 82C710 mouse port support (as on TI Travelmate)' CONFIG_82C710_MOUSE y fi bool 'Microsoft busmouse support' CONFIG_MS_BUSMOUSE n bool 'ATIXL busmouse support' CONFIG_ATIXL_BUSMOUSE n -bool 'Selection (cut and paste for virtual consoles)' CONFIG_SELECTION y +bool 'Selection (cut and paste for virtual consoles)' CONFIG_SELECTION n bool 'QIC-02 tape support' CONFIG_TAPE_QIC02 n bool 'QIC-117 tape support' CONFIG_FTAPE n if [ "$CONFIG_FTAPE" = "y" ] diff --git a/drivers/net/3c509.c b/drivers/net/3c509.c index f7077d5..e412764 100644 --- a/drivers/net/3c509.c +++ b/drivers/net/3c509.c @@ -13,7 +13,7 @@ C/O Supercomputing Research Ctr., 17100 Science Dr., Bowie MD 20715 */ -static char *version = "3c509.c:pl15i 2/23/94 becker@super.org\n"; +static char *version = "3c509.c:pl15k 3/5/94 becker@super.org\n"; #include <linux/config.h> #include <linux/kernel.h> @@ -190,7 +190,7 @@ int el3_probe(struct device *dev) { char *if_names[] = {"10baseT", "AUI", "undefined", "BNC"}; - printk("%s: 3c509 at %#3.3x tag %d, %s port, address ", + printk("%s: 3c509 at %#3.3x tag %d, %s port, address ", dev->name, dev->base_addr, current_tag, if_names[dev->if_port]); } @@ -477,10 +477,12 @@ el3_interrupt(int reg_ptr) if (++i > 10) { printk("%s: Infinite loop in interrupt, status %4.4x.\n", dev->name, status); + /* Clear all interrupts we have handled. */ + outw(0x68FF, ioaddr + EL3_CMD); break; } - /* Clear the other interrupts we have handled. */ - outw(0x6899, ioaddr + EL3_CMD); /* Ack IRQ */ + /* Acknowledge the IRQ. */ + outw(0x6891, ioaddr + EL3_CMD); /* Ack IRQ */ } if (el3_debug > 4) { diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c index 4eecd8b..72a8e0c 100644 --- a/drivers/scsi/scsi.c +++ b/drivers/scsi/scsi.c @@ -127,10 +127,12 @@ static unsigned char generic_sense[6] = {REQUEST_SENSE, 0,0,0, 255, 0}; static struct blist blacklist[] = { {"DENON","DRD-25X","V"}, /* A cdrom that locks up when probed at lun != 0 */ - {"MAXTOR","XT-3280","PR02"}, /* Locks-up when LUN>0 polled. */ - {"MAXTOR","XT-4380S","B3C"}, /* Locks-up when LUN>0 polled. */ + {"IMS", "CDD521/10","2.06"}, /* Locks-up when LUN>0 polled. */ + {"MAXTOR","XT-3280","PR02"}, /* Locks-up when LUN>0 polled. */ + {"MAXTOR","XT-4380S","B3C"}, /* Locks-up when LUN>0 polled. */ {"MAXTOR","MXT-1240S","I1.2"}, /* Locks up when LUN > 0 polled */ - {"MAXTOR","XT-4170S","B5A"}, /* Locks-up sometimes when LUN>0 polled. */ + {"MAXTOR","XT-4170S","B5A"}, /* Locks-up sometimes when LUN>0 polled. */ + {"MAXTOR","XT-8760S","B7B"}, /* guess what? */ {"NEC","CD-ROM DRIVE:841","1.0"}, /* Locks-up when LUN>0 polled. */ {"RODIME","RO3000S","2.33"}, /* Locks up if polled for lun != 0 */ {"SEAGATE", "ST157N", "\004|j"}, /* causes failed REQUEST SENSE on lun 1 for aha152x diff --git a/fs/buffer.c b/fs/buffer.c index 1f63919..923343f 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -748,16 +748,14 @@ static unsigned long try_to_load_aligned(unsigned long address, bh = create_buffers(address, size); if (!bh) return 0; + /* do any of the buffers already exist? punt if so.. */ p = b; for (offset = 0 ; offset < PAGE_SIZE ; offset += size) { block = *(p++); if (!block) goto not_aligned; - tmp = get_hash_table(dev, block, size); - if (tmp) { - brelse(tmp); + if (find_buffer(dev, block, size)) goto not_aligned; - } } tmp = bh; p = b; diff --git a/fs/ext2/CHANGES b/fs/ext2/CHANGES index 08b7b64..433655e 100644 --- a/fs/ext2/CHANGES +++ b/fs/ext2/CHANGES @@ -1,3 +1,14 @@ +Changes from version 0.4b to version 0.5 +======================================== + - New superblock fields: s_lastcheck and s_checkinterval added + by Uwe Ohse <uwe@tirka.gun.de> to implement timedependent checks + of the file system + - Real random numbers for secure rm added by Pierre del Perugia + <delperug@gla.ecoledoc.ibp.fr> + - The mount warnings related to the state of a fs are not printed + if the fs is mounted read-only, idea by Nick Holloway + <alfie@dcs.warwick.ac.uk> + Changes from version 0.4a to version 0.4b ========================================= - Copyrights changed to include the name of my laboratory. diff --git a/fs/ext2/super.c b/fs/ext2/super.c index 82a9a97..1ceaf34 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c @@ -267,21 +267,21 @@ static int parse_options (char * options, unsigned long * sb_block, static void ext2_setup_super (struct super_block * sb, struct ext2_super_block * es) { - if (!(sb->u.ext2_sb.s_mount_state & EXT2_VALID_FS)) - printk ("EXT2-fs warning: mounting unchecked fs, " - "running e2fsck is recommended\n"); - else if ((sb->u.ext2_sb.s_mount_state & EXT2_ERROR_FS)) - printk ("EXT2-fs warning: mounting fs with errors, " - "running e2fsck is recommended\n"); - else if (es->s_max_mnt_count >= 0 && - es->s_mnt_count >= (unsigned short) es->s_max_mnt_count) - printk ("EXT2-fs warning: maximal mount count reached, " - "running e2fsck is recommended\n"); - else if (es->s_checkinterval && - (es->s_lastcheck + es->s_checkinterval <= CURRENT_TIME)) - printk ("EXT2-fs warning: checktime reached, " - "running e2fsck is recommended\n"); if (!(sb->s_flags & MS_RDONLY)) { + if (!(sb->u.ext2_sb.s_mount_state & EXT2_VALID_FS)) + printk ("EXT2-fs warning: mounting unchecked fs, " + "running e2fsck is recommended\n"); + else if ((sb->u.ext2_sb.s_mount_state & EXT2_ERROR_FS)) + printk ("EXT2-fs warning: mounting fs with errors, " + "running e2fsck is recommended\n"); + else if (es->s_max_mnt_count >= 0 && + es->s_mnt_count >= (unsigned short) es->s_max_mnt_count) + printk ("EXT2-fs warning: maximal mount count reached, " + "running e2fsck is recommended\n"); + else if (es->s_checkinterval && + (es->s_lastcheck + es->s_checkinterval <= CURRENT_TIME)) + printk ("EXT2-fs warning: checktime reached, " + "running e2fsck is recommended\n"); es->s_state &= ~EXT2_VALID_FS; if (!es->s_max_mnt_count) es->s_max_mnt_count = EXT2_DFL_MAX_MNT_COUNT; diff --git a/fs/proc/link.c b/fs/proc/link.c index 2da00b0..a9a15d6 100644 --- a/fs/proc/link.c +++ b/fs/proc/link.c @@ -111,6 +111,10 @@ static int proc_readlink(struct inode * inode, char * buffer, int buflen) unsigned int dev,ino; char buf[64]; + if (!S_ISLNK(inode->i_mode)) { + iput(inode); + return -EINVAL; + } i = proc_follow_link(NULL, inode, 0, 0, &inode); if (i) return i; diff --git a/include/linux/ext2_fs.h b/include/linux/ext2_fs.h index e6613e9..b73aa4f 100644 --- a/include/linux/ext2_fs.h +++ b/include/linux/ext2_fs.h @@ -52,8 +52,8 @@ /* * The second extended file system version */ -#define EXT2FS_DATE "94/01/08" -#define EXT2FS_VERSION "0.4b" +#define EXT2FS_DATE "94/03/10" +#define EXT2FS_VERSION "0.5" /* * Debug code diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 03af7d5..2a7d91f 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h @@ -24,17 +24,17 @@ enum { extern inline void mark_bh(int nr) { - __asm__ __volatile__("btsl %1,%0":"=m" (bh_active):"ir" (nr)); + __asm__ __volatile__("orl %1,%0":"=m" (bh_active):"ir" (1<<nr)); } extern inline void disable_bh(int nr) { - __asm__ __volatile__("btcl %1,%0":"=m" (bh_mask):"ir" (nr)); + __asm__ __volatile__("andl %1,%0":"=m" (bh_mask):"ir" (~(1<<nr))); } extern inline void enable_bh(int nr) { - __asm__ __volatile__("btsl %1,%0":"=m" (bh_mask):"ir" (nr)); + __asm__ __volatile__("orl %1,%0":"=m" (bh_mask):"ir" (1<<nr)); } #endif diff --git a/kernel/traps.c b/kernel/traps.c index 1303a25..707db91 100644 --- a/kernel/traps.c +++ b/kernel/traps.c @@ -101,12 +101,12 @@ asmlinkage void alignment_check(void); printk("ds: %04x es: %04x fs: %04x gs: %04x ss: %04x\n", regs->ds, regs->es, regs->fs, regs->gs, ss); store_TR(i); - printk("Pid: %d, process nr: %d (%s)\nCode: ", current->pid, 0xffff & i, current->comm); - for(i=0;i<20;i++) - printk("%02x ",0xff & get_seg_byte(regs->cs,(i+(char *)regs->eip))); - printk("\nStack: "); + printk("Pid: %d, process nr: %d (%s)\nStack: ", current->pid, 0xffff & i, current->comm); for(i=0;i<5;i++) printk("%08lx ", get_seg_long(ss,(i+(unsigned long *)esp))); + printk("\nCode: "); + for(i=0;i<20;i++) + printk("%02x ",0xff & get_seg_byte(regs->cs,(i+(char *)regs->eip))); printk("\n"); do_exit(SIGSEGV); } diff --git a/mm/kmalloc.c b/mm/kmalloc.c index e75fa20..e7a37b9 100644 --- a/mm/kmalloc.c +++ b/mm/kmalloc.c @@ -151,8 +151,14 @@ void * kmalloc (size_t size, int priority) int order,tries,i,sz; struct block_header *p; struct page_descriptor *page; + extern unsigned long intr_count; /* Sanity check... */ + if (intr_count && priority != GFP_ATOMIC) { + printk("kmalloc called nonatomically from interrupt %08lx\n", + ((unsigned long *)&size)[-1]); + priority = GFP_ATOMIC; + } if (size > MAX_KMALLOC_K * 1024) { printk ("kmalloc: I refuse to allocate %d bytes (for now max = %d).\n", @@ -585,6 +585,7 @@ last_free_pages[index = (index + 1) & (NR_LAST_FREE_PAGES - 1)] = result; \ */ unsigned long __get_free_page(int priority) { + extern unsigned long intr_count; unsigned long result, flag; static unsigned long index = 0; @@ -593,6 +594,11 @@ unsigned long __get_free_page(int priority) sections of code have interrupts disabled. -RAB Is this code reentrant? */ + if (intr_count && priority != GFP_ATOMIC) { + printk("gfp called nonatomically from interrupt %08lx\n", + ((unsigned long *)&priority)[-1]); + priority = GFP_ATOMIC; + } save_flags(flag); repeat: REMOVE_FROM_MEM_QUEUE(free_page_list,nr_free_pages); diff --git a/net/inet/ip.c b/net/inet/ip.c index 944d1ed..f7f085d 100644 --- a/net/inet/ip.c +++ b/net/inet/ip.c @@ -1041,7 +1041,7 @@ static struct sk_buff *ip_defrag(struct iphdr *iph, struct sk_buff *skb, struct len, len + hlen)); /* Allocate buffer. */ - if ((skb2 = alloc_skb(sizeof(struct sk_buff) + len + hlen,GFP_KERNEL)) == NULL) + if ((skb2 = alloc_skb(sizeof(struct sk_buff) + len + hlen,GFP_ATOMIC)) == NULL) { printk("IP: frag: no memory for new fragment!\n"); return; diff --git a/net/inet/skbuff.c b/net/inet/skbuff.c index 7de68d9..9409240 100644 --- a/net/inet/skbuff.c +++ b/net/inet/skbuff.c @@ -425,7 +425,15 @@ void kfree_skb(struct sk_buff *skb, int rw) struct sk_buff *alloc_skb(unsigned int size,int priority) { - struct sk_buff *skb=(struct sk_buff *)kmalloc(size,priority); + struct sk_buff *skb; + extern unsigned long intr_count; + + if (intr_count && priority != GFP_ATOMIC) { + printk("alloc_skb called nonatomically from interrupt %08lx\n", + ((unsigned long *)&size)[-1]); + priority = GFP_ATOMIC; + } + skb=(struct sk_buff *)kmalloc(size,priority); if(skb==NULL) return NULL; skb->free= 2; /* Invalid so we pick up forgetful users */ diff --git a/net/inet/sock.c b/net/inet/sock.c index 356e607..d87d0c2 100644 --- a/net/inet/sock.c +++ b/net/inet/sock.c @@ -982,9 +982,13 @@ inet_release(struct socket *sock, struct socket *peer) while(sk->state != TCP_CLOSE && current->timeout>0) { interruptible_sleep_on(sk->sleep); if (current->signal & ~current->blocked) { + break; +#if 0 + /* not working now - closes can't be restarted */ sti(); current->timeout=0; return(-ERESTARTSYS); +#endif } } current->timeout=0; @@ -1855,7 +1859,7 @@ void inet_proto_init(struct ddi_proto *pro) struct inet_protocol *p; int i; - printk("Swansea University Computer Society Net2Debugged [1.27]\n"); + printk("Swansea University Computer Society Net2Debugged [1.30]\n"); /* Set up our UNIX VFS major device. */ if (register_chrdev(AF_INET_MAJOR, "af_inet", &inet_fops) < 0) { printk("%s: cannot register major device %d!\n", diff --git a/net/inet/tcp.c b/net/inet/tcp.c index b29f444..fbd2e06 100644 --- a/net/inet/tcp.c +++ b/net/inet/tcp.c @@ -3602,99 +3602,25 @@ tcp_write_wakeup(struct sock *sk) sk->prot->queue_xmit(sk, dev, buff, 1); } -/* - * This routine probes a zero window. It makes a copy of the first - * packet in the write queue, but with just one byte of data. - */ void tcp_send_probe0(struct sock *sk) { - unsigned char *raw; - struct iphdr *iph; - struct sk_buff *skb2, *skb; - int len, hlen, data; - struct tcphdr *t1; - struct device *dev; - - if (sk->zapped) - return; /* Afer a valid reset we can send no more */ + if (sk->zapped) + return; /* Afer a valid reset we can send no more */ - if (sk -> state != TCP_ESTABLISHED && sk->state != TCP_CLOSE_WAIT && - sk -> state != TCP_FIN_WAIT1 && sk->state != TCP_FIN_WAIT2) - return; + tcp_write_wakeup(sk); - skb = sk->wfront; - if (skb == NULL) - return; - - dev = skb->dev; - /* I know this can't happen but as it does.. */ - if(dev==NULL) - { - printk("tcp_send_probe0: NULL device bug!\n"); - return; - } - IS_SKB(skb); - - raw = skb->data; - iph = (struct iphdr *) (raw + dev->hard_header_len); - - hlen = (iph->ihl * sizeof(unsigned long)) + dev->hard_header_len; - data = skb->len - hlen - sizeof(struct tcphdr); - len = hlen + sizeof(struct tcphdr) + (data ? 1 : 0); - - /* Allocate buffer. */ - if ((skb2 = alloc_skb(sizeof(struct sk_buff) + len, GFP_ATOMIC)) == NULL) { -/* printk("alloc failed raw %x th %x hlen %d data %d len %d\n", - raw, skb->h.th, hlen, data, len); */ - reset_timer (sk, TIME_PROBE0, 10); /* try again real soon */ - return; - } - - skb2->arp = skb->arp; - skb2->len = len; - skb2->h.raw = (char *)(skb2->data); - - sk->wmem_alloc += skb2->mem_len; - - /* Copy the packet header into the new buffer. */ - memcpy(skb2->h.raw, raw, len); - - skb2->h.raw += hlen; /* it's now h.th -- pointer to the tcp header */ - t1 = skb2->h.th; - -/* source, dest, seq, from existing packet */ - t1->ack_seq = ntohl(sk->acked_seq); - t1->res1 = 0; -/* doff, fin, from existing packet. Fin is safe because Linux always - * sends fin in a separate packet - * syn, rst, had better be zero in original */ - t1->ack = 1; - t1->res2 = 0; - t1->window = ntohs(tcp_select_window(sk)/*sk->prot->rspace(sk)*/); - tcp_send_check(t1, sk->saddr, sk->daddr, len - hlen, sk); - /* Send it and free it. - * This will prevent the timer from automatically being restarted. - */ - sk->prot->queue_xmit(sk, dev, skb2, 1); - sk->backoff++; - /* - * in the case of retransmissions, there's good reason to limit - * rto to 120 sec, as that's the maximum legal RTT on the Internet. - * For probes it could reasonably be longer. However making it - * much longer could cause unacceptable delays in some situation, - * so we might as well use the same value - */ - sk->rto = min(sk->rto << 1, 120*HZ); - reset_timer (sk, TIME_PROBE0, sk->rto); - sk->retransmits++; - sk->prot->retransmits ++; + sk->backoff++; + sk->rto = min(sk->rto << 1, 120*HZ); + reset_timer (sk, TIME_PROBE0, sk->rto); + sk->retransmits++; + sk->prot->retransmits ++; } + /* * Socket option code for TCP. - */ - + */ int tcp_setsockopt(struct sock *sk, int level, int optname, char *optval, int optlen) { int val,err; diff --git a/zBoot/Makefile b/zBoot/Makefile index ff34719..df21530 100644 --- a/zBoot/Makefile +++ b/zBoot/Makefile @@ -18,7 +18,7 @@ CFLAGS = -O2 -DSTDC_HEADERS $(TEST) all: zSystem zSystem: piggy.o $(zOBJECTS) - $(LD) $(LDFLAGS) -o zSystem -T 1000 $(zOBJECTS) piggy.o + $(LD) $(LDFLAGS) -o zSystem -Ttext 1000 $(zOBJECTS) piggy.o head.o: head.s |