Back to home page

OSCL-LXR

 
 

    


0001 .. SPDX-License-Identifier: GPL-2.0
0002 
0003 ==========================
0004 File Locking Release Notes
0005 ==========================
0006 
0007                 Andy Walker <andy@lysaker.kvaerner.no>
0008 
0009                             12 May 1997
0010 
0011 
0012 1. What's New?
0013 ==============
0014 
0015 1.1 Broken Flock Emulation
0016 --------------------------
0017 
0018 The old flock(2) emulation in the kernel was swapped for proper BSD
0019 compatible flock(2) support in the 1.3.x series of kernels. With the
0020 release of the 2.1.x kernel series, support for the old emulation has
0021 been totally removed, so that we don't need to carry this baggage
0022 forever.
0023 
0024 This should not cause problems for anybody, since everybody using a
0025 2.1.x kernel should have updated their C library to a suitable version
0026 anyway (see the file "Documentation/process/changes.rst".)
0027 
0028 1.2 Allow Mixed Locks Again
0029 ---------------------------
0030 
0031 1.2.1 Typical Problems - Sendmail
0032 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0033 Because sendmail was unable to use the old flock() emulation, many sendmail
0034 installations use fcntl() instead of flock(). This is true of Slackware 3.0
0035 for example. This gave rise to some other subtle problems if sendmail was
0036 configured to rebuild the alias file. Sendmail tried to lock the aliases.dir
0037 file with fcntl() at the same time as the GDBM routines tried to lock this
0038 file with flock(). With pre 1.3.96 kernels this could result in deadlocks that,
0039 over time, or under a very heavy mail load, would eventually cause the kernel
0040 to lock solid with deadlocked processes.
0041 
0042 
0043 1.2.2 The Solution
0044 ^^^^^^^^^^^^^^^^^^
0045 The solution I have chosen, after much experimentation and discussion,
0046 is to make flock() and fcntl() locks oblivious to each other. Both can
0047 exists, and neither will have any effect on the other.
0048 
0049 I wanted the two lock styles to be cooperative, but there were so many
0050 race and deadlock conditions that the current solution was the only
0051 practical one. It puts us in the same position as, for example, SunOS
0052 4.1.x and several other commercial Unices. The only OS's that support
0053 cooperative flock()/fcntl() are those that emulate flock() using
0054 fcntl(), with all the problems that implies.
0055 
0056 
0057 1.3 Mandatory Locking As A Mount Option
0058 ---------------------------------------
0059 
0060 Mandatory locking was prior to this release a general configuration option
0061 that was valid for all mounted filesystems.  This had a number of inherent
0062 dangers, not the least of which was the ability to freeze an NFS server by
0063 asking it to read a file for which a mandatory lock existed.
0064 
0065 Such option was dropped in Kernel v5.14.