quota: Reduce contention on dq_data_lock
authorJan Kara <jack@suse.cz>
Mon, 7 Aug 2017 11:19:50 +0000 (13:19 +0200)
committerJan Kara <jack@suse.cz>
Thu, 17 Aug 2017 20:07:59 +0000 (22:07 +0200)
commit7b9ca4c61bc278b771fb57d6290a31ab1fc7fdac
tree3e9c7464525efa2a9dd50d02e7fe8f7df45a4961
parentf4a8116a4c8c8f754d0ec1498a2ba4b63d114e6a
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>
fs/ext4/super.c
fs/ocfs2/quota_global.c
fs/ocfs2/quota_local.c
fs/quota/dquot.c
fs/quota/quota_tree.c
include/linux/quota.h