]> git.baikalelectronics.ru Git - kernel.git/commit
quota: Refactor dquot_transfer code so that OCFS2 can pass in its references
authorJan Kara <jack@suse.cz>
Thu, 13 May 2010 17:58:50 +0000 (19:58 +0200)
committerJan Kara <jack@suse.cz>
Fri, 21 May 2010 17:30:45 +0000 (19:30 +0200)
commit2316130aab276ef9d15a657ec23c1dbab7433b5b
tree5ab56dabd75912267764849a594ec2f271fd4352
parenta843a687b61b9f9b703f1fca2cf8698875efdea3
quota: Refactor dquot_transfer code so that OCFS2 can pass in its references

Currently, __dquot_transfer() acquires its own references of dquot structures
that will be put into inode. But for OCFS2, this creates a lock inversion
between dq_lock (waited on in dqget) and transaction start (started in
ocfs2_setattr). Currently, deadlock is impossible because dq_lock is acquired
only during dquot_acquire and dquot_release and we already hold a reference to
dquot structures in ocfs2_setattr so neither of these functions can be called
while we call dquot_transfer. But this is rather subtle and it is hard to teach
lockdep about it. So provide __dquot_transfer function that can be passed dquot
references directly. OCFS2 can then pass acquired dquot references directly to
__dquot_transfer with proper locking.

Signed-off-by: Jan Kara <jack@suse.cz>
fs/quota/dquot.c
include/linux/quotaops.h