Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 541010e4 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'locks' of git://linux-nfs.org/~bfields/linux

* 'locks' of git://linux-nfs.org/~bfields/linux:
  nfsd: remove IS_ISMNDLCK macro
  Rework /proc/locks via seq_files and seq_list helpers
  fs/locks.c: use list_for_each_entry() instead of list_for_each()
  NFS: clean up explicit check for mandatory locks
  AFS: clean up explicit check for mandatory locks
  9PFS: clean up explicit check for mandatory locks
  GFS2: clean up explicit check for mandatory locks
  Cleanup macros for distinguishing mandatory locks
  Documentation: move locks.txt in filesystems/
  locks: add warning about mandatory locking races
  Documentation: move mandatory locking documentation to filesystems/
  locks: Fix potential OOPS in generic_setlease()
  Use list_first_entry in locks_wake_up_blocks
  locks: fix flock_lock_file() comment
  Memory shortage can result in inconsistent flocks state
  locks: kill redundant local variable
  locks: reverse order of posix_locks_conflict() arguments
parents e457f790 5e7fc436
Loading
Loading
Loading
Loading
+1 −5
Original line number Original line Diff line number Diff line
@@ -145,7 +145,7 @@ fb/
feature-removal-schedule.txt
feature-removal-schedule.txt
	- list of files and features that are going to be removed.
	- list of files and features that are going to be removed.
filesystems/
filesystems/
	- directory with info on the various filesystems that Linux supports.
	- info on the vfs and the various filesystems that Linux supports.
firmware_class/
firmware_class/
	- request_firmware() hotplug interface info.
	- request_firmware() hotplug interface info.
floppy.txt
floppy.txt
@@ -230,8 +230,6 @@ local_ops.txt
	- semantics and behavior of local atomic operations.
	- semantics and behavior of local atomic operations.
lockdep-design.txt
lockdep-design.txt
	- documentation on the runtime locking correctness validator.
	- documentation on the runtime locking correctness validator.
locks.txt
	- info on file locking implementations, flock() vs. fcntl(), etc.
logo.gif
logo.gif
	- full colour GIF image of Linux logo (penguin - Tux).
	- full colour GIF image of Linux logo (penguin - Tux).
logo.txt
logo.txt
@@ -240,8 +238,6 @@ m68k/
	- directory with info about Linux on Motorola 68k architecture.
	- directory with info about Linux on Motorola 68k architecture.
magic-number.txt
magic-number.txt
	- list of magic numbers used to mark/protect kernel data structures.
	- list of magic numbers used to mark/protect kernel data structures.
mandatory.txt
	- info on the Linux implementation of Sys V mandatory file locking.
mca.txt
mca.txt
	- info on supporting Micro Channel Architecture (e.g. PS/2) systems.
	- info on supporting Micro Channel Architecture (e.g. PS/2) systems.
md.txt
md.txt
+4 −0
Original line number Original line Diff line number Diff line
@@ -52,6 +52,10 @@ isofs.txt
	- info and mount options for the ISO 9660 (CDROM) filesystem.
	- info and mount options for the ISO 9660 (CDROM) filesystem.
jfs.txt
jfs.txt
	- info and mount options for the JFS filesystem.
	- info and mount options for the JFS filesystem.
locks.txt
	- info on file locking implementations, flock() vs. fcntl(), etc.
mandatory-locking.txt
	- info on the Linux implementation of Sys V mandatory file locking.
ncpfs.txt
ncpfs.txt
	- info on Novell Netware(tm) filesystem using NCP protocol.
	- info on Novell Netware(tm) filesystem using NCP protocol.
ntfs.txt
ntfs.txt
+5 −5
Original line number Original line Diff line number Diff line
@@ -53,11 +53,11 @@ fcntl(), with all the problems that implies.
1.3 Mandatory Locking As A Mount Option
1.3 Mandatory Locking As A Mount Option
---------------------------------------
---------------------------------------


Mandatory locking, as described in 'Documentation/mandatory.txt' was prior
Mandatory locking, as described in 'Documentation/filesystems/mandatory.txt'
to this release a general configuration option that was valid for all
was prior to this release a general configuration option that was valid for
mounted filesystems. This had a number of inherent dangers, not the least
all mounted filesystems.  This had a number of inherent dangers, not the
of which was the ability to freeze an NFS server by asking it to read a
least of which was the ability to freeze an NFS server by asking it to read
file for which a mandatory lock existed.
a file for which a mandatory lock existed.


From this release of the kernel, mandatory locking can be turned on and off
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'.
on a per-filesystem basis, using the mount options 'mand' and 'nomand'.
+20 −1
Original line number Original line Diff line number Diff line
@@ -3,7 +3,26 @@
		Andy Walker <andy@lysaker.kvaerner.no>
		Andy Walker <andy@lysaker.kvaerner.no>


			   15 April 1996
			   15 April 1996

		     (Updated September 2007)

0. Why you should avoid mandatory locking
-----------------------------------------

The Linux implementation is prey to a number of difficult-to-fix race
conditions which in practice make it not dependable:

	- The write system call checks for a mandatory lock only once
	  at its start.  It is therefore possible for a lock request to
	  be granted after this check but before the data is modified.
	  A process may then see file data change even while a mandatory
	  lock was held.
	- Similarly, an exclusive lock may be granted on a file after
	  the kernel has decided to proceed with a read, but before the
	  read has actually completed, and the reading process may see
	  the file data in a state which should not have been visible
	  to it.
	- Similar races make the claimed mutual exclusion between lock
	  and mmap similarly unreliable.


1. What is  mandatory locking?
1. What is  mandatory locking?
------------------------------
------------------------------
+1 −1
Original line number Original line Diff line number Diff line
@@ -105,7 +105,7 @@ static int v9fs_file_lock(struct file *filp, int cmd, struct file_lock *fl)
	P9_DPRINTK(P9_DEBUG_VFS, "filp: %p lock: %p\n", filp, fl);
	P9_DPRINTK(P9_DEBUG_VFS, "filp: %p lock: %p\n", filp, fl);


	/* No mandatory locks */
	/* No mandatory locks */
	if ((inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID)
	if (__mandatory_lock(inode))
		return -ENOLCK;
		return -ENOLCK;


	if ((IS_SETLK(cmd) || IS_SETLKW(cmd)) && fl->fl_type != F_UNLCK) {
	if ((IS_SETLK(cmd) || IS_SETLKW(cmd)) && fl->fl_type != F_UNLCK) {
Loading