list_for_each_entry(st, &tmt->tmt_sub_thandle_list, st_sub_list) {
struct sub_thandle_cookie *stc;
- CDEBUG(mask, "st %p obd %s committed %d stopped %d sub_th %p\n",
+ CDEBUG(mask, "st %p obd %s committed %d started %d stopped %d "
+ "result %d sub_th %p\n",
st, st->st_dt->dd_lu_dev.ld_obd->obd_name,
- st->st_committed, st->st_stopped, st->st_sub_th);
+ st->st_committed, st->st_started, st->st_stopped,
+ st->st_result, st->st_sub_th);
list_for_each_entry(stc, &st->st_cookie_list, stc_list) {
CDEBUG(mask, " cookie "DFID".%u\n",
struct top_multiple_thandle *tmt = cb->dcb_data;
ENTRY;
+ spin_lock(&tmt->tmt_sub_lock);
list_for_each_entry(st, &tmt->tmt_sub_thandle_list, st_sub_list) {
if (st->st_stopped)
continue;
break;
}
}
+ spin_unlock(&tmt->tmt_sub_lock);
wake_up(&tmt->tmt_stop_waitq);
RETURN_EXIT;
sub_trans_commit_cb_internal(tmt,
master_st->st_sub_th, rc);
if (rc < 0) {
+ CERROR("%s: stop trans failed: rc = %d\n",
+ master_dev->dd_lu_dev.ld_obd->obd_name, rc);
th->th_result = rc;
GOTO(stop_other_trans, rc);
} else if (tur != NULL && tur->tur_update_records != NULL) {
rc = sub_updates_write(env, lur, st);
if (rc < 0) {
+ CERROR("%s: write updates failed: rc = %d\n",
+ st->st_dt->dd_lu_dev.ld_obd->obd_name,
+ rc);
th->th_result = rc;
break;
}
st->st_sub_th->th_result = th->th_result;
rc = dt_trans_stop(env, st->st_sub_th->th_dev,
st->st_sub_th);
- if (unlikely(rc < 0 && th->th_result == 0))
- th->th_result = rc;
+ if (rc < 0) {
+ CERROR("%s: stop trans failed: rc = %d\n",
+ st->st_dt->dd_lu_dev.ld_obd->obd_name, rc);
+ if (th->th_result == 0)
+ th->th_result = rc;
+ }
}
rc = top_trans_wait_result(top_th);