c->io = this;
::ObjectOperation op;
- op.scrub_ls(start_after, max_to_get, objects, interval, nullptr);
+ op.scrub_ls(start_after, max_to_get, objects, interval, &c->rval);
object_locator_t oloc{poolid, pg.ps()};
Objecter::Op *o = objecter->prepare_pg_read_op(
oloc.hash, oloc, op, nullptr, CEPH_OSD_FLAG_PGOP, oncomplete,
c->io = this;
::ObjectOperation op;
- op.scrub_ls(start_after, max_to_get, snapsets, interval, nullptr);
+ op.scrub_ls(start_after, max_to_get, snapsets, interval, &c->rval);
object_locator_t oloc{poolid, pg.ps()};
Objecter::Op *o = objecter->prepare_pg_read_op(
oloc.hash, oloc, op, nullptr, CEPH_OSD_FLAG_PGOP, oncomplete,
void librados::IoCtxImpl::C_aio_Complete::finish(int r)
{
c->lock.Lock();
- c->rval = r;
+ // Leave an existing rval unless r != 0
+ if (r)
+ c->rval = r; // This clears the error set in C_ObjectOperation_scrub_ls::finish()
c->complete = true;
c->cond.Signal();
cerr << "interval#" << interval << " expired." << std::endl;
else if (ret == -ENOENT)
cerr << "No scrub information available for pg " << pg << std::endl;
- else
- cerr << "Unknown error " << cpp_strerror(ret) << std::endl;
break;
}
// It must be the same interval every time. EAGAIN would