diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2013-12-12 14:47:59 +0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2014-01-14 23:27:56 +0400 |
commit | c754fbbb1b6bf462c6ddba48b19f20adf2335cac (patch) | |
tree | 4d716f692b1366d77067e9fea74f6a5a9dbe61b8 /fs/gfs2/quota.h | |
parent | 086352f1aa8d717eaf565074d6634c7bdd26aca0 (diff) | |
download | linux-c754fbbb1b6bf462c6ddba48b19f20adf2335cac.tar.xz |
GFS2: Use RCU/hlist_bl based hash for quotas
Prior to this patch, GFS2 kept all the quotas for each
super block in a single linked list. This is rather slow
when there are large numbers of quotas.
This patch introduces a hlist_bl based hash table, similar
to the one used for glocks. The initial look up of the quota
is now lockless in the case where it is already cached,
although we still have to take the per quota spinlock in
order to bump the ref count. Either way though, this is a
big improvement on what was there before.
The qd_lock and the per super block list is preserved, for
the time being. However it is intended that since this is no
longer used for its original role, it should be possible to
shrink the number of items on that list in due course and
remove the requirement to take qd_lock in qd_get.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Cc: Abhijith Das <adas@redhat.com>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'fs/gfs2/quota.h')
-rw-r--r-- | fs/gfs2/quota.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/gfs2/quota.h b/fs/gfs2/quota.h index 96e4f34a03b0..55d506eb3c4a 100644 --- a/fs/gfs2/quota.h +++ b/fs/gfs2/quota.h @@ -57,5 +57,6 @@ static inline int gfs2_quota_lock_check(struct gfs2_inode *ip) extern const struct quotactl_ops gfs2_quotactl_ops; extern struct shrinker gfs2_qd_shrinker; extern struct list_lru gfs2_qd_lru; +extern void __init gfs2_quota_hash_init(void); #endif /* __QUOTA_DOT_H__ */ |