]> git.baikalelectronics.ru Git - kernel.git/commit
quota: Fix deadlock during path resolution
authorJan Kara <jack@suse.cz>
Wed, 15 Sep 2010 15:38:58 +0000 (17:38 +0200)
committerJan Kara <jack@suse.cz>
Wed, 12 Jan 2011 18:14:55 +0000 (19:14 +0100)
commit5739511ab85e1b513eb26baee993a55b11623ef5
treecbb47ae0d8aba9d8b3c44714b000156715cdf969
parent004bda60330ca6df2546854d4653d209d02edc0f
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>
fs/ext3/super.c
fs/ext4/super.c
fs/ocfs2/super.c
fs/quota/dquot.c
fs/quota/quota.c
fs/reiserfs/super.c
include/linux/quota.h
include/linux/quotaops.h