diff options
author | Luis Henriques <lhenriques@suse.com> | 2018-01-12 17:19:29 +0000 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2018-04-02 11:17:53 +0200 |
commit | d557c48db730eaab6b75d4af332c135309b7a6a4 (patch) | |
tree | 74b28856b9052a36b588d9baf77b5781f8479c97 /fs/ceph/super.h | |
parent | e3161f17d92699ce6ca3b7988131b10ad4035cf9 (diff) | |
download | linux-d557c48db730eaab6b75d4af332c135309b7a6a4.tar.bz2 |
ceph: quota: add counter for snaprealms with quota
By keeping a counter with the number of snaprealms that have quota set
allows to optimize the functions that need to walk throught the realms
hierarchy looking for quotas. Thus, if this counter is zero it's safe to
assume that there are no realms with quota.
Signed-off-by: Luis Henriques <lhenriques@suse.com>
Reviewed-by: "Yan, Zheng" <zyan@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Diffstat (limited to 'fs/ceph/super.h')
-rw-r--r-- | fs/ceph/super.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/fs/ceph/super.h b/fs/ceph/super.h index 8217abf46182..1321a6749953 100644 --- a/fs/ceph/super.h +++ b/fs/ceph/super.h @@ -1075,6 +1075,26 @@ extern int ceph_fs_debugfs_init(struct ceph_fs_client *client); extern void ceph_fs_debugfs_cleanup(struct ceph_fs_client *client); /* quota.c */ +static inline bool __ceph_has_any_quota(struct ceph_inode_info *ci) +{ + return ci->i_max_files || ci->i_max_bytes; +} + +extern void ceph_adjust_quota_realms_count(struct inode *inode, bool inc); + +static inline void __ceph_update_quota(struct ceph_inode_info *ci, + u64 max_bytes, u64 max_files) +{ + bool had_quota, has_quota; + had_quota = __ceph_has_any_quota(ci); + ci->i_max_bytes = max_bytes; + ci->i_max_files = max_files; + has_quota = __ceph_has_any_quota(ci); + + if (had_quota != has_quota) + ceph_adjust_quota_realms_count(&ci->vfs_inode, has_quota); +} + extern void ceph_handle_quota(struct ceph_mds_client *mdsc, struct ceph_mds_session *session, struct ceph_msg *msg); |