ceph_assert(op->session == NULL);
OSDSession *s = NULL;
- bool check_for_latest_map = _calc_target(&op->target, nullptr)
- == RECALC_OP_TARGET_POOL_DNE;
+ bool check_for_latest_map = false;
+ int r = _calc_target(&op->target, nullptr);
+ switch(r) {
+ case RECALC_OP_TARGET_POOL_DNE:
+ check_for_latest_map = true;
+ break;
+ case RECALC_OP_TARGET_POOL_EIO:
+ if (op->has_completion()) {
+ op->complete(osdc_errc::pool_eio, -EIO);
+ }
+ return;
+ }
// Try to get a session, including a retry if we need to take write lock
- int r = _get_session(op->target.osd, &s, sul);
+ r = _get_session(op->target.osd, &s, sul);
if (r == -EAGAIN ||
(check_for_latest_map && sul.owns_lock_shared()) ||
cct->_conf->objecter_debug_inject_relock_delay) {
t->osd = -1;
return RECALC_OP_TARGET_POOL_DNE;
}
+
+ if (pi->has_flag(pg_pool_t::FLAG_EIO)) {
+ return RECALC_OP_TARGET_POOL_EIO;
+ }
+
ldout(cct,30) << __func__ << " base pi " << pi
<< " pg_num " << pi->get_pg_num() << dendl;
RECALC_OP_TARGET_POOL_DNE,
RECALC_OP_TARGET_OSD_DNE,
RECALC_OP_TARGET_OSD_DOWN,
+ RECALC_OP_TARGET_POOL_EIO,
};
bool _osdmap_full_flag() const;
bool _osdmap_has_pool_full() const;
private:
void _check_op_pool_dne(Op *op, std::unique_lock<std::shared_mutex> *sl);
+ void _check_op_pool_eio(Op *op, std::unique_lock<std::shared_mutex> *sl);
void _send_op_map_check(Op *op);
void _op_cancel_map_check(Op *op);
void _check_linger_pool_dne(LingerOp *op, bool *need_unregister);
+ void _check_linger_pool_eio(LingerOp *op);
void _send_linger_map_check(LingerOp *op);
void _linger_cancel_map_check(LingerOp *op);
void _check_command_map_dne(CommandOp *op);
case osdc_errc::timed_out:
return "Operation timed out";
+
+ case osdc_errc::pool_eio:
+ return "Pool EIO flag set";
}
return "Unknown error";
return ceph::errc::does_not_exist;
case osdc_errc::timed_out:
return bs::errc::timed_out;
+ case osdc_errc::pool_eio:
+ return bs::errc::io_error;
}
return { ev, *this };
return -ENOENT;
case osdc_errc::timed_out:
return -ETIMEDOUT;
+ case osdc_errc::pool_eio:
+ return -EIO;
}
return -EDOM;
}
not_supported,
snapshot_exists,
snapshot_dne,
- timed_out
+ timed_out,
+ pool_eio
};
namespace boost::system {