struct list_head *next;
ENTRY;
- if (ev->mem_desc.niov != desc->bd_page_count)
- {
- int mdniov = ev->mem_desc.niov;
- struct ptlrpc_bulk_desc desc_snapshot;
-
- desc_snapshot = *desc;
-
- printk ("ev(%p)->mem_desc.niov %d != desc(%p)->bd_page_count %d, snapshot %p\n",
- ev, mdniov, desc, desc_snapshot.bd_page_count, &desc_snapshot);
- LBUG();
- }
+ 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);
+
/* 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);
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)