
Changes in quota-package from 1.32 to 1.33

* Ported the stuff back to the normal kernel to make a difffile quite easy. 

* Fixed some typos that could trigger a kernel panic because the locking gets
  killed when a quota is exeeded.

* Fixed the stuff to work with the the new-tty-drivers.

* This patches aren't that well tested on the machines I use because I use a
  complete different kernel over here. But thats why this is called BETA
  software. The bigfiles in this package are copies of the files used in my
  kernel so some thing are tested more then others.

Changes in quota-package from 1.31 to 1.32

* Fixed diff-files, the are now made as unified diffs.

* Checked the specifications for the rquota service, I was correct we only need
  to respond to udp connections. 

Changes in quota-package from 1.3 to 1.31

* Changed quotacheck program to stuff directories it encounters on a 
  directory stack and check them later on. This way there is at any
  time one directory opened for reading. In the old situation it could
  happen that more then one directory were open at the same time and
  with nasty directory structures this could give to much open directories
  at ones, leading to an error by the O.S.

* Added some hooks for debugging the memory usage by the program, and make
  the stdout used for the -v flag non-buffered for more speed.

* Added variabele to mountstruct for flags, now we can mask when we are 
  opening or closeing a quotafile, when we are we may not give out
  pointers with the dq_get function, otherwise we run into problems
  later on.

* Ok updated fs/*.c missed patch to fs/inode.c that solves a race condition.

* Added vfs_rename function that takes care of renaming files on top of already
  existing files.  We were missing those ones, thanks to David Black for
  reporting this. If there are still problems I will hear so and try to fix them
  as soon as I can.

Changes in quota-package from 1.2 to 1.3

* We only reply to rpc_quota_request made to the udp port of the
  rquotad, I just removed support for the TCP service, I don't
  think it's needed to have the TCP service for just exchanging
  about 40 bytes of data. Too much overhead setting up a TCP connection.

* Changed vfs_write function within fileio.h to be a bit smarter. If
  the fileposition + number of bytes to be written is less then the
  current size of the file we should even bother checking it. And if
  the number of wanted_blocks equals to 0 why even bother checking
  the quota no changes are made anyway.

* Rewrote the quota stuff to be much more flexible, we now use pointers
  that are located within the inode for fast lookup. This is a bit more
  to setup but is much faster when used over and over again. Its based 
  on the setup used for inode caching and is mostly rewritten code with
  some extensions that were needed for the dquot structs. And of course
  a lot extra because dquot aren't exactly inodes.

* Ok file is called dquot.c again because it specific to diskquotas. If
  we ever get process quota, we have to move the system-call interface to
  the kernel dir.

* splitted fileio header into fileio.c and fileio.h. Fileio.c contains 
  the code for all the functions, fileio.h contains the prototypes for
  the functions when quota is enabled and defines to the the default 
  inode operations if it is disabled.

* Moved device management code to the file fs/super.c and made it a
  bit more general. The stuff now can also be used for other purposes.
  For now it contains the devicename, the directory the filesystem is
  mounted on, a pointer to the superblock and the quota expire times 
  and filepointers, this can be extended in the future and this can be 
  used for other purposes then only quota. Its in super.c because it
  is related to mounting a filesystem. The rootfilesystem is a special
  case for which I don't have a nice solution right now.

* Cleaned up the file file_table.c and renamed it to file.c, otherwise 
  we should call inode.c inode_table.c etc. More is static now, the
  file_table isn't accesable anymore from everywhere, and the functions
  that need the info within file.c should be located within that file.
  A good example is the function used by the vhangup code, it now calls
  a routine within file.c and so we don't have export any data anymore.

* changed decrement quota to reset the DQ_INODES and DQ_BLKS flag on
  a decrement of a quota. It seems that we should bark again when one
  goes over his quota after he removed something, ok should work this
  way.

* changed set_dqblk to set the grace period when a new usage is set
  and one exceeds his softlimit by that operation. Better then just
  setting the graceperiod when he allocates any more inodes or blocks.
  Only can give surprises when logging in but who cares they can ask
  the sysadmin to give them a hand with cleaning there dirs. 

* quotaoff is very simple now just reset all the pointers that point
  to a dquot and trash the cache for all dquots that are related to
  the device being turned of. This way the next time you put it on the
  stuff get read again from disk and not from the cache.

* changed most of the file structs to be a filepointer and request it
  with get_empty_filp. This way we allocate it from the file_table which
  is more the way it should be, Ok I know the dummy_inodes isn't that
  nice either, but for that we don't have an other choice. Also it makes
  live much easier this way. See the core dump stuff.

* used some more constants for setting up the file pointers, this should
  make it easier to read. So ok Edvard ?

* rewrote most functions such as quota_alloc, quota_remove and quota_transfer
  to use a for loop which counts from 0 to the number of quotas -1. This way
  it should be easy to extend the quota stuff to maintain even more types of
  quota. (At the moment I can think of one more, what about quotas for a
  processgroups) :-)

* rewrote quota_transfer, its still the most complicated function of the
  three manipulate functions, but it looks much cleaner then the one we
  had.

* changed the system-call interface again this should be the last time, 
  hope to have it made more intelligent now, most of the calls are quite
  the same, so just set flags and call one functions. Saves some functions.

* And more cleanups to the vfs-layer. Did a kind of indent on all the sources
  in the fs-dir by hand. All references to file pointers are now done by a
  variable that is called filp. This is done to be a bit more consistent all
  through the code. Before is was called file, filp, f etc.

* As of the indent I changed all tabs to be 3 spaces this makes it a bit
  larger but much better to read.

* Someone reported that there are problems with fstab when you use something
  like usrquota=/usr/adm/quota.user,grpquota=/usr/adm/quota.grp. I don't know
  if the problems is also in the new libs, if so I have a replacement here for
  the entire mntent stuff. I wrote this way back and it work ok so if you
  have problems mail me and I will send you the sources. For now I didn't
  include it yet in the standard mainline distribution.

* Ok added hooks to the fork code forgot that, ok this has cost me some
  searching. We must doe an vfs_open_filp when a process forks and the
  filepointers are copied or incremented.

Changes in quota-package from 1.1 to 1.2

* Changed repquota.c to display at max 8 chars of username.

* Changed rquota_svc.c and rquota_server.c to handle both version 1 
  and 2 requests. Now we should be able to communicate with sun systems.
  SUN systems send out version 1 request which we can handle now.

* Changed quota.c to first send out a version 2 rquota request and if
  that fails to try it with a version 1 request. Now we should be able to
  query a rquotad on a sun-server exporting a NFS disk.

* Changed kernel diffs, now use a header file fileio.h with vfs functions
  for writing, truncating, creating files/nodes. This cleaned up the
  kernel diffs quite a bit. (Should have done this way back, but it is
  done now)

* Fixed some small bugs with handling graceperiods again. Changed the code
  in the systemcall interface all bugs should be gone now there.

* Wrote a new program warnquota. No manpage yet but it has no flags so
  that's simple. You can run this from your crontab just like you run
  quotacheck every night from cron. This program mails a message to all
  users that violated the quota system.

* Changed fileio.h with unlinking and rmdir to make a copy of the inode.
  Hope this fixes some problems we have seen with xiafs. It isn't to bad
  either should have been this way from the beginning. A pointer to a
  inode that is removed is a bit to tricky a copy in local memory is much
  saver.

* Changed fs/quota.c to not check if the quotafile is on the same device
  as the device for which it contains info. Found that in a document but
  it's silly and so it's removed now. Who cares where you put it as long
  the kernel can find it and it is the right format.
  (Now something like usrquota="/var/adm/quota_src.user" should work :-))

* Changed edquota behaviour with -p flag. It now copies the current
  usage to the new situation.

Changes in quota-package from 1.0 to 1.1

* Moved check to test on quota on a certain filesystem to seperate file
  hasquota.c

* Changed hasquota.c to use quotafile given in fstab file instead
  of the default name of a quotafile. We now can define ourself where
  to put our quotafile. Something like "usrquota=/usr/adm/quotasrc.user"

* Changed graceperiod counting was doing it the wrong way around. Now we
  add the expiretime to the current time and that is the grace-period a user
  has before we see a softlimit as a hardlimit.

* Changed allocation when not enough blocks can be allocated from ones quota.
  Now you get as many blocks as you can affort yourself and not as in the 
  earlier version, nothing. This was a bit of a bitch to tackle but it seems
  to work ok now for regular files and core-files.

* Changed the quota.h file to include a prototype for a new function
  blocks_to_isize that calculates the maximum isize for a file when allocating
  less blocks than requested. Also included macro's for min() and max().

* Added rquotad program for own convinience, this was build from scratch with
  only the rquota.x file. It seems to work quite nice between LINUX machines
  don't have the resources to test it with other then LINUX machines.
  We probably need a new version number for this type of rquota.
  Something like rquota version 2 or something like that.

* Changed quota program to use a rpc-call to the rquotad on one of you
  disk server machines. See #ifdef RPC in quota.c. Use small timeout because
  I don't wanna wait to long when a machine is down. Increase it when you have
  problems with slow hosts.

* Rewrite of quotacheck program. This one is much faster, about 60%. Thanks
  to Edvard for this big improvement.

* Changed namei.c to iput the inode of a dir when doing a remove of a dir.
  I never had problems with it but it seems that ext2 doesn't care to much when
  you unlink a dir while you have the inode still open. Fixed it and it works
  now ok also on xiafs which had problems with it, and of course the fragment
  should have give this error because you have to iput the dir before you remove
  it.

* Changed source of quotacheck to create new quotafile with at least the
  gracetimes. Now there should never be a problem when turning on quota with
  the quotactl systemcall after one has run quotacheck to create the correct
  quotafiles.
  
* Changed code of quota.c to read MOUNTED(mtab) instead of FSTAB(fstab) when
  showing quotainfo.

