return r;
}
- if (!is_mdlog || pointer_present) {
+ if (is_mdlog && !pointer_present) {
+ derr << "Aborting journal scan" << dendl;
+ return 0;
+ } else {
r = scan_header();
if (r < 0) {
return r;
}
}
- if (full && header_present) {
- r = scan_events(cb);
- if (r < 0) {
- return r;
+ // NOTE:: ensure the caller checks for header validity before scanning events
+ if (full) {
+ if (!header_valid) {
+ derr << "Aborting journal scan" << dendl;
+ return 0;
+ } else {
+ r = scan_events(cb);
+ if (r < 0) {
+ return r;
+ }
}
}
std::set<inodeno_t> consumed_inos;
progress_tracker->set_operation_name("Processing events");
- // decode the journal first to check if the header is valid
+ // decode the journal first to check if the journal pointer and header are valid
r = js.scan(false);
if (r < 0) {
derr << "Failed to scan journal (" << cpp_strerror(r) << ")" << dendl;
return r;
}
- if (!js.header_present || !js.header_valid) {
- derr << "Journal header is not present or is damaged, cannot recover dentries" << dendl;
- return -EIO;
+ if (!js.pointer_present) {
+ derr << "Cannot recover dentries: journal pointer is missing" << dendl;
+ return 0;
+ }
+ // if header_valid is false, header_present is also false
+ if (!js.header_valid) {
+ derr << "Cannot recover dentries: journal header is missing or invalid" << dendl;
+ return 0;
}
// start the progress tracker with the diff b/w write and expire position