From 2e865c360a9d4086598898ae4495ad582876327c Mon Sep 17 00:00:00 2001 From: Jonas Jelten Date: Mon, 15 Mar 2021 23:21:07 +0100 Subject: [PATCH] os/bluestore: strip trailing slash for directory listings Calls to BlueRocksEnv::GetChildren may contain a trailing / in the queried directory, which is stripped away with this patch. If it's not stripped, the directory entry is not found in BlueFS: ``` 10 bluefs readdir db/ 20 bluefs readdir dir db/ not found 3 rocksdb: [db/db_impl/db_impl_open.cc:1785] Persisting Option File error: OK ``` Fixes: https://tracker.ceph.com/issues/49815 Signed-off-by: Jonas Jelten (cherry picked from commit 3aa31813980d22719277a04797df48310acdff66) --- src/os/bluestore/BlueFS.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index 06a5cd714e4..2aa8628e834 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -3719,6 +3719,10 @@ int BlueFS::unlock_file(FileLock *fl) int BlueFS::readdir(std::string_view dirname, vector *ls) { + // dirname may contain a trailing / + if (!dirname.empty() && dirname.back() == '/') { + dirname.remove_suffix(1); + } std::lock_guard l(lock); dout(10) << __func__ << " " << dirname << dendl; if (dirname.empty()) { -- 2.47.3