continue;
}
- cl_page_list_move(qout, qin, page);
spin_lock(&oap->oap_lock);
oap->oap_async_flags = ASYNC_URGENT|ASYNC_READY;
oap->oap_async_flags |= ASYNC_COUNT_STABLE;
osc_page_submit(env, opg, crt, brw_flags);
list_add_tail(&oap->oap_pending_item, &list);
+
+ if (page->cp_sync_io != NULL)
+ cl_page_list_move(qout, qin, page);
+ else /* async IO */
+ cl_page_list_del(env, qin, page);
+
if (++queued == max_pages) {
queued = 0;
result = osc_queue_sync_pages(env, osc, &list, cmd,
int result = 0;
if (cbargs->opc_rpc_sent) {
- wait_for_completion(&cbargs->opc_sync);
- result = io->ci_result = cbargs->opc_rc;
+ result = wait_for_completion_killable(&cbargs->opc_sync);
+ if (result == 0)
+ result = cbargs->opc_rc;
+ io->ci_result = result;
}
if (result == 0) {
if (oio->oi_lockless) {
struct osc_io *oio = cl2osc_io(env, slice);
struct osc_async_cbargs *cbargs = &oio->oi_cbarg;
- wait_for_completion(&cbargs->opc_sync);
+ result = wait_for_completion_killable(&cbargs->opc_sync);
if (result == 0)
result = cbargs->opc_rc;
}