I've been carrying this since Jan sent it out a month or two ago.
I don't know if anyone has tested it though. The sort of people
who use quotas tend to like nice stable kernels. I read through it,
but can't say that I know enough about quotas to know if it makes sense.
The wait_on_dquot() synchronisation is a bit odd.
I do need to do a round of stability testing with this and ext3 - the
interaction between quotas and ext3 is an area where we've had deadlocks
in the past.
But the quota locking is definitely looking crufty, and I'd suggest that
we run with this..
Patch from Jan Kara <jack@suse.cz>
"I'm resending you the patch with new quota SMP locking. The patch removes
BKL and replaces it with two spinlocks protecting quota lists and data
stored in dquot structures. Also non-SMP locking was changed a bit make SMP
locking easier (eg. we got rid of not very nice dq_dup_ref counters). The
patch is against 2.5.48 but applies well also to 2.5.49. Would you please
apply the patch?"
- Change dqoff_sem from a semaphore to an rwsem.
- Convert dqi_flags from an int to a ulong and use test_bit/set_bit rather
thatn &/|
- The various exported quota operations now run without lock_kernel().
This means that things like DQUOT_ALLOC_SPACE no longer take lock_kernel()
in out high-perfomance filesystems. Nice.
- Replace lock_kernel() in the quota code with two quota-private global
locks.
- Replace all the open-coded waitqueue management with a semaphore
(wait_on_dquot())