提交 e5f49c3b 编写于 作者: K Kristian Høgsberg 提交者: Stefan Richter

firewire: Sanitize send error codes.

Drop the negative errnos and use RCODEs for all error codes
in the complete transaction callback.
Signed-off-by: NKristian Høgsberg <krh@redhat.com>
Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
上级 93c4cceb
......@@ -376,7 +376,7 @@ at_context_setup_packet(struct at_context *ctx, struct list_head *list)
packet->payload_length,
DMA_TO_DEVICE);
if (packet->payload_bus == 0) {
complete_transmission(packet, -ENOMEM, list);
complete_transmission(packet, RCODE_SEND_ERROR, list);
return;
}
......@@ -438,7 +438,7 @@ at_context_setup_packet(struct at_context *ctx, struct list_head *list)
/* We dont return error codes from this function; all
* transmission errors are reported through the
* callback. */
complete_transmission(packet, -ESTALE, list);
complete_transmission(packet, RCODE_GENERATION, list);
}
}
......@@ -484,26 +484,26 @@ static void at_context_tasklet(unsigned long data)
switch (evt) {
case OHCI1394_evt_timeout:
/* Async response transmit timed out. */
complete_transmission(packet, -ETIMEDOUT, &list);
complete_transmission(packet, RCODE_CANCELLED, &list);
break;
case OHCI1394_evt_flushed:
/* The packet was flushed should give same
* error as when we try to use a stale
* generation count. */
complete_transmission(packet, -ESTALE, &list);
complete_transmission(packet,
RCODE_GENERATION, &list);
break;
case OHCI1394_evt_missing_ack:
/* This would be a higher level software
* error, it is using a valid (current)
* generation count, but the node is not on
* the bus. */
complete_transmission(packet, -ENODEV, &list);
/* Using a valid (current) generation count,
* but the node is not on the bus or not
* sending acks. */
complete_transmission(packet, RCODE_NO_ACK, &list);
break;
default:
complete_transmission(packet, -EIO, &list);
complete_transmission(packet, RCODE_SEND_ERROR, &list);
break;
}
} else
......
......@@ -93,15 +93,15 @@ transmit_complete_callback(struct fw_packet *packet,
close_transaction(t, card, RCODE_BUSY, NULL, 0);
break;
case ACK_DATA_ERROR:
close_transaction(t, card, RCODE_DATA_ERROR, NULL, 0);
break;
case ACK_TYPE_ERROR:
close_transaction(t, card, RCODE_SEND_ERROR, NULL, 0);
close_transaction(t, card, RCODE_TYPE_ERROR, NULL, 0);
break;
default:
/* FIXME: In this case, status is a negative errno,
* corresponding to an OHCI specific transmit error
* code. We should map that to an RCODE instead of
* just the generic RCODE_SEND_ERROR. */
close_transaction(t, card, RCODE_SEND_ERROR, NULL, 0);
/* In this case the ack is really a juju specific
* rcode, so just forward that to the callback. */
close_transaction(t, card, status, NULL, 0);
break;
}
}
......
......@@ -87,6 +87,8 @@
#define RCODE_SEND_ERROR 0x10
#define RCODE_CANCELLED 0x11
#define RCODE_BUSY 0x12
#define RCODE_GENERATION 0x13
#define RCODE_NO_ACK 0x14
#define RETRY_1 0x00
#define RETRY_X 0x01
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册