From: Sage Weil Date: Thu, 10 Dec 2015 21:32:24 +0000 (-0500) Subject: os/bluestore/BlueFS: readdir list dirs, too X-Git-Tag: v10.0.3~154^2~166 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=98485dee05145b4d17ff416eb0656bf1ba911f9e;p=ceph.git os/bluestore/BlueFS: readdir list dirs, too Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index 2a0d822ba6e4..a57b07303f7b 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -1174,15 +1174,24 @@ int BlueFS::readdir(const string& dirname, vector *ls) { Mutex::Locker l(lock); dout(10) << __func__ << " " << dirname << dendl; - map::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::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("..");