crimson/osd/osd_operations/client_request_common: `PeeringState::needs_recovery()`
may fail if the object is under backfill
Meanwhile, set the correct version for backfill:
From Classic:
```
if (is_degraded_or_backfilling_object(head)) {
if (can_backoff && g_conf()->osd_backoff_on_degraded) {
add_backoff(session, head, head);
maybe_kick_recovery(head);
}
```
```
void PrimaryLogPG::maybe_kick_recovery(
const hobject_t &soid)
{
eversion_t v;
bool work_started = false;
if (!recovery_state.get_missing_loc().needs_recovery(soid, &v))
return;
```
Fixes: https://tracker.ceph.com/issues/66216
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
Signed-off-by: Matan Breizman <mbreizma@redhat.com>
(cherry picked from commit
5716f03eac0a9255fb2e8c402735453c2f72b56a)