]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore/bluestore_tool: compare retval stat() with -1
authorKefu Chai <kchai@redhat.com>
Thu, 20 May 2021 05:55:13 +0000 (13:55 +0800)
committerIgor Fedotov <ifed@suse.com>
Fri, 16 Jul 2021 12:54:19 +0000 (15:54 +0300)
before this change, stat() is always called to check if the
file specified by --dev-target exists even if this option is not
specified. also, we compare the retval of stat() with ENOENT, while
state() returns -1 on error.

after this change, stat() is called only if --dev-target is specified,
and we compare the retval of stat() with -1 and 0 only, so if
--dev-target option is not specified, the tool still hehaves.

this change addresses a regression introduced by
94a91f54fe30a4dd113fbc1b02bc3f3d52c82a92

Fixes: https://tracker.ceph.com/issues/50891
Signed-off-by: Kefu Chai <kchai@redhat.com>
(cherry picked from commit d4c65a368c9cf35e01604fc3321f867cbe3e4109)

src/os/bluestore/bluestore_tool.cc

index f38209504ade3f85403d62899188a7cc827068cc..2b671484039045546ce6368a342265c9cec1b423 100644 (file)
@@ -699,9 +699,12 @@ int main(int argc, char **argv)
 
     // Attach either DB or WAL volume, create if needed
     struct stat st;
-    int r = ::stat(rlpath, &st);
+    int r = -1;
+    if (rlpath != nullptr) {
+      r = ::stat(rlpath, &st);
+    }
     // check if we need additional size specification
-    if (r == ENOENT || (r == 0 && S_ISREG(st.st_mode) && st.st_size == 0)) {
+    if (r == -1 || (r == 0 && S_ISREG(st.st_mode) && st.st_size == 0)) {
       r = 0;
       if (need_db && cct->_conf->bluestore_block_db_size == 0) {
        cerr << "Might need DB size specification, "