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
061ace2eb7c08d271db4d5d08ffa91ae832715f5)
}
}
-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 (!(mds->is_active() || mds->is_stopping()))
return;
return;
auto i = in->get_projected_inode();
- if (!i->quota.is_enable())
+
+ if (!i->quota.is_enable() &&
+ !quota_change)
return;
// creaete snaprealm for quota inode (quota was set before mimic)
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,
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);