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;
*/
static int top_trans_wait_result(struct top_thandle *top_th)
{
- struct l_wait_info lwi = {0};
-
- l_wait_event(top_th->tt_multiple_thandle->tmt_stop_waitq,
- top_trans_is_stopped(top_th), &lwi);
+ wait_event_idle(top_th->tt_multiple_thandle->tmt_stop_waitq,
+ top_trans_is_stopped(top_th));
RETURN(top_th->tt_super.th_result);
}
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);
struct target_distribute_txn_data *tdtd = _arg;
struct lu_target *lut = tdtd->tdtd_lut;
struct ptlrpc_thread *thread = &lut->lut_tdtd_commit_thread;
- struct l_wait_info lwi = { 0 };
struct lu_env env;
- struct list_head list;
+ LIST_HEAD(list);
int rc;
struct top_multiple_thandle *tmt;
struct top_multiple_thandle *tmp;
thread->t_flags = SVC_RUNNING;
spin_unlock(&tdtd->tdtd_batchid_lock);
wake_up(&thread->t_ctl_waitq);
- INIT_LIST_HEAD(&list);
CDEBUG(D_HA, "%s: start commit thread committed batchid %llu\n",
tdtd->tdtd_lut->lut_obd->obd_name,
top_multiple_thandle_put(tmt);
}
- l_wait_event(tdtd->tdtd_commit_thread_waitq,
- !distribute_txn_commit_thread_running(lut) ||
- committed < tdtd->tdtd_committed_batchid ||
- tdtd_ready_for_cancel_log(tdtd), &lwi);
+ wait_event_idle(tdtd->tdtd_commit_thread_waitq,
+ !distribute_txn_commit_thread_running(lut) ||
+ committed < tdtd->tdtd_committed_batchid ||
+ tdtd_ready_for_cancel_log(tdtd));
};
- l_wait_event(tdtd->tdtd_commit_thread_waitq,
- atomic_read(&tdtd->tdtd_refcount) == 0, &lwi);
+ wait_event_idle(tdtd->tdtd_commit_thread_waitq,
+ atomic_read(&tdtd->tdtd_refcount) == 0);
spin_lock(&tdtd->tdtd_batchid_lock);
list_for_each_entry_safe(tmt, tmp, &tdtd->tdtd_list,
__u32 index)
{
struct task_struct *task;
- struct l_wait_info lwi = { 0 };
int rc;
ENTRY;
if (IS_ERR(task))
RETURN(PTR_ERR(task));
- l_wait_event(lut->lut_tdtd_commit_thread.t_ctl_waitq,
- distribute_txn_commit_thread_running(lut) ||
- distribute_txn_commit_thread_stopped(lut), &lwi);
+ wait_event_idle(lut->lut_tdtd_commit_thread.t_ctl_waitq,
+ distribute_txn_commit_thread_running(lut) ||
+ distribute_txn_commit_thread_stopped(lut));
RETURN(0);
}
EXPORT_SYMBOL(distribute_txn_init);