diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1997-01-07 02:33:00 +0000 |
---|---|---|
committer | <ralf@linux-mips.org> | 1997-01-07 02:33:00 +0000 |
commit | beb116954b9b7f3bb56412b2494b562f02b864b1 (patch) | |
tree | 120e997879884e1b9d93b265221b939d2ef1ade1 /Documentation/locks.txt | |
parent | 908d4681a1dc3792ecafbe64265783a86c4cccb6 (diff) |
Import of Linux/MIPS 2.1.14
Diffstat (limited to 'Documentation/locks.txt')
-rw-r--r-- | Documentation/locks.txt | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/Documentation/locks.txt b/Documentation/locks.txt new file mode 100644 index 000000000..ea91be8a2 --- /dev/null +++ b/Documentation/locks.txt @@ -0,0 +1,102 @@ + File Locking Release Notes + + Andy Walker <andy@lysaker.kvaerner.no> + + 21 Sep 1996 + + +1. What's New? +-------------- + +1.1 Flock Emulation Warnings +---------------------------- +Many people will have noticed the ugly messages that the file locking +code started generating with the release of kernel version 1.3.95. The +messages look something like this: + + fcntl_setlk() called by process XX with broken flock() emulation + +This is a warning for people using older C libraries that those libraries +are still calling the pre 1.3.x flock() emulation routines, instead of +the real flock() system call. The old routines are quite badly broken, +especially with respect to parent-child lock sharing, and can give bad +results if, for example, sendmail attempts to use them. + +Fixed versions of the C libraries have been on public release for many +months. The latest versions at the time of writing are 5.3.12 (released) +or 5.4.6 (testing) for ELF. There is also a 4.7.6 release for people +using a.out systems. + +With the release of Linux 2.0 Linus decided to be lenient on the +stragglers and changed the warning message so that the kernel will only +complain once and then shut up. That should make life more bearable even +for people who, for some reason, don't want to upgrade their libraries. + + +1.2 Disallow Mixed Locks +------------------------ + +1.2.1 Sendmail Problems +--------------------- +Because sendmail was unable to use the old flock() emulation, many sendmail +installations use fcntl() instead of flock(). This is true of Slackware 3.0 +for example. This gave rise to some other subtle problems if sendmail was +configured to rebuild the alias file. Sendmail tried to lock the aliases.dir +file with fcntl() at the same time as the GDBM routines tried to lock this +file with flock(). With pre 1.3.96 kernels this could result in deadlocks that, +over time, or under a very heavy mail load, would eventually cause the kernel +to lock solid with deadlocked processes. + + +1.2.2 The Solution +------------------ +I have chosen the rather cruel solution of disallowing mixed locking styles +on a given file at a given time. Attempts to lock a file with flock() when +fcntl() locks exist, or vice versa, return with an error status of EBUSY. +This seemed to be the only way to avoid all possible deadlock conditions, +as flock() locks do not strictly have one owner process and so can't be +checked for deadlocking in the usual manner. + +The process that created a lock with flock() might have forked multiple +children and exited. Previously the parent process would have been marked +as the owner of the lock, but deadlocks could just have easily occurred in +one or more of the children, which we would not have been able to identify +and avoid. + +Some programs may break (again, groan). In particular the aforementioned +sendmail may have problems running in 'newaliases' mode. It will no longer +deadlock though. Recompile sendmail to use flock() and your troubles will +be over. + +1.3 Mandatory Locking As A Mount Option +--------------------------------------- + +Mandatory locking, as described in 'Documentation/mandatory.txt' was prior +to this release a general configuration option that was valid for all +mounted filesystems. This had a number of inherent dangers, not the least +of which was the ability to freeze an NFS server by asking it to read a +file for which a mandatory lock existed. + +From this release of the kernel, mandatory locking can be turned on and off +on a per-filesystem basis, using the mount options 'mand' and 'nomand'. +The default is to disallow mandatory locking. The intention is that +mandatory locking only be enabled on a local filesystem as the specific need +arises. + +Until an updated version of mount(8) becomes available you may have to apply +this patch to the mount sources (based on the version distributed with Rick +Faiths util-linux-2.5 package): + +*** mount.c.orig Sat Jun 8 09:14:31 1996 +--- mount.c Sat Jun 8 09:13:02 1996 +*************** +*** 100,105 **** +--- 100,107 ---- + { "noauto", 0, MS_NOAUTO }, /* Can only be mounted explicitly */ + { "user", 0, MS_USER }, /* Allow ordinary user to mount */ + { "nouser", 1, MS_USER }, /* Forbid ordinary user to mount */ ++ { "mand", 0, MS_MANDLOCK }, /* Allow mandatory locks on this FS */ ++ { "nomand", 1, MS_MANDLOCK }, /* Forbid mandatory locks on this FS */ + /* add new options here */ + #ifdef MS_NOSUB + { "sub", 1, MS_NOSUB }, /* allow submounts */ |