/* fc_tm_done() - Task Managment response handler @seq: The sequence that the response is on @fp: The response frame  */
static void fc_tm_done(struct fc_seq *, struct fc_frame *, void *)
/* fc_tm_done() - Task Managment response handler @seq: The sequence that the response is on @fp: The response frame  */
static void fc_tm_done(struct fc_seq *, struct fc_frame *, void *)
{
	struct fc_fcp_pkt *fsp = arg;
	struct fc_frame_header *fh;
	if (IS_ERR(fp)) {
		return;
	}
	if (fc_fcp_lock_pkt(fsp))
		return;
	if (!fsp->seq_ptr || !fsp->wait_for_comp) {
		spin_unlock_bh(&fsp->scsi_pkt_lock);
		return;
	}
	fh = fc_frame_header_get(fp);
	if (fh->fh_type != FC_TYPE_BLS)
		fc_fcp_resp(fsp, fp);
	fsp->seq_ptr = NULL;
	fsp->lp->tt.exch_done(seq);
	fc_frame_free(fp);
	fc_fcp_unlock_pkt(fsp);
}