]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: check dir fragment to split dir if mkdir makes it oversized. 27480/head
authorchenerqi <chenerqi@chenerqideMacBook-Pro.local>
Wed, 10 Apr 2019 05:56:29 +0000 (13:56 +0800)
committerchenerqi <chenerqi@chenerqideMacBook-Pro.local>
Thu, 18 Apr 2019 02:19:54 +0000 (10:19 +0800)
In handle_client_mkdir we hit_dir (via hit_inode) in mkdir finish callback, but by then we might have overshot the split size (multiple mkdir in flight), so check dir fragment for an early chance to split the dir if mkdir makes it oversized.

Fixes: https://tracker.ceph.com/issues/39166
Signed-off-by: Erqi Chen <bestchenerqi@126.com>
src/mds/Server.cc

index 18b46e1fdf4217109d5aae94dcdb91a255ec4084..54d6d015560db42334445ee90fd17f877e68034d 100644 (file)
@@ -5832,6 +5832,11 @@ void Server::handle_client_mkdir(MDRequestRef& mdr)
   le->metablob.add_opened_ino(newi->ino());
 
   journal_and_reply(mdr, newi, dn, le, new C_MDS_mknod_finish(this, mdr, dn, newi));
+
+  // We hit_dir (via hit_inode) in our finish callback, but by then we might
+  // have overshot the split size (multiple mkdir in flight), so here is
+  // an early chance to split the dir if this mkdir makes it oversized.
+  mds->balancer->maybe_fragment(dir, false);
 }