]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mds: broadcast quota message to client when disable quota
authorJunhui Tang <tangjunhui@sangfor.com.cn>
Thu, 24 Jan 2019 08:33:58 +0000 (16:33 +0800)
committerJunhui Tang <tangjunhui@sangfor.com.cn>
Sat, 26 Jan 2019 07:20:31 +0000 (15:20 +0800)
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
src/mds/MDCache.cc
src/mds/MDCache.h
src/mds/Server.cc

index 41c652cfea56bf24963414ea6d8be6549c869a53..81ec599d88ef479d2aa22a4db88e799369415538 100644 (file)
@@ -1990,7 +1990,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;
@@ -1999,7 +1999,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)
index 1bbefffdcb49c0733504ebf75238b175822fa058..cae2db87d1e829e32e39cdabb986349315824426 100644 (file)
@@ -399,7 +399,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,
index a26bdd88380797ae3b1077568b544fb431701926..137a97db8e468817c992e0fe68f3ce2db9391252 100644 (file)
@@ -5194,7 +5194,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);