- target_start_recovery_thread() starts a thread and must wait for
completion because that thread sets recovering flag. but routine
kernel_thread() returns pid > 0 in successful case, while the
target_start_recover_thread() expects 0. so, first routine
target_start_recovery_thread() returns immediately and chain
mds_postsetup() -> mds_dt_connect() is called with obd_recovering==0.
so, mds_postrecov_common() is called and it calls mds_cleanup_orphans()
init_completion(&trd->trd_finishing);
trd->trd_recovery_handler = handler;
- if (kernel_thread(target_recovery_thread, obd, 0) == 0)
+ if (kernel_thread(target_recovery_thread, obd, 0) > 0)
wait_for_completion(&trd->trd_starting);
else
rc = -ECHILD;