Revision 5c81a4197de38411fe3e27f8593fff73a5d6b868 authored by Arjan van de Ven on 03 July 2006, 07:25:20 UTC, committed by Linus Torvalds on 03 July 2006, 22:27:08 UTC
The quota code plays interesting games with the lock ordering; to quote Jan:

| i_mutex of inode containing quota file is acquired after all other
| quota locks. i_mutex of all other inodes is acquired before quota
| locks. Quota code makes sure (by resetting inode operations and
| setting special flag on inode) that noone tries to enter quota code
| while holding i_mutex on a quota file...

The good news is that all of this special case i_mutex grabbing happens in the
(per filesystem) low level quota write function.  For this special case we
need a new I_MUTEX_* nesting level, since this just entirely outside any of
the regular VFS locking rules for i_mutex.  I trust Jan on his blue eyes that
this is not ever going to deadlock; and based on that the patch below is what
it takes to inform lockdep of these very interesting new locking rules.

The new locking rule for the I_MUTEX_QUOTA nesting level is that this is the
deepest possible level of nesting for i_mutex, and that this only should be
used in quota write (and possibly read) function of filesystems.  This makes
the lock ordering of the I_MUTEX_* levels:

I_MUTEX_PARENT -> I_MUTEX_CHILD -> I_MUTEX_NORMAL -> I_MUTEX_QUOTA

Has no effect on non-lockdep kernels.

Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Acked-by: Ingo Molnar <mingo@elte.hu>
Cc: Jan Kara <jack@ucw.cz>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
1 parent 5934537
History
File Mode Size
9p
adfs
affs
afs
autofs
autofs4
befs
bfs
cifs
coda
configfs
cramfs
debugfs
devpts
efs
exportfs
ext2
ext3
fat
freevxfs
fuse
hfs
hfsplus
hostfs
hpfs
hppfs
hugetlbfs
isofs
jbd
jffs
jffs2
jfs
lockd
minix
msdos
ncpfs
nfs
nfs_common
nfsd
nls
ntfs
ocfs2
openpromfs
partitions
proc
qnx4
ramfs
reiserfs
romfs
smbfs
sysfs
sysv
udf
ufs
vfat
xfs
Kconfig -rw-r--r-- 69.7 KB
Kconfig.binfmt -rw-r--r-- 5.3 KB
Makefile -rw-r--r-- 3.3 KB
aio.c -rw-r--r-- 43.8 KB
attr.c -rw-r--r-- 4.2 KB
bad_inode.c -rw-r--r-- 2.8 KB
binfmt_aout.c -rw-r--r-- 14.8 KB
binfmt_elf.c -rw-r--r-- 45.5 KB
binfmt_elf_fdpic.c -rw-r--r-- 30.1 KB
binfmt_em86.c -rw-r--r-- 2.8 KB
binfmt_flat.c -rw-r--r-- 26.0 KB
binfmt_misc.c -rw-r--r-- 15.7 KB
binfmt_script.c -rw-r--r-- 2.7 KB
binfmt_som.c -rw-r--r-- 7.6 KB
bio.c -rw-r--r-- 30.0 KB
block_dev.c -rw-r--r-- 29.3 KB
buffer.c -rw-r--r-- 83.1 KB
char_dev.c -rw-r--r-- 9.1 KB
compat.c -rw-r--r-- 52.6 KB
compat_ioctl.c -rw-r--r-- 82.9 KB
dcache.c -rw-r--r-- 45.5 KB
dcookies.c -rw-r--r-- 6.4 KB
direct-io.c -rw-r--r-- 35.0 KB
dnotify.c -rw-r--r-- 4.3 KB
dquot.c -rw-r--r-- 52.5 KB
drop_caches.c -rw-r--r-- 1.4 KB
eventpoll.c -rw-r--r-- 44.3 KB
exec.c -rw-r--r-- 34.9 KB
fcntl.c -rw-r--r-- 13.7 KB
fifo.c -rw-r--r-- 3.1 KB
file.c -rw-r--r-- 8.6 KB
file_table.c -rw-r--r-- 6.7 KB
filesystems.c -rw-r--r-- 5.2 KB
fs-writeback.c -rw-r--r-- 19.8 KB
inode.c -rw-r--r-- 36.5 KB
inotify.c -rw-r--r-- 19.2 KB
inotify_user.c -rw-r--r-- 17.3 KB
ioctl.c -rw-r--r-- 3.9 KB
ioprio.c -rw-r--r-- 4.0 KB
libfs.c -rw-r--r-- 15.4 KB
locks.c -rw-r--r-- 54.5 KB
mbcache.c -rw-r--r-- 18.2 KB
mpage.c -rw-r--r-- 22.8 KB
namei.c -rw-r--r-- 66.7 KB
namespace.c -rw-r--r-- 46.9 KB
nfsctl.c -rw-r--r-- 2.4 KB
open.c -rw-r--r-- 27.5 KB
pipe.c -rw-r--r-- 21.4 KB
pnode.c -rw-r--r-- 7.6 KB
pnode.h -rw-r--r-- 1013 bytes
posix_acl.c -rw-r--r-- 8.5 KB
quota.c -rw-r--r-- 8.9 KB
quota_v1.c -rw-r--r-- 5.7 KB
quota_v2.c -rw-r--r-- 20.1 KB
read_write.c -rw-r--r-- 16.2 KB
readdir.c -rw-r--r-- 6.7 KB
select.c -rw-r--r-- 20.6 KB
seq_file.c -rw-r--r-- 9.6 KB
splice.c -rw-r--r-- 34.0 KB
stat.c -rw-r--r-- 10.5 KB
super.c -rw-r--r-- 20.3 KB
sync.c -rw-r--r-- 4.4 KB
xattr.c -rw-r--r-- 13.3 KB
xattr_acl.c -rw-r--r-- 2.3 KB

back to top