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: v13.2.5~24^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F26292%2Fhead;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) --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 97c3c9933813f..5df3d2cbfd91b 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -2025,7 +2025,7 @@ 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 (!(mds->is_active() || mds->is_stopping())) return; @@ -2034,7 +2034,9 @@ void MDCache::broadcast_quota_to_client(CInode *in, client_t exclude_ct) 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) diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h index b8633c4945fe1..31b7761b8eb90 100644 --- a/src/mds/MDCache.h +++ b/src/mds/MDCache.h @@ -402,7 +402,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 4121083863514..66807a286c668 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -5057,7 +5057,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);