static void recover_object_main(struct work *work) { struct recovery_work *rw = container_of(work, struct recovery_work, work); if (next_rw) { run_next_rw(rw); return; } if (rw->stop) { /* * Stop this recovery process and wait for epoch to be * lifted and flush wait_obj queue to requeue those * requests */ flush_wait_obj_requests(); sd_dprintf("recovery is stopped"); return; } resume_wait_obj_requests(rw->oids[rw->done++]); if (rw->done < rw->count) { recover_next_object(rw); return; } finish_recovery(rw); }
static void recover_object_main(struct work *work) { struct recovery_work *rw = container_of(work, struct recovery_work, work); if (next_rw) { run_next_rw(rw); return; } if (rw->stop){ /* * Stop this recovery process and wait for epoch to be * lifted and flush wait_obj queue to requeue those * requests */ flush_wait_obj_requests(); dprintf("recovery is stopped\n"); return; } resume_wait_obj_requests(rw->oids[rw->done++]); if (rw->done < rw->count) { if (rw->nr_prio_oids) finish_schedule_oids(rw); /* Try recover next object */ queue_work(sys->recovery_wqueue, &rw->work); return; } finish_recovery(rw); }