struct list_head *next;
ENTRY;
+ CDEBUG(D_NET, "got %s event %d\n",
+ (ev->type == PTL_EVENT_SENT) ? "SENT" :
+ (ev->type == PTL_EVENT_ACK) ? "ACK" : "UNEXPECTED", ev->type);
+
+ LASSERT (ev->type == PTL_EVENT_SENT ||
+ ev->type == PTL_EVENT_ACK);
+
+ LASSERT (atomic_read (&desc->bd_source_callback_count) > 0 &&
+ atomic_read (&desc->bd_source_callback_count) <= 2);
+
if (ev->mem_desc.niov != desc->bd_page_count)
{
int mdniov = ev->mem_desc.niov;
/* 1 fragment for each page always */
LASSERT (ev->mem_desc.niov == desc->bd_page_count);
- if (ev->type == PTL_EVENT_SENT) {
- CDEBUG(D_NET, "got SENT event\n");
- } else if (ev->type == PTL_EVENT_ACK) {
- CDEBUG(D_NET, "got ACK event\n");
-
+ if (atomic_dec_and_test (&desc->bd_source_callback_count))
+ {
list_for_each_safe(tmp, next, &desc->bd_page_list) {
bulk = list_entry(tmp, struct ptlrpc_bulk_page,
bp_link);
-
+
if (bulk->bp_cb != NULL)
bulk->bp_cb(bulk);
}
wake_up(&desc->bd_waitq);
if (desc->bd_cb != NULL)
desc->bd_cb(desc, desc->bd_cb_data);
- } else {
- CERROR("Unexpected event type!\n");
- LBUG();
}
- RETURN(1);
+ RETURN(0);
}
static int bulk_sink_callback(ptl_event_t *ev)