add directory Linux-0.98
This commit is contained in:
BIN
Linux-0.98/sources/system/0.98.4-swap-patch
Normal file
BIN
Linux-0.98/sources/system/0.98.4-swap-patch
Normal file
Binary file not shown.
248
Linux-0.98/sources/system/NFS/nfs-client-0.3a.README
Normal file
248
Linux-0.98/sources/system/NFS/nfs-client-0.3a.README
Normal 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.
|
||||
|
||||
222
Linux-0.98/sources/system/NFS/rpc/sunrpc-bin-4.0.README
Normal file
222
Linux-0.98/sources/system/NFS/rpc/sunrpc-bin-4.0.README
Normal 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:
|
||||
164
Linux-0.98/sources/system/efs/efsprogs9.README
Normal file
164
Linux-0.98/sources/system/efs/efsprogs9.README
Normal 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.
|
||||
BIN
Linux-0.98/sources/system/linux-0.98.1.tar.gz
Normal file
BIN
Linux-0.98/sources/system/linux-0.98.1.tar.gz
Normal file
Binary file not shown.
BIN
Linux-0.98/sources/system/linux-0.98.2.tar.gz
Normal file
BIN
Linux-0.98/sources/system/linux-0.98.2.tar.gz
Normal file
Binary file not shown.
BIN
Linux-0.98/sources/system/linux-0.98.3.tar.gz
Normal file
BIN
Linux-0.98/sources/system/linux-0.98.3.tar.gz
Normal file
Binary file not shown.
656
Linux-0.98/sources/system/linux-0.98.4-swappatch
Normal file
656
Linux-0.98/sources/system/linux-0.98.4-swappatch
Normal 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;
|
||||
}
|
||||
BIN
Linux-0.98/sources/system/linux-0.98.4.tar.gz
Normal file
BIN
Linux-0.98/sources/system/linux-0.98.4.tar.gz
Normal file
Binary file not shown.
BIN
Linux-0.98/sources/system/linux-0.98.5.tar.gz
Normal file
BIN
Linux-0.98/sources/system/linux-0.98.5.tar.gz
Normal file
Binary file not shown.
BIN
Linux-0.98/sources/system/linux-0.98.6.tar.gz
Normal file
BIN
Linux-0.98/sources/system/linux-0.98.6.tar.gz
Normal file
Binary file not shown.
BIN
Linux-0.98/sources/system/linux-0.98.patch1.gz
Normal file
BIN
Linux-0.98/sources/system/linux-0.98.patch1.gz
Normal file
Binary file not shown.
BIN
Linux-0.98/sources/system/linux-0.98.patch2.gz
Normal file
BIN
Linux-0.98/sources/system/linux-0.98.patch2.gz
Normal file
Binary file not shown.
BIN
Linux-0.98/sources/system/linux-0.98.patch3.gz
Normal file
BIN
Linux-0.98/sources/system/linux-0.98.patch3.gz
Normal file
Binary file not shown.
BIN
Linux-0.98/sources/system/linux-0.98.patch4.gz
Normal file
BIN
Linux-0.98/sources/system/linux-0.98.patch4.gz
Normal file
Binary file not shown.
BIN
Linux-0.98/sources/system/linux-0.98.patch5.gz
Normal file
BIN
Linux-0.98/sources/system/linux-0.98.patch5.gz
Normal file
Binary file not shown.
BIN
Linux-0.98/sources/system/linux-0.98.patch6.gz
Normal file
BIN
Linux-0.98/sources/system/linux-0.98.patch6.gz
Normal file
Binary file not shown.
BIN
Linux-0.98/sources/system/linux-0.98.tar.gz
Normal file
BIN
Linux-0.98/sources/system/linux-0.98.tar.gz
Normal file
Binary file not shown.
BIN
Linux-0.98/sources/system/linux-0.98p2-scsi-patch
Normal file
BIN
Linux-0.98/sources/system/linux-0.98p2-scsi-patch
Normal file
Binary file not shown.
BIN
Linux-0.98/sources/system/mount-patch-for-pre-0.98.4
Normal file
BIN
Linux-0.98/sources/system/mount-patch-for-pre-0.98.4
Normal file
Binary file not shown.
BIN
Linux-0.98/sources/system/scsitape.taz
Normal file
BIN
Linux-0.98/sources/system/scsitape.taz
Normal file
Binary file not shown.
BIN
Linux-0.98/sources/system/tcpip-patch-3-nov-92
Normal file
BIN
Linux-0.98/sources/system/tcpip-patch-3-nov-92
Normal file
Binary file not shown.
Reference in New Issue
Block a user