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)
// 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, "