summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-10-15 15:39:04 -0700
committerSage Weil <sage@inktank.com>2013-10-15 15:39:04 -0700
commit270123124430f01957a5636db89a448c7d8b74d6 (patch)
treee3cc10143e17dcf97d4c6564b1c7df43facc234d
parent3b97b4166a8bde41cb48db9602d9ff4df0f5cafb (diff)
downloadceph-270123124430f01957a5636db89a448c7d8b74d6.tar.gz
os/LevelDBStore: handle deletion race when checking store size
This fixes the fix in 64774e5792f136df2bc78db686440fc2f3a7643f which mixed up the return value and errno. Fixes: #6550 Signed-off-by: Sage Weil <sage@inktank.com> Reviewed-by: Joao Eduardo Luis <joao.luis@inktank.com>
-rw-r--r--src/os/LevelDBStore.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/os/LevelDBStore.h b/src/os/LevelDBStore.h
index 89718ce1987..bc5b612a97a 100644
--- a/src/os/LevelDBStore.h
+++ b/src/os/LevelDBStore.h
@@ -329,13 +329,15 @@ public:
string fpath = path + '/' + n;
struct stat s;
int err = stat(fpath.c_str(), &s);
+ if (err < 0)
+ err = -errno;
// we may race against leveldb while reading files; this should only
// happen when those files are being updated, data is being shuffled
// and files get removed, in which case there's not much of a problem
// as we'll get to them next time around.
if ((err < 0) && (err != -ENOENT)) {
lderr(cct) << __func__ << " error obtaining stats for " << fpath
- << ": " << cpp_strerror(errno) << dendl;
+ << ": " << cpp_strerror(err) << dendl;
goto err;
}