Jeff Layton
1c8c601a8c
locks: protect most of the file_lock handling with i_lock
...
Having a global lock that protects all of this code is a clear
scalability problem. Instead of doing that, move most of the code to be
protected by the i_lock instead. The exceptions are the global lists
that the ->fl_link sits on, and the ->fl_block list.
->fl_link is what connects these structures to the
global lists, so we must ensure that we hold those locks when iterating
over or updating these lists.
Furthermore, sound deadlock detection requires that we hold the
blocked_list state steady while checking for loops. We also must ensure
that the search and update to the list are atomic.
For the checking and insertion side of the blocked_list, push the
acquisition of the global lock into __posix_lock_file and ensure that
checking and update of the blocked_list is done without dropping the
lock in between.
On the removal side, when waking up blocked lock waiters, take the
global lock before walking the blocked list and dequeue the waiters from
the global list prior to removal from the fl_block list.
With this, deadlock detection should be race free while we minimize
excessive file_lock_lock thrashing.
Finally, in order to avoid a lock inversion problem when handling
/proc/locks output we must ensure that manipulations of the fl_block
list are also protected by the file_lock_lock.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2013-06-29 12:57:42 +04:00
..
caching
FS-Cache: Provide proper invalidation
2012-12-20 22:04:07 +00:00
configfs
configfs: convert to umode_t
2012-01-03 22:54:57 -05:00
nfs
SUNRPC: Use gssproxy upcall for server RPCGSS authentication.
2013-04-26 11:41:28 -04:00
pohmelfs
Documentation: Fix multiple typo in Documentation
2012-03-07 16:08:24 +01:00
00-INDEX
Introduce a new file system, Flash-Friendly File System (F2FS), to Linux 3.8.
2012-12-20 13:54:52 -08:00
9p.txt
9p: fix 9p.txt to advertise msize instead of maxdata
2011-10-24 11:13:12 -05:00
adfs.txt
adfs: add hexadecimal filetype suffix option
2011-03-22 17:44:17 -07:00
affs.txt
Documentation: update broken web addresses.
2010-08-04 15:21:40 +02:00
afs.txt
AFS: Documentation updates
2009-08-19 10:40:13 -07:00
autofs4-mount-control.txt
Fix common misspellings
2011-03-31 11:26:23 -03:00
automount-support.txt
VFS: Unexport do_kern_mount() and clean up simple_pin_fs()
2006-06-09 09:34:16 -04:00
befs.txt
Documentation: befs.txt: no maintainer, orphaned
2011-08-13 18:34:03 -07:00
bfs.txt
btrfs.txt
btrfs: document mount options in Documentation/fs/btrfs.txt
2013-05-06 15:54:26 -04:00
ceph.txt
ceph: enable/disable dentry complete flags via mount option
2012-01-12 11:00:40 -08:00
cifs.txt
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
coda.txt
cramfs.txt
debugfs.txt
debugfs: more tightly restrict default mount mode
2012-08-27 13:42:02 -07:00
devpts.txt
Document usage of multiple-instances of devpts
2009-01-02 10:19:36 -08:00
directory-locking
dlmfs.txt
Documentation/: it's -> its where appropriate
2010-04-23 02:09:52 +02:00
dnotify.txt
Documentation/fs/: split txt and source files
2010-03-12 15:52:35 -08:00
dnotify_test.c
Documentation/fs/: split txt and source files
2010-03-12 15:52:35 -08:00
ecryptfs.txt
efivarfs.txt
efivarfs: Add documentation for the EFI variable filesystem
2012-10-30 10:39:18 +00:00
exofs.txt
exofs: Add option to mount by osdname
2011-03-15 15:02:51 +02:00
ext2.txt
Doc fix: ext2 can only have 32,000 subdirs, not 32,768
2009-06-18 13:03:44 -07:00
ext3.txt
ext3: update documentation with barrier=1 default
2012-04-11 11:12:45 +02:00
ext4.txt
ext4: introduce reserved space
2013-04-09 22:11:22 -04:00
f2fs.txt
f2fs: update f2fs.txt related with discard at mkfs
2013-04-03 17:27:52 +09:00
fiemap.txt
Documentation/: it's -> its where appropriate
2010-04-23 02:09:52 +02:00
files.txt
Wrap accesses to the fd_sets in struct fdtable
2012-02-19 10:30:52 -08:00
fuse.txt
Documentation/: it's -> its where appropriate
2010-04-23 02:09:52 +02:00
gfs2-glocks.txt
GFS2: Update glock doc to add new stats info
2012-05-10 12:41:40 +01:00
gfs2-uevents.txt
Documentation: Fix multiple typo in Documentation
2012-03-07 16:08:24 +01:00
gfs2.txt
GFS2: Update main gfs2 doc
2012-05-10 11:45:31 +01:00
hfs.txt
Documentation: HFS is orphaned
2011-11-04 12:01:48 -07:00
hfsplus.txt
Documentation: document HFSPlus
2007-07-31 15:39:38 -07:00
hpfs.txt
Documentation/: it's -> its where appropriate
2010-04-23 02:09:52 +02:00
inotify.txt
Documentation: fix inotify source file paths
2011-11-04 12:01:47 -07:00
isofs.txt
Documentation: update broken web addresses.
2010-08-04 15:21:40 +02:00
jfs.txt
jfs: Remove obsolete email address
2012-09-17 12:00:01 -05:00
Locking
locks: protect most of the file_lock handling with i_lock
2013-06-29 12:57:42 +04:00
locks.txt
doc: fix broken references
2011-09-27 18:08:04 +02:00
logfs.txt
fix "seperate" typos in comments
2010-05-10 11:56:30 +02:00
Makefile
Documentation/fs/: split txt and source files
2010-03-12 15:52:35 -08:00
mandatory-locking.txt
locks: add warning about mandatory locking races
2007-10-09 18:32:45 -04:00
ncpfs.txt
ncpfs: remove dead URL from documentation
2009-09-23 07:39:42 -07:00
nilfs2.txt
nilfs2: remove resize from unsupported features list
2011-07-13 16:08:59 +09:00
ntfs.txt
Fix common misspellings
2011-03-31 11:26:23 -03:00
ocfs2.txt
ocfs2: clean up mount option about atime in ocfs2.txt
2011-05-23 23:37:12 -07:00
omfs.txt
path-lookup.txt
Fix common misspellings
2011-03-31 11:26:23 -03:00
porting
[readdir] ->readdir() is gone
2013-06-29 12:57:04 +04:00
proc.txt
docs: update documentation about /proc/<pid>/fdinfo/<fd> fanotify output
2012-12-17 17:15:28 -08:00
qnx6.txt
Documentation: Fix typo in multiple files in Documentation
2012-04-16 14:37:13 +02:00
quota.txt
quota: documentation for sending "below quota" messages via netlink and tiny doc update
2008-08-12 16:07:27 -07:00
ramfs-rootfs-initramfs.txt
Documentation: Fix Broken URL "freshmeat"
2012-02-21 11:43:45 +01:00
relay.txt
romfs.txt
Documentation/filesystems/romfs.txt: fixing link to genromfs
2011-02-17 22:04:46 +01:00
seq_file.txt
seq_file: use proc_create() in documentation
2009-12-16 07:20:07 -08:00
sharedsubtree.txt
Documentation: Fix trivial typo in filesystems/sharedsubtree.txt
2010-10-25 21:18:21 -04:00
spufs.txt
Fix typos in /Documentation : 'U-Z'
2006-11-30 04:58:40 +01:00
squashfs.txt
Squashfs: Update documentation to include xattrs
2011-12-30 01:20:24 +00:00
sysfs-pci.txt
PCI: Allow read/write access to sysfs I/O port resources
2010-07-30 09:32:08 -07:00
sysfs-tagging.txt
sysfs-namespaces: add a high-level Documentation file
2010-05-21 09:37:31 -07:00
sysfs.txt
sysfs: propagate umode_t
2012-01-03 22:55:03 -05:00
sysv-fs.txt
tmpfs.txt
mempolicy: document cpuset interaction with tmpfs mpol mount option
2010-05-25 08:06:57 -07:00
ubifs.txt
UBIFS: switch self-check knobs to debugfs
2011-07-04 10:54:28 +03:00
udf.txt
udf: implement mode and dmode mounting options
2009-04-02 12:29:50 +02:00
ufs.txt
[PATCH] ufs2 write: mount as rw
2007-02-12 09:48:40 -08:00
vfat.txt
Documentation: update nfs option in filesystem/vfat.txt
2013-04-29 18:28:41 -07:00
vfs.txt
Don't pass inode to ->d_hash() and ->d_compare()
2013-06-29 12:57:36 +04:00
xfs-delayed-logging-design.txt
Fix common misspellings
2011-03-31 11:26:23 -03:00
xfs-self-describing-metadata.txt
xfs: add metadata CRC documentation
2013-04-27 13:27:43 -05:00
xfs.txt
xfs: disable noattr2/attr2 mount options for CRC enabled filesystems
2013-06-06 10:51:34 -05:00
xip.txt
DOC: update xip method info
2008-11-12 17:17:17 -08:00