This is the first release of my quota package for Linux. The provided
patches are against the 0.95c+ release. I don't yet have 0.96 but it
can probably be used too, but the diffs will most likely fail.

The implementation should be rather similar to the BSD-quota mechanism. 
The user-interface is at least the same. Internaly the structure is totaly
different. My quotas file is really small, the used disk-structure has a
user-id field. Therefore you can just add any users you like to the quotas
file. The ones not in the quota file have no quota and thus no rigth on
disk-space.

There is never quota for the super-user.

The quota-file is updated whenever a sync is performed. There is a define
settable to define how many sync's should be skipped before updating the
quota file. It is not really useful to update the file every thirty
seconds. The file is only updated if there are changes and only the changed
fields are updated.

There is a define that sets all uid below that define have no quota. I
have set this at 10, so all users with uid < 10 AND not in quotas file have
no quota.

Systemcalls
-----------
The package provides the same systemcalls as are described in my
BSD-programmers manual, for the gould UTX-32. That are:

quota(int cmd, char *special, uid_t uid, char *addr);
Command can be any of: Q_QUOATON, Q_QUOTAOFF, Q_GETQUOTA, Q_SETQUOTA,
Q_SETQLIM and Q_SYNC.

setquota (char *special, char *filename);
where special is the pathname, NOT the devicename /dev/....


I have provided some very simple programs as an interface to the quota-
mechanism. They just install a small quota-test system:
initquota - create a quotas file. Edit initquota.c to adjust uid and limits.
readq - read quotas file and display info
setquota - change or install new quota for user. Quota should already be
           set on this file-system.
quota - display quota info as is resident in memory.
quotacheck - checks quotas for quota exceeds and displays them.
quotaon - install quota on give device (Again with pathname instead of device)


BUGS
----
- The quota mechanism collects all blocks, also the indirect and double 
indirect blocks. Don't know if this is correct behaviour.

- There can't be more than 28 users having quota on each file-system. This can
be solved, but I came across the 1024 block-size-limit. I have defined 
max quota-users to 20. Should be enough on a single user system :-)

- Since I have added an errno (EDQUOT), most programs give an `unknown error'
as a result of a quota-failure. You should recompile all your programs to fix
this (and adjust strerror()). Not really a nice idea...

- Quotas should be set on before any changes are made on the file-system, so
actually even before an fsck or rm is done in the rc (.local) scripts.
I use the pathname where is should actually be the devicename (I think).

- Umounting of file-systems with quota fails. I think I somehow mutate the
inode info if the quoats file is updated. Works if quota is set but nothing
has been changed. Need to take a closer look.

- Q_QUOTAOFF doesn't work correct. It just sets a flag, it doesn't remove the
quota info from memory, which it should be doing. Quotachecks are skipped
though, so it works that far.

I have this package running for over a week now, without any problem and I
think it is pretty solid. But it is still the first release, so any comments/
suggestions are welcome.

Edvard
--
Edvard Tuinder                                           v892231@si.hhs.nl

