Jan Kara fb8dd8d780 ocfs2: Fix quota locking
OCFS2 had three issues with quota locking:
a) When reading dquot from global quota file, we started a transaction while
   holding dqio_mutex which is prone to deadlocks because other paths do it
   the other way around
b) During ocfs2_sync_dquot we were not protected against concurrent writers
   on the same node. Because we first copy data to local buffer, a race
   could happen resulting in old data being written to global quota file and
   thus causing quota inconsistency after a crash.
c) ip_alloc_sem of quota files was acquired while a transaction is started
   in ocfs2_quota_write which can deadlock because we first get ip_alloc_sem
   and then start a transaction when extending quota files.

We fix the problem a) by pulling all necessary code to ocfs2_acquire_dquot
and ocfs2_release_dquot. Thus we no longer depend on generic dquot_acquire
to do the locking and can force proper lock ordering.

Problems b) and c) are fixed by locking i_mutex and ip_alloc_sem of
global quota file in ocfs2_lock_global_qf and removing ip_alloc_sem from
ocfs2_quota_read and ocfs2_quota_write.

Acked-by: Joel Becker <Joel.Becker@oracle.com>
Signed-off-by: Jan Kara <jack@suse.cz>
2010-05-21 19:30:47 +02:00
..
2010-04-22 11:42:00 +02:00
2010-04-30 14:52:51 -05:00
2010-05-21 19:30:44 +02:00
2010-05-21 19:30:47 +02:00
2010-04-23 02:08:44 +02:00
2010-01-26 22:22:26 -05:00
2010-05-15 07:16:33 -04:00
2010-04-29 15:12:18 +03:00
2010-05-21 19:30:44 +02:00
2009-12-16 07:20:13 -08:00
2010-03-06 11:26:29 -08:00
2010-03-19 08:05:10 +01:00
2010-03-03 14:13:08 -05:00
2009-12-17 04:52:13 -05:00
2010-05-11 17:43:58 +02:00
2010-04-21 16:19:29 -07:00
2010-03-06 11:26:29 -08:00
2010-03-03 14:07:59 -05:00
2010-04-23 10:39:48 -07:00
2010-03-08 16:55:37 +01:00
2010-05-18 08:57:00 +10:00
2009-12-17 10:51:40 -05:00
2010-03-12 15:52:32 -08:00
2010-04-25 08:54:42 +02:00
2009-12-16 12:16:49 -05:00