From: Junhui Tang Date: Thu, 24 Jan 2019 08:33:58 +0000 (+0800) Subject: mds: broadcast quota message to client when disable quota X-Git-Tag: v12.2.12~80^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b2411c0920f110c3c6db5724dca76a823511be6f;p=ceph.git mds: broadcast quota message to client when disable quota 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 Fixes: https://tracker.ceph.com/issues/38054 (cherry picked from commit 061ace2eb7c08d271db4d5d08ffa91ae832715f5) Conflicts: src/mds/MDCache.cc : Resolved in broadcast_quota_to_client --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index d7b40a3126f6..b66dd1d2346f 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -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::iterator it = in->client_caps.begin(); diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h index 49d8fc738c72..1024a71125d5 100644 --- a/src/mds/MDCache.h +++ b/src/mds/MDCache.h @@ -400,7 +400,7 @@ public: 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, diff --git a/src/mds/Server.cc b/src/mds/Server.cc index e3fe19aa321d..a5e72a7511bd 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -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);