]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore/BlueFS: readdir list dirs, too
authorSage Weil <sage@redhat.com>
Thu, 10 Dec 2015 21:32:24 +0000 (16:32 -0500)
committerSage Weil <sage@redhat.com>
Fri, 1 Jan 2016 18:06:54 +0000 (13:06 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueFS.cc

index 2a0d822ba6e4557c5704b1ee61c8032863a25344..a57b07303f7be10faa1a40326d3f9c88d25f07e1 100644 (file)
@@ -1174,15 +1174,24 @@ int BlueFS::readdir(const string& dirname, vector<string> *ls)
 {
   Mutex::Locker l(lock);
   dout(10) << __func__ << " " << dirname << dendl;
-  map<string,Dir*>::iterator p = dir_map.find(dirname);
-  if (p == dir_map.end()) {
-    dout(20) << __func__ << " dir " << dirname << " not found" << dendl;
-    return -ENOENT;
-  }
-  Dir *dir = p->second;
-  ls->reserve(dir->file_map.size() + 2);
-  for (auto q : dir->file_map) {
-    ls->push_back(q.first);
+  if (dirname.size() == 0) {
+    // list dirs
+    ls->reserve(dir_map.size() + 2);
+    for (auto q : dir_map) {
+      ls->push_back(q.first);
+    }
+  } else {
+    // list files in dir
+    map<string,Dir*>::iterator p = dir_map.find(dirname);
+    if (p == dir_map.end()) {
+      dout(20) << __func__ << " dir " << dirname << " not found" << dendl;
+      return -ENOENT;
+    }
+    Dir *dir = p->second;
+    ls->reserve(dir->file_map.size() + 2);
+    for (auto q : dir->file_map) {
+      ls->push_back(q.first);
+    }
   }
   ls->push_back(".");
   ls->push_back("..");