mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-22 23:04:43 +00:00
quota: Reduce contention on dq_data_lock
dq_data_lock is currently used to protect all modifications of quota accounting information, consistency of quota accounting on the inode, and dquot pointers from inode. As a result contention on the lock can be pretty heavy. Reduce the contention on the lock by protecting quota accounting information by a new dquot->dq_dqb_lock and consistency of quota accounting with inode usage by inode->i_lock. This change reduces time to create 500000 files on ext4 on ramdisk by 50 different processes in separate directories by 6% when user quota is turned on. When those 50 processes belong to 50 different users, the improvement is about 9%. Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
f4a8116a4c
commit
7b9ca4c61b
6 changed files with 186 additions and 132 deletions
|
@ -298,12 +298,13 @@ struct dquot {
|
|||
struct list_head dq_free; /* Free list element */
|
||||
struct list_head dq_dirty; /* List of dirty dquots */
|
||||
struct mutex dq_lock; /* dquot IO lock */
|
||||
spinlock_t dq_dqb_lock; /* Lock protecting dq_dqb changes */
|
||||
atomic_t dq_count; /* Use count */
|
||||
struct super_block *dq_sb; /* superblock this applies to */
|
||||
struct kqid dq_id; /* ID this applies to (uid, gid, projid) */
|
||||
loff_t dq_off; /* Offset of dquot on disk */
|
||||
unsigned long dq_flags; /* See DQ_* */
|
||||
struct mem_dqblk dq_dqb; /* Diskquota usage */
|
||||
struct mem_dqblk dq_dqb; /* Diskquota usage [dq_dqb_lock] */
|
||||
};
|
||||
|
||||
/* Operations which must be implemented by each quota format */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue