diff options
author | Sage Weil <sage@inktank.com> | 2013-10-15 15:39:04 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-10-15 15:39:04 -0700 |
commit | 270123124430f01957a5636db89a448c7d8b74d6 (patch) | |
tree | e3cc10143e17dcf97d4c6564b1c7df43facc234d | |
parent | 3b97b4166a8bde41cb48db9602d9ff4df0f5cafb (diff) | |
download | ceph-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.h | 4 |
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; } |