add directory Linux-0.98

This commit is contained in:
gohigh
2024-02-19 00:21:16 -05:00
parent 265896c4ae
commit 56596ada90
13765 changed files with 3471432 additions and 0 deletions

Binary file not shown.

View File

@@ -0,0 +1,248 @@
These are the release notes for the NFS filesystem for Linux.
* Current Version
- NFS version 0.3a for Linux 0.98 patchlevel 6
* Status
- BETA, use with caution
* Limitations
- no read/write caching, minimal lookup/attribute caching, can't run binaries
* Copyright
- Rick Sladkey <jrs@world.std.com>
* Distrubution
- GNU copyleft as outlined in the GNU Public License version 2
* Where Available
- anonymous ftp from tsx-11.mit.edu:/pub/linux/ALPHA/NFS/nfs-client-0.3a.tar.Z
* References
- "NFS: Network File System Protocol specification," RFC 1094
- "RPC: Remote Procedure Call Protocol specification version 2," RFC 1057
- "XDR: External Data Representation standard," RFC 1014
- "User Datagram Protocol," RFC 768
- "Managing NFS and NIS," Hal Stern, O'Reilly, ISBN 0-937175-75-7
* How to Install
- please read this entire document before performing any installation
- ensure that TCP/IP is in your kernel and your network is set up and works
- unpack the main distribution somewhere
- unpack linux.tar in /usr/src, no existing kernel files will be overwritten
- patch the kernel from /usr/src using nfs.diffs, e.g. "patch -p0 <nfs.diffs"
- carefully note and manually install any failed patches or stop now
- run make dep in the kernel source directory
- rebuild the new kernel remembering to save your old one
- unpack mount.tar and shutdown.tar somewhere
- backup or save your old "mount", "umount" and "shutdown" commands
- install the new "mount", "umount" and "shutdown" commands
- recompile and install the "ps" suite of programs
- if your fstab mounts /proc then change the device from /dev/ram to none
- install and reboot the new kernel
* How to Use
- locate an NFS server and a directory that you can mount
- ensure that your server's sysadmin has exported the filesystem to you
- ensure that your uids and gids match those used by the server
- ensure that you have created the mount point for the directory
- issue the command "/etc/mount server-name:/server-dir /local-dir"
- cd into the new filesystem and test it
- optionally add one or more entries to your /etc/fstab with a type of "nfs"
* Special Notes
- modified mount command
I have included a modified mount command based on Doug Quale's
fstab-based mount package for Linux. This section describes the new
mount command and why I had to modify it.
The mount program plays a crucial role in the NFS filesystem. Unlike
many other filesystems, mount "knows about" NFS and performs actions
specific to the nfs type. Things such as looking up the IP addresses
of hostnames or contacting portmappers and mount daemons are done by
the mount program on behalf of the kernel. Then the mount program
passes a special data structure to the kernel through the mount system
call.
New options specific to the nfs type of filesystem:
option (default) meaning
-------------------------------------------------------------
noac (off) no attribute caching
rsize=n (1024) read buffer size
wsize=n (1024) write buffer size
hard (on) retry operations indefinitely
soft (off) return I/O error after a major timeout
timeo=n (7) timeout before retransmission in tenths of a second
retrans=n (3) number of minor timeouts before a major timeout
acregmin=n (3) minimum seconds to cache attributes of regular files
acregmax=n (30) maximum seconds to cache attributes of regular files
acdirmin=n (30) minimum seconds to cache attributes of directories
acdirmax=n (60) maximum seconds to cache attributes of directories
actimeo=n sets all attribute caching timeouts at once
port=n (2049) which port to find the nfs service on
Other options which are parsed but not yet implemented:
option (default) meaning
-------------------------------------------------------------
nocto off supress fresh attribute on file creation
posix off request posix semantics on the mounted filesystem
intr off allow signals to interrupt a pending transaction
bg off retry the mount in the background
fg on try the remote mount only in the foreground
For example to mount a filesystem with a read and write buffer sizes
of 2048, use "mount -o rsize=2048,wsize=2048 server:/server-dir /local-dir".
- modified umount command
I also modified Doug's umount command. This sections describes why.
The traditional umount system call accepted the name of a block device
as its argument. For "virtual" filesystems that are not assosicated
with true hardware block devices, it is awkward to provide a suitable
argument to umount. For this reason, the mount system call now
accepts and understands mount points as well as block devices. Since
all filesystems must have a distinct mount point by definition, this
interface is better suited for systems supporting virtual filesystems.
The umount command must use this new system call interface to properly
unmount virtual filesystems.
- modified shutdown command
I have included the shutdown command from Peter Orbaek's admutils-1.4
package. It includes some changes I made for NFS. If you already
have installed admutils-1.4, you don't need this version.
This version of shutdown (and reboot and halt) attempts to call
"umount -a" to unmount all filesystems and then, if that fails, it
tries to unmount them itself using the umount principles described
above. In such a case it offers a few new features such as unmounting
filesystems in reverse order and not giving a message about failing to
unmount the root partition.
- backward compatibility of mount, umount and shutdown
I made some small concessions to purity to allow all the modified
commands to continue to work correctly with older kernels. Therefore,
these versions are suitable for general use by older kernels, as well
as newer kernels with or without TCP/IP and NFS.
- /etc/rc and fstab considerations
If you include nfs mounts in your fstab, then you should change your
/etc/rc to run "mount -vat nonfs" instead of "mount -va" because your
networking will not have been configured yet and any NFS mounts will
fail at that point. Then you can add "mount -vat nfs" to the end of
your rc.net file to mount any NFS filesystems after the network is up.
- increasing the maximum number of mounted filesystems
The standard Linux kernel allows 16 filesystems to be mounted.
With your ordinary filesystems and several NFS filesystems, you may
run up against this limit. The limit of 16 is coded as
NR_SUPER in /usr/src/linux/include/linux/limits.h. You may increase
this value as needed.
- retransmission timeout values
If you have a slow or busy server or your system is separated from your
server by a router or serveral bridges, you may get better performance
by increasing the default retransmission timeout value. The value of
7 equations to 0.7 seconds. You might try doubling it and see if it
improves performance. See the Stern book for a detailed explanation
on how the timeout mechanism works.
- nomenclature
It may seem redundant to use the phrase "NFS filesystem" since NFS
stands for "Network File System" but the name actually refers to an
NFS client as opposed to an NFS server. Thus, an unqualified
reference to NFS includes both aspects of the NFS protocol. In this
context, "NFS filesystem" refers to the implementation of an NFS
client within an operating system or to the local directory structure
of a remote filesystem.
* General NFS Usage Guidelines
- read-only filesystems
Your mount of a server's filesystem should match the ro/rw option with
that of the server. However, you may still mount it read-only even if
the server exports it read-write for extra safety during testing. If
you mount it read-write and the server exports it as read-only you
will receive EROFS (Read-only filesystem) errors from the server when
attempting to write to the filesystem.
- mapping of root privileges
It is quite likely that your server will not allow root on your system
to be mapped into root on the server. For this reason, you should
generally access NFS mounted filesystems using a uid that is valid on
that system. Even so, root will be allowed to access world-readable or
world-writable files and directories. Just be aware that being root
on an NFS client is sometimes the least privileged user you could
possibly be.
* Change Log
- Version 0.3 dated 92-11-09
Bug fixes:
Fixed a problem where current->timeout was not being reset to zero.
Fixed a minor memory leak in nfs_follow_link (reported and fixed
by Phil Packer <pep@wicked.demon.co.uk>).
New features:
NFS kernel diffs now incorporated into Linux kernel 0.98 patchlevel 4.
Shutdown diffs now incorporated into admutils-1.4.
Changed malloc functions to use new kmalloc interface.
- Version 0.2a dated 92-11-02
Bug fixes:
Fixed a "bug" where symlinks would crash SunOS (reported and fixed
by <jon@robots.ox.ac.uk>).
Fixed a minor memory leak and a fence-post bug in nfs_symlink.
- Version 0.2 dated 92-11-01
New features:
Timeout and retransmission are fully implemented (should fix any "hangs").
Preliminary lookup and attribute caching (better results with ls, pwd, etc.).
All mount options parsed and many implemented (rsize, timeo, etc.).
Bug fixes:
Now du reports block counts correctly (reported by Bob Green
<bob@inmos.co.uk>).
Fixed chmod on directories (reported by Ray Bellis <rpb@psy.oxford.ac.uk>).
Fixed hard links (reported by Ray Bellis <rpb@psy.oxford.ac.uk>).
Fixed mount points inside NFS filesystems (reported by Peter Chubb
<peterc@suite.sw.oz.au>).
- Version 0.1 dated 92-10-28
First released version. No timeout or retransmission. Only readir caching.

View File

@@ -0,0 +1,222 @@
This is a binary distribution of sunrpc-4.0 compiled for Linux.
It is the RPC (Remote Procedure Call) and XDR (eXternal Data Represenation)
library together with support programs. The original freely distributable
sunrpc was written by Sun Microsystems for BSD systems. I did not include
any secure_rpc stuff because I don't think it is very widely used and the
secure_rpc distribution didn't include the necessary DES encrpytion.
I did a fair amount of hacking to get it to work with Linux. Plus
I fixed a couple of ugly bugs.
The archive includes:
README this file
etc/rpc RPC services files
etc/portmap RPC portmapper daemon
etc/rpcinfo RPC status reporting program
usr/bin/rpcgen RPC protocol compiler
usr/bin/rstat RPC sample remote status program
usr/lib/librpclib.a RPC and XDR library
usr/include/rpc/* RPC library include files
usr/include/rpcsvc/* RPC protocol descriptions and header files
usr/man/man[1358]/* RPC man pages
The binaries were compiled with version 4.1 jump-table libraries.
They will not work with Linux TCP/IP 0.8.1 without the kernel patch at the
end of this file. I have sent it to Ross and he may include in the next
release. Even if you don't apply the patch you can still use the library
and header files for porting.
You must have a /usr/etc/inet/protocols file for some of the programs
to work. Here is one I cooked up:
$ cat /usr/etc/inet/protocols
# protocols - standard well defined IP protocols
ip 0
icmp 1
ggp 2
tcp 6
egp 8
pup 12
udp 17
idp 22
raw 255
Also make sure you have the following lines in /usr/etc/inet/services:
$ grep sunrpc /usr/etc/inet/services
sunrpc 111/tcp
sunrpc 111/udp
Here is how you use the portmapper. In your rc/rc.local/rc.net or whatever
put the following fragment after you configure TCP/IP:
if [ -f /etc/portmap ]
then
echo "Starting portmapper..."
/etc/portmap
fi
Then if you have TCP/IP in your kernel and have applied the patch you
can say:
$ /etc/rpcinfo -p
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
If you get "Connection refused" you probably haven't applied the patch.
If all is well you can go to another machine on the net and say:
$ /etc/rpcinfo -p your-hostname
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
This is not very useful unless you have some RPC services to provide.
I have not yet finished porting rstat_svc which is very BSD-kernel oriented.
When I do, you will be apply to run Sun's Performance Meter to display
information about your Linux machine.
I will be releasing my port of a mount daemon and nfs server daemon shortly.
You don't need to run the portmapper or apply the patch to use RPC services
on other machines. The only programs in this distribution that can do that
are rpcinfo and rstat.
Enjoy,
Rick Sladkey
jrs@world.std.com
Patch relative to TCP/IP version 0.8.1 follows:
*** sock.h~ Thu Sep 10 12:34:07 1992
--- sock.h Tue Sep 15 01:12:37 1992
***************
*** 41,47 ****
unsigned long inuse:1, dead:1, urginline:1,
intr:1, blog:1, done:1, reuse:1, keepopen:1, linger:1,
delay_acks:1, timeout:3, destroy:1, ack_timed:1, no_check:1,
! exp_growth:1;
int proc;
volatile struct sock *next;
volatile struct sock *pair;
--- 41,47 ----
unsigned long inuse:1, dead:1, urginline:1,
intr:1, blog:1, done:1, reuse:1, keepopen:1, linger:1,
delay_acks:1, timeout:3, destroy:1, ack_timed:1, no_check:1,
! exp_growth:1, user_bound:1;
int proc;
volatile struct sock *next;
volatile struct sock *pair;
*** sock.c~ Sat Sep 12 12:26:56 1992
--- sock.c Tue Sep 15 01:10:05 1992
***************
*** 729,735 ****
if (!suser())
{
free_s ((void *)sk, sizeof (*sk));
! return (-EPERM);
}
if (!protocol)
--- 729,735 ----
if (!suser())
{
free_s ((void *)sk, sizeof (*sk));
! return (-EACCES);
}
if (!protocol)
***************
*** 748,754 ****
if (!suser())
{
free_s ((void *)sk, sizeof (*sk));
! return (-EPERM);
}
if (!protocol)
--- 748,754 ----
if (!suser())
{
free_s ((void *)sk, sizeof (*sk));
! return (-EACCES);
}
if (!protocol)
***************
*** 800,805 ****
--- 800,806 ----
sk->state = TCP_CLOSE;
sk->dead = 0;
sk->ack_timed = 0;
+ sk->user_bound = 0;
/* this is how many unacked bytes we will accept for
this socket. */
***************
*** 936,942 ****
return (0);
}
/* check this error. */
! if (sk->state != TCP_CLOSE) return (-EIO);
verify_area (uaddr, addr_len);
memcpy_fromfs (&addr, uaddr, min (sizeof (addr), addr_len));
if (addr.sin_family && addr.sin_family != AF_INET)
--- 937,944 ----
return (0);
}
/* check this error. */
! if (sk->state != TCP_CLOSE) return (-EINVAL);
! if (sk->user_bound) return (-EINVAL);
verify_area (uaddr, addr_len);
memcpy_fromfs (&addr, uaddr, min (sizeof (addr), addr_len));
if (addr.sin_family && addr.sin_family != AF_INET)
***************
*** 957,963 ****
}
if (snum <= PROT_SOCK && !suser())
! return (-EPERM);
if (my_ip_addr(addr.sin_addr.s_addr) || addr.sin_addr.s_addr == 0)
sk->saddr = addr.sin_addr.s_addr;
--- 959,965 ----
}
if (snum <= PROT_SOCK && !suser())
! return (-EACCES);
if (my_ip_addr(addr.sin_addr.s_addr) || addr.sin_addr.s_addr == 0)
sk->saddr = addr.sin_addr.s_addr;
***************
*** 980,985 ****
--- 982,988 ----
sk->dummy_th.source = net16(sk->num);
sk->daddr = 0;
sk->dummy_th.dest = 0;
+ sk->user_bound = 1;
return (0);
}
***************
*** 1290,1296 ****
case IP_SET_DEV:
if (!suser())
! return (-EPERM);
return (ip_set_dev((struct ip_config *)arg));
#if 0
case IP_ADD_ROUTE:
--- 1293,1299 ----
case IP_SET_DEV:
if (!suser())
! return (-EACCES);
return (ip_set_dev((struct ip_config *)arg));
#if 0
case IP_ADD_ROUTE:

View File

@@ -0,0 +1,164 @@
README file for the ext file system
Release 0a9
04.11.92
Remy Card
(card@masi.ibp.fr)
This file documents the ext file system for Linux and the programs
needed to use this file system
The ext file system
===================
The ext file system is an extension of the minix file system to get rid
of its restrictions.
The ext file system allows :
- varying length file names from 1 to 255 characters,
- a maximum of 4 Giga blocks per file system, so the maximum size of
a file system is 4 Tera bytes,
- a maximum size of 16 Giga bytes per file,
- a free blocks/inodes management with a linked list so no more
disk space is "lost" for bitmaps.
Limitations of the ext file system
==================================
The ext file system is not yet finished and some modifications will
be made in the future. The current restrictions are :
- some functions in the code are not very well written,
- the ext file system is only able to manage 1024 bytes blocks. Some
people are working to allow the Linux buffer cache to manage bigger
blocks. When it is done, the ext file system will support bigger
blocks.
Status of the ext file system
=============================
Since release 0.96c, the ext file system has been integrated in Linux.
So, there is nothing to modify in the kernel to use this file system. However,
this file system is currently in alpha test and may contain some bugs.
How to use the ext file system
==============================
To use the ext file system, you have to get linux 0.96c or latter.
You also need two programs to create a file system and check that it is
consistent.
These two programs can be obtained by anonymous FTP on ftp-masi.ibp.fr
[132.227.64.26] in the file pub/linux/ALPHA/extfs/efsprogs9.tar.Z or on
tsx-11.mit.edu in the file pub/linux/ALPHA/extfs/efsprogs9.tar.Z. This
file contains the source and binary programs (compiled with GCC 2.2.2d and
linked static) for mkefs (make ext file system) and efsck (ext file system
check). You can also take the file efsprogs9.src.tar.Z which contains only the
source programs or the file efsprogs9.bin.tar.Z which contains only the binary
programs.
You also need to get the new mount and df command from the latest
rootimage. These two commands now use the Linux VFS layer and can be used
with any file system integrated in Linux.
Last, you must recompile every program using the readdir() function
with a version of GCC greater than 2.1 (I suggest using GCC 2.2.2d which is the
"official" C compiler for Linux). Some programs using readdir() are : the GNU
fileutils, tar, the shells (bash, tcsh, zsh), ...
Using an ext file system
========================
To create an ext file system, you must use the mkefs command. Its
syntax is :
mkefs [-c | -l filename] [-i bytes_per_inode] /dev/hdXX size_in_blocks
The arguments for mkefs are :
-c tests bad blocks on the file system,
-l file reads the list of bad blocks from the file,
-i bpi specifies the inode ratio.
To mount an ext file system, you must use the new mount command. The
syntax is : mount -t ext /dev/hdXX /dir
You can also add a line to the file /etc/fstab if you want the ext file
system to be mounted when the system is booted. The format of this line is :
/dev/hdXX /dir ext defaults
After mounting an ext file system, you can use it by the standard
Linux commands (ls, rm, cp, mv, ...).
You can unmount an ext file system by the command :
umount /dev/hdXX
You can check an ext file system by using the efsck command. Its syntax
is :
efsck [-larvsdtS] /dev/hdXX
The arguments for efsck are :
-l lists all the file names in the file system
-a automaically repairs the file system (use with caution)
-r interactively repairs the file system
-v verbose execution
-s lists the super block informations
-d prints debugging output (not very useful except for me
when I try to find bugs in efsck...)
-t tests for bad blocks on the file system
-S salvages the blocks/inodes free lists
Important warnings:
-------------------
1/ efsck comes with NO WARRANTY !! I have written it by using the
minix file system fsck program and it seems to work for me but it has not
been extensively tested. I do not know is fsck is able to repair every
kind of inconsistency. I suggest that you don't use the -a parameter.
2/ when efsck discovers problems in the free blocks/inodes linked lists,
it salvages the lists, i.e. rebuilds them. If efsck rebuilds the lists, there
may problems if the file system is mounted because a copy of the first free
block number and first free inode number is kept in memory for mounted file
systems. If the lists are salvaged, the first free block and first free inode
can change and be different from the ones kept in memory. efsck tries to keep
the same first free block/inode but it is not always possible. When one is
changed, it now prints a warning message.
Future work on the ext fs
=========================
I plan to modify the ext file system to add functionalities or
remove some of its limitations :
- be sure that the efsck program is good and fix its bugs if any,
- fix bugs reported by alpha-testers,
- use bigger blocks as soon as the buffer cache will be able to
manage them, and perhaps use different block sizes in the same
file system (like fragments in BSD).
The next release of the ext fs won't be compatible with the current
one, i.e. a current file system won't be managed by the new code. However,
the new ext fs will be able to coexist with the current one so transition
will be easy. Moreover, a program will be available to convert a current ext
fs to the new format.
How to report bugs
==================
If you encounters a strange behaviour of the ext file system or of
the mkefs and efsck programs, feel free to report them to me (card@masi.ibp.fr)
so that I can find the bugs and fix them. It is also a good idea to report them
to the KERNEL channel of the mailing list and I will send the fixes to this
list.
Credits
=======
The ext fs code originates in the Minix fs management written by Linus
Torvalds. Linus also gave some very good advices during the design of the
ext fs.
I'd like to thank all alpha testers who report bugs or success. These
reports help me to improve the ext fs.
Last but not least, my acknowledgements go to Wayne Davison who makes
a good work in mkefs, efsck and the future conversion program.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,656 @@
diff -c +recursive 0.98.4/linux/fs/stat.c linux/fs/stat.c
*** 0.98.4/linux/fs/stat.c Fri Nov 6 00:50:09 1992
--- linux/fs/stat.c Tue Nov 10 12:54:53 1992
***************
*** 15,21 ****
{
struct old_stat tmp;
! printk("Warning: using old stat() call. Recompile your binary.\n");
verify_area(statbuf,sizeof (*statbuf));
tmp.st_dev = inode->i_dev;
tmp.st_ino = inode->i_ino;
--- 15,22 ----
{
struct old_stat tmp;
! printk("Warning: %s using old stat() call. Recompile your binary.\n",
! current->comm);
verify_area(statbuf,sizeof (*statbuf));
tmp.st_dev = inode->i_dev;
tmp.st_ino = inode->i_ino;
diff -c +recursive 0.98.4/linux/include/linux/sched.h linux/include/linux/sched.h
*** 0.98.4/linux/include/linux/sched.h Sun Nov 8 22:20:54 1992
--- linux/include/linux/sched.h Tue Nov 10 22:00:09 1992
***************
*** 71,76 ****
--- 71,77 ----
#define TASK_UNINTERRUPTIBLE 2
#define TASK_ZOMBIE 3
#define TASK_STOPPED 4
+ #define TASK_SWAPPING 5
#ifndef NULL
#define NULL ((void *) 0)
***************
*** 270,276 ****
extern void sleep_on(struct wait_queue ** p);
extern void interruptible_sleep_on(struct wait_queue ** p);
extern void wake_up(struct wait_queue ** p);
! extern void wake_one_task(struct task_struct * p);
extern int send_sig(long sig,struct task_struct * p,int priv);
extern int in_group_p(gid_t grp);
--- 271,277 ----
extern void sleep_on(struct wait_queue ** p);
extern void interruptible_sleep_on(struct wait_queue ** p);
extern void wake_up(struct wait_queue ** p);
! extern void wake_up_interruptible(struct wait_queue ** p);
extern int send_sig(long sig,struct task_struct * p,int priv);
extern int in_group_p(gid_t grp);
diff -c +recursive 0.98.4/linux/kernel/blk_drv/ll_rw_blk.c linux/kernel/blk_drv/ll_rw_blk.c
*** 0.98.4/linux/kernel/blk_drv/ll_rw_blk.c Wed Nov 4 20:47:26 1992
--- linux/kernel/blk_drv/ll_rw_blk.c Tue Nov 10 21:54:23 1992
***************
*** 238,244 ****
req->waiting = current;
req->bh = NULL;
req->next = NULL;
! current->state = TASK_UNINTERRUPTIBLE;
add_request(major+blk_dev,req);
schedule();
}
--- 238,244 ----
req->waiting = current;
req->bh = NULL;
req->next = NULL;
! current->state = TASK_SWAPPING;
add_request(major+blk_dev,req);
schedule();
}
diff -c +recursive 0.98.4/linux/kernel/chr_drv/atixlmouse.c linux/kernel/chr_drv/atixlmouse.c
*** 0.98.4/linux/kernel/chr_drv/atixlmouse.c Sat Oct 17 13:47:35 1992
--- linux/kernel/chr_drv/atixlmouse.c Tue Nov 10 22:30:04 1992
***************
*** 73,79 ****
mouse.latch_buttons |= inb( ATIXL_MSE_DATA_PORT);
ATIXL_MSE_ENABLE_UPDATE();
mouse.ready = 1;
! wake_up(&mouse.wait);
}
static void release_mouse(struct inode * inode, struct file * file)
--- 73,79 ----
mouse.latch_buttons |= inb( ATIXL_MSE_DATA_PORT);
ATIXL_MSE_ENABLE_UPDATE();
mouse.ready = 1;
! wake_up_interruptible(&mouse.wait);
}
static void release_mouse(struct inode * inode, struct file * file)
diff -c +recursive 0.98.4/linux/kernel/chr_drv/busmouse.c linux/kernel/chr_drv/busmouse.c
*** 0.98.4/linux/kernel/chr_drv/busmouse.c Sat Oct 17 13:47:35 1992
--- linux/kernel/chr_drv/busmouse.c Tue Nov 10 22:30:04 1992
***************
*** 53,59 ****
mouse.dx += dx;
mouse.dy += dy;
mouse.ready = 1;
! wake_up(&mouse.wait);
MSE_INT_ON();
}
--- 53,59 ----
mouse.dx += dx;
mouse.dy += dy;
mouse.ready = 1;
! wake_up_interruptible(&mouse.wait);
MSE_INT_ON();
}
diff -c +recursive 0.98.4/linux/kernel/chr_drv/console.c linux/kernel/chr_drv/console.c
*** 0.98.4/linux/kernel/chr_drv/console.c Sat Sep 19 14:29:29 1992
--- linux/kernel/chr_drv/console.c Tue Nov 10 22:30:04 1992
***************
*** 905,911 ****
int c;
unsigned int currcons;
! wake_up(&tty->write_q.proc_list);
currcons = tty->line - 1;
if (currcons >= NR_CONSOLES) {
printk("con_write: illegal tty (%d)\n", currcons);
--- 905,911 ----
int c;
unsigned int currcons;
! wake_up_interruptible(&tty->write_q.proc_list);
currcons = tty->line - 1;
if (currcons >= NR_CONSOLES) {
printk("con_write: illegal tty (%d)\n", currcons);
diff -c +recursive 0.98.4/linux/kernel/chr_drv/keyboard.c linux/kernel/chr_drv/keyboard.c
*** 0.98.4/linux/kernel/chr_drv/keyboard.c Sun Nov 1 00:05:27 1992
--- linux/kernel/chr_drv/keyboard.c Tue Nov 10 22:30:05 1992
***************
*** 145,151 ****
struct tty_struct *tty = TTY_TABLE(0);
unsigned long new_head;
! wake_up(&keypress_wait);
if (!tty)
return;
qp = &tty->read_q;
--- 145,151 ----
struct tty_struct *tty = TTY_TABLE(0);
unsigned long new_head;
! wake_up_interruptible(&keypress_wait);
if (!tty)
return;
qp = &tty->read_q;
***************
*** 153,159 ****
qp->buf[qp->head]=ch;
if ((new_head=(qp->head+1)&(TTY_BUF_SIZE-1)) != qp->tail)
qp->head=new_head;
! wake_up(&qp->proc_list);
}
static void puts_queue(char *cp)
--- 153,159 ----
qp->buf[qp->head]=ch;
if ((new_head=(qp->head+1)&(TTY_BUF_SIZE-1)) != qp->tail)
qp->head=new_head;
! wake_up_interruptible(&qp->proc_list);
}
static void puts_queue(char *cp)
***************
*** 163,169 ****
unsigned long new_head;
char ch;
! wake_up(&keypress_wait);
if (!tty)
return;
qp = &tty->read_q;
--- 163,169 ----
unsigned long new_head;
char ch;
! wake_up_interruptible(&keypress_wait);
if (!tty)
return;
qp = &tty->read_q;
***************
*** 174,180 ****
!= qp->tail)
qp->head=new_head;
}
! wake_up(&qp->proc_list);
}
static void ctrl(int sc)
--- 174,180 ----
!= qp->tail)
qp->head=new_head;
}
! wake_up_interruptible(&qp->proc_list);
}
static void ctrl(int sc)
diff -c +recursive 0.98.4/linux/kernel/chr_drv/msbusmouse.c linux/kernel/chr_drv/msbusmouse.c
*** 0.98.4/linux/kernel/chr_drv/msbusmouse.c Sat Oct 17 13:47:36 1992
--- linux/kernel/chr_drv/msbusmouse.c Tue Nov 10 22:30:05 1992
***************
*** 60,66 ****
mouse.dx += dx;
mouse.dy += dy;
mouse.ready = 1;
! wake_up(&mouse.wait);
}
static void release_mouse(struct inode * inode, struct file * file)
--- 60,66 ----
mouse.dx += dx;
mouse.dy += dy;
mouse.ready = 1;
! wake_up_interruptible(&mouse.wait);
}
static void release_mouse(struct inode * inode, struct file * file)
diff -c +recursive 0.98.4/linux/kernel/chr_drv/psaux.c linux/kernel/chr_drv/psaux.c
*** 0.98.4/linux/kernel/chr_drv/psaux.c Sun Nov 1 22:57:35 1992
--- linux/kernel/chr_drv/psaux.c Tue Nov 10 22:30:05 1992
***************
*** 155,161 ****
}
queue->head = head;
aux_ready = 1;
! wake_up(&queue->proc_list);
}
--- 155,161 ----
}
queue->head = head;
aux_ready = 1;
! wake_up_interruptible(&queue->proc_list);
}
***************
*** 222,227 ****
--- 222,228 ----
static int read_aux(struct inode * inode, struct file * file, char * buffer, int count)
{
+ struct wait_queue wait = { current, NULL };
int i = count;
unsigned char c;
***************
*** 228,236 ****
if (queue_empty()) {
if (file->f_flags & O_NONBLOCK)
return -EAGAIN;
! cli();
! interruptible_sleep_on(&queue->proc_list);
! sti();
}
while (i > 0 && !queue_empty()) {
c = get_from_queue();
--- 229,243 ----
if (queue_empty()) {
if (file->f_flags & O_NONBLOCK)
return -EAGAIN;
! add_wait_queue(&queue->proc_list, &wait);
! repeat:
! current->state = TASK_INTERRUPTIBLE;
! if (queue_empty() && !(current->signal & ~current->blocked)) {
! schedule();
! goto repeat;
! }
! current->state = TASK_RUNNING;
!
}
while (i > 0 && !queue_empty()) {
c = get_from_queue();
diff -c +recursive 0.98.4/linux/kernel/chr_drv/pty.c linux/kernel/chr_drv/pty.c
*** 0.98.4/linux/kernel/chr_drv/pty.c Sun Oct 11 21:22:25 1992
--- linux/kernel/chr_drv/pty.c Tue Nov 10 22:30:05 1992
***************
*** 24,33 ****
{
if (!tty)
return;
! wake_up(&tty->read_q.proc_list);
if (!tty->link)
return;
! wake_up(&tty->link->write_q.proc_list);
if (IS_A_PTY_MASTER(tty->line)) {
if (tty->link->pgrp > 0)
kill_pg(tty->link->pgrp,SIGHUP,1);
--- 24,33 ----
{
if (!tty)
return;
! wake_up_interruptible(&tty->read_q.proc_list);
if (!tty->link)
return;
! wake_up_interruptible(&tty->link->write_q.proc_list);
if (IS_A_PTY_MASTER(tty->line)) {
if (tty->link->pgrp > 0)
kill_pg(tty->link->pgrp,SIGHUP,1);
***************
*** 51,57 ****
break;
}
TTY_READ_FLUSH(to);
! wake_up(&from->write_q.proc_list);
}
/*
--- 51,57 ----
break;
}
TTY_READ_FLUSH(to);
! wake_up_interruptible(&from->write_q.proc_list);
}
/*
***************
*** 71,77 ****
return -ENODEV;
tty->write = tty->link->write = pty_write;
tty->close = tty->link->close = pty_close;
! wake_up(&tty->read_q.proc_list);
if (filp->f_flags & O_NDELAY)
return 0;
while (!tty->link->count && !(current->signal & ~current->blocked))
--- 71,77 ----
return -ENODEV;
tty->write = tty->link->write = pty_write;
tty->close = tty->link->close = pty_close;
! wake_up_interruptible(&tty->read_q.proc_list);
if (filp->f_flags & O_NDELAY)
return 0;
while (!tty->link->count && !(current->signal & ~current->blocked))
diff -c +recursive 0.98.4/linux/kernel/chr_drv/serial.c linux/kernel/chr_drv/serial.c
*** 0.98.4/linux/kernel/chr_drv/serial.c Thu Oct 29 18:17:27 1992
--- linux/kernel/chr_drv/serial.c Tue Nov 10 22:30:05 1992
***************
*** 342,348 ****
TTY_READ_FLUSH(info->tty);
}
if (!clear_bit(RS_EVENT_WRITE_WAKEUP, &info->event)) {
! wake_up(&info->tty->write_q.proc_list);
}
if (!clear_bit(RS_EVENT_HUP_PGRP, &info->event)) {
if (info->tty->pgrp > 0)
--- 342,348 ----
TTY_READ_FLUSH(info->tty);
}
if (!clear_bit(RS_EVENT_WRITE_WAKEUP, &info->event)) {
! wake_up_interruptible(&info->tty->write_q.proc_list);
}
if (!clear_bit(RS_EVENT_HUP_PGRP, &info->event)) {
if (info->tty->pgrp > 0)
***************
*** 1051,1056 ****
--- 1051,1057 ----
if (irq_lines & (1 << i))
free_irq(i);
}
+ sti();
#endif
return kmem_start;
}
diff -c +recursive 0.98.4/linux/kernel/chr_drv/tty_io.c linux/kernel/chr_drv/tty_io.c
*** 0.98.4/linux/kernel/chr_drv/tty_io.c Thu Nov 5 20:24:39 1992
--- linux/kernel/chr_drv/tty_io.c Tue Nov 10 22:30:05 1992
***************
*** 253,261 ****
}
TTY_WRITE_FLUSH(tty);
if (!EMPTY(&tty->secondary))
! wake_up(&tty->secondary.proc_list);
if (tty->write_q.proc_list && LEFT(&tty->write_q) > TTY_BUF_SIZE/2)
! wake_up(&tty->write_q.proc_list);
if (tty->throttle && (LEFT(&tty->read_q) >= RQ_THRESHOLD_HW)
&& !clear_bit(TTY_RQ_THROTTLED, &tty->flags))
tty->throttle(tty, TTY_THROTTLE_RQ_AVAIL);
--- 253,261 ----
}
TTY_WRITE_FLUSH(tty);
if (!EMPTY(&tty->secondary))
! wake_up_interruptible(&tty->secondary.proc_list);
if (tty->write_q.proc_list && LEFT(&tty->write_q) > TTY_BUF_SIZE/2)
! wake_up_interruptible(&tty->write_q.proc_list);
if (tty->throttle && (LEFT(&tty->read_q) >= RQ_THRESHOLD_HW)
&& !clear_bit(TTY_RQ_THROTTLED, &tty->flags))
tty->throttle(tty, TTY_THROTTLE_RQ_AVAIL);
***************
*** 366,372 ****
if (c==10 && L_CANON(tty))
break;
};
! wake_up(&tty->read_q.proc_list);
/*
* If there is enough space in the secondary queue
* now, let the low-level driver know.
--- 366,372 ----
if (c==10 && L_CANON(tty))
break;
};
! wake_up_interruptible(&tty->read_q.proc_list);
/*
* If there is enough space in the secondary queue
* now, let the low-level driver know.
diff -c +recursive 0.98.4/linux/kernel/chr_drv/tty_ioctl.c linux/kernel/chr_drv/tty_ioctl.c
*** 0.98.4/linux/kernel/chr_drv/tty_ioctl.c Tue Oct 27 00:37:38 1992
--- linux/kernel/chr_drv/tty_ioctl.c Tue Nov 10 22:30:05 1992
***************
*** 26,32 ****
cli();
queue->head = queue->tail;
sti();
! wake_up(&queue->proc_list);
}
}
--- 26,32 ----
cli();
queue->head = queue->tail;
sti();
! wake_up_interruptible(&queue->proc_list);
}
}
***************
*** 35,47 ****
tty->status_changed = 1;
tty->ctrl_status |= TIOCPKT_FLUSHREAD;
flush(&tty->read_q);
! wake_up(&tty->read_q.proc_list);
flush(&tty->secondary);
tty->secondary.data = 0;
if (tty = tty->link) {
flush(&tty->write_q);
! wake_up(&tty->write_q.proc_list);
}
}
--- 35,47 ----
tty->status_changed = 1;
tty->ctrl_status |= TIOCPKT_FLUSHREAD;
flush(&tty->read_q);
! wake_up_interruptible(&tty->read_q.proc_list);
flush(&tty->secondary);
tty->secondary.data = 0;
if (tty = tty->link) {
flush(&tty->write_q);
! wake_up_interruptible(&tty->write_q.proc_list);
}
}
***************
*** 50,59 ****
tty->status_changed = 1;
tty->ctrl_status |= TIOCPKT_FLUSHWRITE;
flush(&tty->write_q);
! wake_up(&tty->write_q.proc_list);
if (tty = tty->link) {
flush(&tty->read_q);
! wake_up(&tty->read_q.proc_list);
flush(&tty->secondary);
tty->secondary.data = 0;
}
--- 50,59 ----
tty->status_changed = 1;
tty->ctrl_status |= TIOCPKT_FLUSHWRITE;
flush(&tty->write_q);
! wake_up_interruptible(&tty->write_q.proc_list);
if (tty = tty->link) {
flush(&tty->read_q);
! wake_up_interruptible(&tty->read_q.proc_list);
flush(&tty->secondary);
tty->secondary.data = 0;
}
diff -c +recursive 0.98.4/linux/kernel/printk.c linux/kernel/printk.c
*** 0.98.4/linux/kernel/printk.c Sat Aug 15 18:36:16 1992
--- linux/kernel/printk.c Tue Nov 10 22:32:43 1992
***************
*** 35,41 ****
i = log_page;
log_page = 0;
free_page(i);
! wake_up(&log_wait);
return 0;
case 1:
i = get_free_page(GFP_KERNEL);
--- 35,41 ----
i = log_page;
log_page = 0;
free_page(i);
! wake_up_interruptible(&log_wait);
return 0;
case 1:
i = get_free_page(GFP_KERNEL);
***************
*** 97,103 ****
log_start++;
}
if (log_page)
! wake_up(&log_wait);
console_print(buf);
return i;
}
--- 97,103 ----
log_start++;
}
if (log_page)
! wake_up_interruptible(&log_wait);
console_print(buf);
return i;
}
diff -c +recursive 0.98.4/linux/kernel/sched.c linux/kernel/sched.c
*** 0.98.4/linux/kernel/sched.c Sat Nov 7 12:07:41 1992
--- linux/kernel/sched.c Tue Nov 10 21:59:34 1992
***************
*** 103,119 ****
/* check alarm, wake up any interruptible tasks that have got a signal */
need_resched = 0;
! for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)
! if (*p) {
! if ((*p)->timeout && (*p)->timeout < jiffies)
! if ((*p)->state == TASK_INTERRUPTIBLE) {
! (*p)->timeout = 0;
! wake_one_task(*p);
! }
! if (((*p)->signal & ~(*p)->blocked) &&
! (*p)->state==TASK_INTERRUPTIBLE)
! wake_one_task(*p);
! }
/* this is the scheduler proper: */
--- 103,117 ----
/* check alarm, wake up any interruptible tasks that have got a signal */
need_resched = 0;
! for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) {
! if (!*p || ((*p)->state != TASK_INTERRUPTIBLE))
! continue;
! if ((*p)->timeout && (*p)->timeout < jiffies) {
! (*p)->timeout = 0;
! (*p)->state = TASK_RUNNING;
! } else if ((*p)->signal & ~(*p)->blocked)
! (*p)->state = TASK_RUNNING;
! }
/* this is the scheduler proper: */
***************
*** 155,167 ****
return -EINTR;
}
- void wake_one_task(struct task_struct * p)
- {
- p->state = TASK_RUNNING;
- if (p->counter > current->counter)
- need_resched = 1;
- }
-
/*
* wake_up doesn't wake up stopped processes - they have to be awakened
* with signals or similar.
--- 153,158 ----
***************
*** 179,187 ****
return;
do {
if (p = tmp->task) {
! if (p->state == TASK_ZOMBIE)
! printk("wake_up: TASK_ZOMBIE\n");
! else if (p->state != TASK_STOPPED) {
p->state = TASK_RUNNING;
if (p->counter > current->counter)
need_resched = 1;
--- 170,203 ----
return;
do {
if (p = tmp->task) {
! if ((p->state == TASK_UNINTERRUPTIBLE) ||
! (p->state == TASK_INTERRUPTIBLE)) {
! p->state = TASK_RUNNING;
! if (p->counter > current->counter)
! need_resched = 1;
! }
! }
! if (!tmp->next) {
! printk("wait_queue is bad (eip = %08x)\n",((unsigned long *) q)[-1]);
! printk(" q = %08x\n",q);
! printk(" *q = %08x\n",*q);
! printk(" tmp = %08x\n",tmp);
! break;
! }
! tmp = tmp->next;
! } while (tmp != *q);
! }
!
! void wake_up_interruptible(struct wait_queue **q)
! {
! struct wait_queue *tmp;
! struct task_struct * p;
!
! if (!q || !(tmp = *q))
! return;
! do {
! if (p = tmp->task) {
! if (p->state == TASK_INTERRUPTIBLE) {
p->state = TASK_RUNNING;
if (p->counter > current->counter)
need_resched = 1;
diff -c +recursive 0.98.4/linux/net/unix.c linux/net/unix.c
*** 0.98.4/linux/net/unix.c Sat Aug 22 16:34:40 1992
--- linux/net/unix.c Tue Nov 10 12:54:56 1992
***************
*** 329,335 ****
PRINTK("unix_proto_bind: socket 0x%x, len=%d\n", sock,
sockaddr_len);
if (sockaddr_len <= UN_PATH_OFFSET ||
! sockaddr_len >= sizeof(struct sockaddr_un)) {
PRINTK("unix_proto_bind: bad length %d\n", sockaddr_len);
return -EINVAL;
}
--- 329,335 ----
PRINTK("unix_proto_bind: socket 0x%x, len=%d\n", sock,
sockaddr_len);
if (sockaddr_len <= UN_PATH_OFFSET ||
! sockaddr_len > sizeof(struct sockaddr_un)) {
PRINTK("unix_proto_bind: bad length %d\n", sockaddr_len);
return -EINVAL;
}
***************
*** 381,387 ****
PRINTK("unix_proto_connect: socket 0x%x, servlen=%d\n", sock,
sockaddr_len);
if (sockaddr_len <= UN_PATH_OFFSET ||
! sockaddr_len >= sizeof(struct sockaddr_un)) {
PRINTK("unix_proto_connect: bad length %d\n", sockaddr_len);
return -EINVAL;
}
--- 381,387 ----
PRINTK("unix_proto_connect: socket 0x%x, servlen=%d\n", sock,
sockaddr_len);
if (sockaddr_len <= UN_PATH_OFFSET ||
! sockaddr_len > sizeof(struct sockaddr_un)) {
PRINTK("unix_proto_connect: bad length %d\n", sockaddr_len);
return -EINVAL;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.