Skip to content

Commit

Permalink
mds: broadcast quota message to client when disable quota
Browse files Browse the repository at this point in the history
When disable quota by setting quota.max_files or quota.max_bytes
to zero, client does not receive the quota broadcast message.

Signed-off-by: Junhui Tang <tangjunhui@sangfor.com.cn>
Fixes: https://tracker.ceph.com/issues/38054
(cherry picked from commit 061ace2)

Conflicts:
	src/mds/MDCache.cc : Resolved in broadcast_quota_to_client
  • Loading branch information
Junhui Tang authored and Prashant D committed Feb 6, 2019
1 parent f66113b commit b2411c0
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 5 deletions.
7 changes: 4 additions & 3 deletions src/mds/MDCache.cc
Expand Up @@ -2015,14 +2015,15 @@ void MDCache::project_rstat_frag_to_inode(nest_info_t& rstat, nest_info_t& accou
}
}

void MDCache::broadcast_quota_to_client(CInode *in, client_t exclude_ct)
void MDCache::broadcast_quota_to_client(CInode *in, client_t exclude_ct, bool quota_change)
{
if (!in->is_auth() || in->is_frozen())
return;

auto i = in->get_projected_inode();

if (!i->quota.is_enable())

if (!i->quota.is_enable() &&
!quota_change)
return;

for (map<client_t,Capability*>::iterator it = in->client_caps.begin();
Expand Down
2 changes: 1 addition & 1 deletion src/mds/MDCache.h
Expand Up @@ -400,7 +400,7 @@ class MDCache {
void project_rstat_frag_to_inode(nest_info_t& rstat, nest_info_t& accounted_rstat,
snapid_t ofirst, snapid_t last,
CInode *pin, bool cow_head);
void broadcast_quota_to_client(CInode *in, client_t exclude_ct = -1);
void broadcast_quota_to_client(CInode *in, client_t exclude_ct = -1, bool quota_change = false);
void predirty_journal_parents(MutationRef mut, EMetaBlob *blob,
CInode *in, CDir *parent,
int flags, int linkunlink=0,
Expand Down
2 changes: 1 addition & 1 deletion src/mds/Server.cc
Expand Up @@ -4827,7 +4827,7 @@ void Server::handle_set_vxattr(MDRequestRef& mdr, CInode *cur,
pip = &pi.inode;

client_t exclude_ct = mdr->get_client();
mdcache->broadcast_quota_to_client(cur, exclude_ct);
mdcache->broadcast_quota_to_client(cur, exclude_ct, true);
} else if (name.find("ceph.dir.pin") == 0) {
if (!cur->is_dir() || cur->is_root()) {
respond_to_request(mdr, -EINVAL);
Expand Down

0 comments on commit b2411c0

Please sign in to comment.