linux/fs/ocfs2
Jan Kara f00c9e44ad quota: Fix deadlock during path resolution
As Al Viro pointed out path resolution during Q_QUOTAON calls to quotactl
is prone to deadlocks. We hold s_umount semaphore for reading during the
path resolution and resolution itself may need to acquire the semaphore
for writing when e. g. autofs mountpoint is passed.

Solve the problem by performing the resolution before we get hold of the
superblock (and thus s_umount semaphore). The whole thing is complicated
by the fact that some filesystems (OCFS2) ignore the path argument. So to
distinguish between filesystem which want the path and which do not we
introduce new .quota_on_meta callback which does not get the path. OCFS2
then uses this callback instead of old .quota_on.

CC: Al Viro <viro@ZenIV.linux.org.uk>
CC: Christoph Hellwig <hch@lst.de>
CC: Ted Ts'o <tytso@mit.edu>
CC: Joel Becker <joel.becker@oracle.com>
Signed-off-by: Jan Kara <jack@suse.cz>
2011-01-12 19:14:55 +01:00
..
cluster Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2 2011-01-11 11:28:34 -08:00
dlm Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2 2011-01-11 11:28:34 -08:00
dlmfs fs: icache RCU free inodes 2011-01-07 17:50:26 +11:00
acl.c fs: provide rcu-walk aware permission i_ops 2011-01-07 17:50:29 +11:00
acl.h fs: provide rcu-walk aware permission i_ops 2011-01-07 17:50:29 +11:00
alloc.c ocfs2: Remove unused truncate function from alloc.c 2011-01-07 18:03:00 -08:00
alloc.h ocfs2: Remove unused truncate function from alloc.c 2011-01-07 18:03:00 -08:00
aops.c Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2 2011-01-11 11:28:34 -08:00
aops.h Ocfs2: Teach 'coherency=full' O_DIRECT writes to correctly up_read i_alloc_sem. 2010-12-09 15:36:48 -08:00
blockcheck.c ocfs2: Fix metaecc error messages 2010-09-08 14:25:53 +08:00
blockcheck.h ocfs2: Add statistics for the checksum and ecc operations. 2009-06-03 19:15:36 -07:00
buffer_head_io.c Merge branch 'skip_delete_inode' of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2-mark into ocfs2-fixes 2010-04-30 13:37:29 -07:00
buffer_head_io.h ocfs2: Take the inode out of the metadata read/write paths. 2009-09-04 16:07:48 -07:00
dcache.c fs: dcache per-inode inode alias locking 2011-01-07 17:50:31 +11:00
dcache.h Track negative entries v3 2010-09-10 09:18:15 -07:00
dir.c ocfs2: Hold ip_lock when set/clear flags for indexed dir. 2010-12-16 00:36:15 -08:00
dir.h ocfs2: Introduce dir free space list 2009-04-03 11:39:16 -07:00
dlmglue.c Track negative entries v3 2010-09-10 09:18:15 -07:00
dlmglue.h ocfs2: Fix lockdep warning in reflink. 2010-09-10 09:19:06 -07:00
export.c fs: dcache reduce branches in lookup path 2011-01-07 17:50:28 +11:00
export.h
extent_map.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
extent_map.h ocfs2: Return extent flags for xattr value tree. 2009-09-22 20:09:39 -07:00
file.c fs: provide rcu-walk aware permission i_ops 2011-01-07 17:50:29 +11:00
file.h fs: provide rcu-walk aware permission i_ops 2011-01-07 17:50:29 +11:00
heartbeat.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
heartbeat.h
inode.c Track negative entries v3 2010-09-10 09:18:15 -07:00
inode.h Track negative entries v3 2010-09-10 09:18:15 -07:00
ioctl.c Ocfs2: Add new OCFS2_IOC_INFO ioctl for ocfs2 v8. 2010-09-10 08:35:41 -07:00
ioctl.h Ocfs2: Move ocfs2 ioctl definitions from ocfs2_fs.h to newly added ocfs2_ioctl.h 2010-03-02 14:10:20 -08:00
journal.c ocfs2: Remove obsolete comments before ocfs2_start_trans. 2010-09-10 08:40:18 -07:00
journal.h Reorganize data elements to reduce struct sizes 2010-09-10 08:39:27 -07:00
Kconfig ocfs2: Add DEBUG_FS dependency 2010-12-22 18:34:48 -08:00
localalloc.c ocfs2: Limit default local alloc size within bitmap range. 2010-06-15 16:50:43 -07:00
localalloc.h ocfs2: increase the default size of local alloc windows 2010-05-05 18:18:07 -07:00
locks.c [PATCH] Skip check for mandatory locks when unlocking 2010-03-17 12:07:16 -07:00
locks.h
Makefile ocfs2: allocation reservations 2010-05-05 18:17:30 -07:00
mmap.c Merge branch 'cow_readahead' of git://oss.oracle.com/git/tma/linux-2.6 into merge-2 2010-09-10 08:41:04 -07:00
mmap.h
namei.c Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2 2011-01-11 11:28:34 -08:00
namei.h ocfs2: Create reflinked file in orphan dir. 2009-09-22 20:09:48 -07:00
ocfs1_fs_compat.h
ocfs2.h ocfs2: Try to free truncate log when meeting ENOSPC in write. 2010-12-16 00:46:02 -08:00
ocfs2_fs.h ocfs2: Fix system inodes cache overflow. 2010-12-22 02:35:36 -08:00
ocfs2_ioctl.h Merge branch 'globalheartbeat-2' of git://oss.oracle.com/git/smushran/linux-2.6 into ocfs2-merge-window 2010-10-15 13:03:09 -07:00
ocfs2_lockid.h ocfs2: Add new refcount tree lock resource in dlmglue. 2009-09-22 20:09:28 -07:00
ocfs2_lockingver.h ocfs2_dlmfs: Enable the use of user cluster stacks. 2010-02-26 15:41:18 -08:00
quota.h ocfs2: Fix NULL pointer deref when writing local dquot 2010-05-21 19:30:48 +02:00
quota_global.c ocfs2: Zero the tail cluster when extending past i_size. 2010-07-08 13:25:35 -07:00
quota_local.c ocfs2: Zero the tail cluster when extending past i_size. 2010-07-08 13:25:35 -07:00
refcounttree.c Merge branch 'globalheartbeat-2' of git://oss.oracle.com/git/smushran/linux-2.6 into ocfs2-merge-window 2010-10-15 13:03:09 -07:00
refcounttree.h Merge branch 'cow_readahead' of git://oss.oracle.com/git/tma/linux-2.6 into merge-2 2010-09-10 08:41:04 -07:00
reservations.c ocfs2: Move 'wanted' into parens of ocfs2_resmap_resv_bits. 2010-09-23 14:16:47 -07:00
reservations.h ocfs2: make ocfs2_adjust_resv_from_alloc simple. 2010-05-05 18:18:09 -07:00
resize.c ocfs2: Make ocfs2_journal_dirty() void. 2010-05-05 18:17:29 -07:00
resize.h
slot_map.c When I tried to compile I got the following warning: 2010-10-11 13:45:52 -07:00
slot_map.h
stack_o2cb.c ocfs2: Print message if user mounts without starting global heartbeat 2010-10-06 17:55:29 -07:00
stack_user.c ocfs2_connection_find() returns pointer to bad structure 2010-11-18 15:41:41 -08:00
stackglue.c ocfs2_dlmfs: Enable the use of user cluster stacks. 2010-02-26 15:41:18 -08:00
stackglue.h ocfs2_dlmfs: Enable the use of user cluster stacks. 2010-02-26 15:41:18 -08:00
suballoc.c Merge branch 'globalheartbeat-2' of git://oss.oracle.com/git/smushran/linux-2.6 into ocfs2-merge-window 2010-10-15 13:03:09 -07:00
suballoc.h ocfs2: allow return of new inode block location before allocation of the inode 2010-09-08 14:25:59 +08:00
super.c quota: Fix deadlock during path resolution 2011-01-12 19:14:55 +01:00
super.h ocfs2: Wrap signal blocking in void functions. 2010-05-10 11:50:10 -07:00
symlink.c ocfs2: Don't walk off the end of fast symlinks. 2010-09-29 17:33:05 -07:00
symlink.h
sysfile.c ocfs2: Cache system inodes of other slots. 2010-09-10 08:56:24 -07:00
sysfile.h
uptodate.c ocfs2/trivial: Remove trailing whitespaces 2010-01-25 19:20:51 -08:00
uptodate.h ocfs2: Pass struct ocfs2_caching_info to the journal functions. 2009-09-04 16:07:50 -07:00
ver.c
ver.h
xattr.c ocfs2: Avoid to evaluate xattr block flags again. 2010-10-15 13:03:43 -07:00
xattr.h ocfs: constify xattr_handler 2010-05-21 18:31:20 -04:00