--- /usr/src/linux-2.4/drivers/ieee1394/sbp2.c 2003-08-25 08:44:42.000000000 -0300 +++ drivers/ieee1394/sbp2.c 2003-10-20 22:16:17.000000000 -0200 @@ -372,8 +372,10 @@ static int sbp2util_down_timeout(atomic_ } /* Free's an allocated packet */ -static void sbp2_free_packet(struct hpsb_packet *packet) +static void sbp2_free_packet(void *packet_) { + struct hpsb_packet *packet = packet_; + hpsb_free_tlabel(packet); free_hpsb_packet(packet); } @@ -389,7 +391,8 @@ static struct hpsb_packet * sbp2util_allocate_write_packet(struct sbp2scsi_host_info *hi, struct node_entry *ne, u64 addr, size_t data_size, - quadlet_t *data) + quadlet_t *data, + int keep) { struct hpsb_packet *packet; @@ -399,8 +402,10 @@ sbp2util_allocate_write_packet(struct sb if (!packet) return NULL; - hpsb_set_packet_complete_task(packet, (void (*)(void*))sbp2_free_packet, - packet); + if (!keep) + hpsb_set_packet_complete_task(packet, + sbp2_free_packet, + packet); hpsb_node_fill_packet(ne, packet); @@ -1763,7 +1768,7 @@ static int sbp2_agent_reset(struct scsi_ packet = sbp2util_allocate_write_packet(hi, scsi_id->ne, scsi_id->sbp2_command_block_agent_addr + SBP2_AGENT_RESET_OFFSET, - 4, &data); + 4, &data, wait); if (!packet) { SBP2_ERR("sbp2util_allocate_write_packet failed"); @@ -1779,6 +1784,7 @@ static int sbp2_agent_reset(struct scsi_ if (wait) { down(&packet->state_change); down(&packet->state_change); + sbp2_free_packet(packet); } /* @@ -2073,7 +2079,7 @@ static int sbp2_link_orb_command(struct packet = sbp2util_allocate_write_packet(hi, scsi_id->ne, scsi_id->sbp2_command_block_agent_addr + - SBP2_ORB_POINTER_OFFSET, 8, NULL); + SBP2_ORB_POINTER_OFFSET, 8, NULL, 0); if (!packet) { SBP2_ERR("sbp2util_allocate_write_packet failed"); @@ -2123,7 +2129,7 @@ static int sbp2_link_orb_command(struct packet = sbp2util_allocate_write_packet(hi, scsi_id->ne, scsi_id->sbp2_command_block_agent_addr + - SBP2_DOORBELL_OFFSET, 4, &data); + SBP2_DOORBELL_OFFSET, 4, &data, 0); if (!packet) { SBP2_ERR("sbp2util_allocate_write_packet failed");