aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libfc/fc_fcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/libfc/fc_fcp.c')
-rw-r--r--drivers/scsi/libfc/fc_fcp.c103
1 files changed, 64 insertions, 39 deletions
diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c
index 17396c708b08..ec1f66c4a9d4 100644
--- a/drivers/scsi/libfc/fc_fcp.c
+++ b/drivers/scsi/libfc/fc_fcp.c
@@ -97,7 +97,7 @@ static void fc_fcp_resp(struct fc_fcp_pkt *, struct fc_frame *);
97static void fc_fcp_complete_locked(struct fc_fcp_pkt *); 97static void fc_fcp_complete_locked(struct fc_fcp_pkt *);
98static void fc_tm_done(struct fc_seq *, struct fc_frame *, void *); 98static void fc_tm_done(struct fc_seq *, struct fc_frame *, void *);
99static void fc_fcp_error(struct fc_fcp_pkt *, struct fc_frame *); 99static void fc_fcp_error(struct fc_fcp_pkt *, struct fc_frame *);
100static void fc_timeout_error(struct fc_fcp_pkt *); 100static void fc_fcp_recovery(struct fc_fcp_pkt *);
101static void fc_fcp_timeout(unsigned long); 101static void fc_fcp_timeout(unsigned long);
102static void fc_fcp_rec(struct fc_fcp_pkt *); 102static void fc_fcp_rec(struct fc_fcp_pkt *);
103static void fc_fcp_rec_error(struct fc_fcp_pkt *, struct fc_frame *); 103static void fc_fcp_rec_error(struct fc_fcp_pkt *, struct fc_frame *);
@@ -121,7 +121,7 @@ static void fc_fcp_srr_error(struct fc_fcp_pkt *, struct fc_frame *);
121#define FC_DATA_UNDRUN 7 121#define FC_DATA_UNDRUN 7
122#define FC_ERROR 8 122#define FC_ERROR 8
123#define FC_HRD_ERROR 9 123#define FC_HRD_ERROR 9
124#define FC_CMD_TIME_OUT 10 124#define FC_CMD_RECOVERY 10
125 125
126/* 126/*
127 * Error recovery timeout values. 127 * Error recovery timeout values.
@@ -446,9 +446,16 @@ static void fc_fcp_recv_data(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
446 len = fr_len(fp) - sizeof(*fh); 446 len = fr_len(fp) - sizeof(*fh);
447 buf = fc_frame_payload_get(fp, 0); 447 buf = fc_frame_payload_get(fp, 0);
448 448
449 /* if this I/O is ddped, update xfer len */ 449 /*
450 fc_fcp_ddp_done(fsp); 450 * if this I/O is ddped then clear it
451 451 * and initiate recovery since data
452 * frames are expected to be placed
453 * directly in that case.
454 */
455 if (fsp->xfer_ddp != FC_XID_UNKNOWN) {
456 fc_fcp_ddp_done(fsp);
457 goto err;
458 }
452 if (offset + len > fsp->data_len) { 459 if (offset + len > fsp->data_len) {
453 /* this should never happen */ 460 /* this should never happen */
454 if ((fr_flags(fp) & FCPHF_CRC_UNCHECKED) && 461 if ((fr_flags(fp) & FCPHF_CRC_UNCHECKED) &&
@@ -456,8 +463,7 @@ static void fc_fcp_recv_data(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
456 goto crc_err; 463 goto crc_err;
457 FC_FCP_DBG(fsp, "data received past end. len %zx offset %zx " 464 FC_FCP_DBG(fsp, "data received past end. len %zx offset %zx "
458 "data_len %x\n", len, offset, fsp->data_len); 465 "data_len %x\n", len, offset, fsp->data_len);
459 fc_fcp_retry_cmd(fsp); 466 goto err;
460 return;
461 } 467 }
462 if (offset != fsp->xfer_len) 468 if (offset != fsp->xfer_len)
463 fsp->state |= FC_SRB_DISCONTIG; 469 fsp->state |= FC_SRB_DISCONTIG;
@@ -478,13 +484,14 @@ static void fc_fcp_recv_data(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
478 484
479 if (~crc != le32_to_cpu(fr_crc(fp))) { 485 if (~crc != le32_to_cpu(fr_crc(fp))) {
480crc_err: 486crc_err:
481 stats = fc_lport_get_stats(lport); 487 stats = per_cpu_ptr(lport->dev_stats, get_cpu());
482 stats->ErrorFrames++; 488 stats->ErrorFrames++;
483 /* FIXME - per cpu count, not total count! */ 489 /* per cpu count, not total count, but OK for limit */
484 if (stats->InvalidCRCCount++ < 5) 490 if (stats->InvalidCRCCount++ < 5)
485 printk(KERN_WARNING "libfc: CRC error on data " 491 printk(KERN_WARNING "libfc: CRC error on data "
486 "frame for port (%6x)\n", 492 "frame for port (%6.6x)\n",
487 fc_host_port_id(lport->host)); 493 lport->port_id);
494 put_cpu();
488 /* 495 /*
489 * Assume the frame is total garbage. 496 * Assume the frame is total garbage.
490 * We may have copied it over the good part 497 * We may have copied it over the good part
@@ -493,7 +500,7 @@ crc_err:
493 * Otherwise, ignore it. 500 * Otherwise, ignore it.
494 */ 501 */
495 if (fsp->state & FC_SRB_DISCONTIG) 502 if (fsp->state & FC_SRB_DISCONTIG)
496 fc_fcp_retry_cmd(fsp); 503 goto err;
497 return; 504 return;
498 } 505 }
499 } 506 }
@@ -509,6 +516,9 @@ crc_err:
509 if (unlikely(fsp->state & FC_SRB_RCV_STATUS) && 516 if (unlikely(fsp->state & FC_SRB_RCV_STATUS) &&
510 fsp->xfer_len == fsp->data_len - fsp->scsi_resid) 517 fsp->xfer_len == fsp->data_len - fsp->scsi_resid)
511 fc_fcp_complete_locked(fsp); 518 fc_fcp_complete_locked(fsp);
519 return;
520err:
521 fc_fcp_recovery(fsp);
512} 522}
513 523
514/** 524/**
@@ -834,8 +844,7 @@ static void fc_fcp_resp(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
834 * exit here 844 * exit here
835 */ 845 */
836 return; 846 return;
837 } else 847 }
838 goto err;
839 } 848 }
840 if (flags & FCP_SNS_LEN_VAL) { 849 if (flags & FCP_SNS_LEN_VAL) {
841 snsl = ntohl(rp_ex->fr_sns_len); 850 snsl = ntohl(rp_ex->fr_sns_len);
@@ -885,7 +894,7 @@ static void fc_fcp_resp(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
885 return; 894 return;
886 } 895 }
887 fsp->status_code = FC_DATA_OVRRUN; 896 fsp->status_code = FC_DATA_OVRRUN;
888 FC_FCP_DBG(fsp, "tgt %6x xfer len %zx greater than expected, " 897 FC_FCP_DBG(fsp, "tgt %6.6x xfer len %zx greater than expected, "
889 "len %x, data len %x\n", 898 "len %x, data len %x\n",
890 fsp->rport->port_id, 899 fsp->rport->port_id,
891 fsp->xfer_len, expected_len, fsp->data_len); 900 fsp->xfer_len, expected_len, fsp->data_len);
@@ -1100,7 +1109,7 @@ static int fc_fcp_cmd_send(struct fc_lport *lport, struct fc_fcp_pkt *fsp,
1100 rpriv = rport->dd_data; 1109 rpriv = rport->dd_data;
1101 1110
1102 fc_fill_fc_hdr(fp, FC_RCTL_DD_UNSOL_CMD, rport->port_id, 1111 fc_fill_fc_hdr(fp, FC_RCTL_DD_UNSOL_CMD, rport->port_id,
1103 fc_host_port_id(rpriv->local_port->host), FC_TYPE_FCP, 1112 rpriv->local_port->port_id, FC_TYPE_FCP,
1104 FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0); 1113 FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0);
1105 1114
1106 seq = lport->tt.exch_seq_send(lport, fp, resp, fc_fcp_pkt_destroy, 1115 seq = lport->tt.exch_seq_send(lport, fp, resp, fc_fcp_pkt_destroy,
@@ -1341,7 +1350,7 @@ static void fc_fcp_timeout(unsigned long data)
1341 else if (fsp->state & FC_SRB_RCV_STATUS) 1350 else if (fsp->state & FC_SRB_RCV_STATUS)
1342 fc_fcp_complete_locked(fsp); 1351 fc_fcp_complete_locked(fsp);
1343 else 1352 else
1344 fc_timeout_error(fsp); 1353 fc_fcp_recovery(fsp);
1345 fsp->state &= ~FC_SRB_FCP_PROCESSING_TMO; 1354 fsp->state &= ~FC_SRB_FCP_PROCESSING_TMO;
1346unlock: 1355unlock:
1347 fc_fcp_unlock_pkt(fsp); 1356 fc_fcp_unlock_pkt(fsp);
@@ -1373,7 +1382,7 @@ static void fc_fcp_rec(struct fc_fcp_pkt *fsp)
1373 1382
1374 fr_seq(fp) = fsp->seq_ptr; 1383 fr_seq(fp) = fsp->seq_ptr;
1375 fc_fill_fc_hdr(fp, FC_RCTL_ELS_REQ, rport->port_id, 1384 fc_fill_fc_hdr(fp, FC_RCTL_ELS_REQ, rport->port_id,
1376 fc_host_port_id(rpriv->local_port->host), FC_TYPE_ELS, 1385 rpriv->local_port->port_id, FC_TYPE_ELS,
1377 FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0); 1386 FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0);
1378 if (lport->tt.elsct_send(lport, rport->port_id, fp, ELS_REC, 1387 if (lport->tt.elsct_send(lport, rport->port_id, fp, ELS_REC,
1379 fc_fcp_rec_resp, fsp, 1388 fc_fcp_rec_resp, fsp,
@@ -1385,7 +1394,7 @@ retry:
1385 if (fsp->recov_retry++ < FC_MAX_RECOV_RETRY) 1394 if (fsp->recov_retry++ < FC_MAX_RECOV_RETRY)
1386 fc_fcp_timer_set(fsp, FC_SCSI_REC_TOV); 1395 fc_fcp_timer_set(fsp, FC_SCSI_REC_TOV);
1387 else 1396 else
1388 fc_timeout_error(fsp); 1397 fc_fcp_recovery(fsp);
1389} 1398}
1390 1399
1391/** 1400/**
@@ -1454,7 +1463,7 @@ static void fc_fcp_rec_resp(struct fc_seq *seq, struct fc_frame *fp, void *arg)
1454 fc_fcp_retry_cmd(fsp); 1463 fc_fcp_retry_cmd(fsp);
1455 break; 1464 break;
1456 } 1465 }
1457 fc_timeout_error(fsp); 1466 fc_fcp_recovery(fsp);
1458 break; 1467 break;
1459 } 1468 }
1460 } else if (opcode == ELS_LS_ACC) { 1469 } else if (opcode == ELS_LS_ACC) {
@@ -1553,7 +1562,7 @@ static void fc_fcp_rec_error(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
1553 break; 1562 break;
1554 1563
1555 default: 1564 default:
1556 FC_FCP_DBG(fsp, "REC %p fid %x error unexpected error %d\n", 1565 FC_FCP_DBG(fsp, "REC %p fid %6.6x error unexpected error %d\n",
1557 fsp, fsp->rport->port_id, error); 1566 fsp, fsp->rport->port_id, error);
1558 fsp->status_code = FC_CMD_PLOGO; 1567 fsp->status_code = FC_CMD_PLOGO;
1559 /* fall through */ 1568 /* fall through */
@@ -1563,13 +1572,13 @@ static void fc_fcp_rec_error(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
1563 * Assume REC or LS_ACC was lost. 1572 * Assume REC or LS_ACC was lost.
1564 * The exchange manager will have aborted REC, so retry. 1573 * The exchange manager will have aborted REC, so retry.
1565 */ 1574 */
1566 FC_FCP_DBG(fsp, "REC fid %x error error %d retry %d/%d\n", 1575 FC_FCP_DBG(fsp, "REC fid %6.6x error error %d retry %d/%d\n",
1567 fsp->rport->port_id, error, fsp->recov_retry, 1576 fsp->rport->port_id, error, fsp->recov_retry,
1568 FC_MAX_RECOV_RETRY); 1577 FC_MAX_RECOV_RETRY);
1569 if (fsp->recov_retry++ < FC_MAX_RECOV_RETRY) 1578 if (fsp->recov_retry++ < FC_MAX_RECOV_RETRY)
1570 fc_fcp_rec(fsp); 1579 fc_fcp_rec(fsp);
1571 else 1580 else
1572 fc_timeout_error(fsp); 1581 fc_fcp_recovery(fsp);
1573 break; 1582 break;
1574 } 1583 }
1575 fc_fcp_unlock_pkt(fsp); 1584 fc_fcp_unlock_pkt(fsp);
@@ -1578,12 +1587,12 @@ out:
1578} 1587}
1579 1588
1580/** 1589/**
1581 * fc_timeout_error() - Handler for fcp_pkt timeouts 1590 * fc_fcp_recovery() - Handler for fcp_pkt recovery
1582 * @fsp: The FCP packt that has timed out 1591 * @fsp: The FCP pkt that needs to be aborted
1583 */ 1592 */
1584static void fc_timeout_error(struct fc_fcp_pkt *fsp) 1593static void fc_fcp_recovery(struct fc_fcp_pkt *fsp)
1585{ 1594{
1586 fsp->status_code = FC_CMD_TIME_OUT; 1595 fsp->status_code = FC_CMD_RECOVERY;
1587 fsp->cdb_status = 0; 1596 fsp->cdb_status = 0;
1588 fsp->io_status = 0; 1597 fsp->io_status = 0;
1589 /* 1598 /*
@@ -1631,7 +1640,7 @@ static void fc_fcp_srr(struct fc_fcp_pkt *fsp, enum fc_rctl r_ctl, u32 offset)
1631 srr->srr_rel_off = htonl(offset); 1640 srr->srr_rel_off = htonl(offset);
1632 1641
1633 fc_fill_fc_hdr(fp, FC_RCTL_ELS4_REQ, rport->port_id, 1642 fc_fill_fc_hdr(fp, FC_RCTL_ELS4_REQ, rport->port_id,
1634 fc_host_port_id(rpriv->local_port->host), FC_TYPE_FCP, 1643 rpriv->local_port->port_id, FC_TYPE_FCP,
1635 FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0); 1644 FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0);
1636 1645
1637 seq = lport->tt.exch_seq_send(lport, fp, fc_fcp_srr_resp, NULL, 1646 seq = lport->tt.exch_seq_send(lport, fp, fc_fcp_srr_resp, NULL,
@@ -1689,7 +1698,7 @@ static void fc_fcp_srr_resp(struct fc_seq *seq, struct fc_frame *fp, void *arg)
1689 break; 1698 break;
1690 case ELS_LS_RJT: 1699 case ELS_LS_RJT:
1691 default: 1700 default:
1692 fc_timeout_error(fsp); 1701 fc_fcp_recovery(fsp);
1693 break; 1702 break;
1694 } 1703 }
1695 fc_fcp_unlock_pkt(fsp); 1704 fc_fcp_unlock_pkt(fsp);
@@ -1715,7 +1724,7 @@ static void fc_fcp_srr_error(struct fc_fcp_pkt *fsp, struct fc_frame *fp)
1715 if (fsp->recov_retry++ < FC_MAX_RECOV_RETRY) 1724 if (fsp->recov_retry++ < FC_MAX_RECOV_RETRY)
1716 fc_fcp_rec(fsp); 1725 fc_fcp_rec(fsp);
1717 else 1726 else
1718 fc_timeout_error(fsp); 1727 fc_fcp_recovery(fsp);
1719 break; 1728 break;
1720 case -FC_EX_CLOSED: /* e.g., link failure */ 1729 case -FC_EX_CLOSED: /* e.g., link failure */
1721 /* fall through */ 1730 /* fall through */
@@ -1810,7 +1819,7 @@ int fc_queuecommand(struct scsi_cmnd *sc_cmd, void (*done)(struct scsi_cmnd *))
1810 /* 1819 /*
1811 * setup the data direction 1820 * setup the data direction
1812 */ 1821 */
1813 stats = fc_lport_get_stats(lport); 1822 stats = per_cpu_ptr(lport->dev_stats, get_cpu());
1814 if (sc_cmd->sc_data_direction == DMA_FROM_DEVICE) { 1823 if (sc_cmd->sc_data_direction == DMA_FROM_DEVICE) {
1815 fsp->req_flags = FC_SRB_READ; 1824 fsp->req_flags = FC_SRB_READ;
1816 stats->InputRequests++; 1825 stats->InputRequests++;
@@ -1823,6 +1832,7 @@ int fc_queuecommand(struct scsi_cmnd *sc_cmd, void (*done)(struct scsi_cmnd *))
1823 fsp->req_flags = 0; 1832 fsp->req_flags = 0;
1824 stats->ControlRequests++; 1833 stats->ControlRequests++;
1825 } 1834 }
1835 put_cpu();
1826 1836
1827 fsp->tgt_flags = rpriv->flags; 1837 fsp->tgt_flags = rpriv->flags;
1828 1838
@@ -1907,6 +1917,8 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
1907 } 1917 }
1908 break; 1918 break;
1909 case FC_ERROR: 1919 case FC_ERROR:
1920 FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml "
1921 "due to FC_ERROR\n");
1910 sc_cmd->result = DID_ERROR << 16; 1922 sc_cmd->result = DID_ERROR << 16;
1911 break; 1923 break;
1912 case FC_DATA_UNDRUN: 1924 case FC_DATA_UNDRUN:
@@ -1915,12 +1927,19 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
1915 * scsi status is good but transport level 1927 * scsi status is good but transport level
1916 * underrun. 1928 * underrun.
1917 */ 1929 */
1918 sc_cmd->result = (fsp->state & FC_SRB_RCV_STATUS ? 1930 if (fsp->state & FC_SRB_RCV_STATUS) {
1919 DID_OK : DID_ERROR) << 16; 1931 sc_cmd->result = DID_OK << 16;
1932 } else {
1933 FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml"
1934 " due to FC_DATA_UNDRUN (trans)\n");
1935 sc_cmd->result = DID_ERROR << 16;
1936 }
1920 } else { 1937 } else {
1921 /* 1938 /*
1922 * scsi got underrun, this is an error 1939 * scsi got underrun, this is an error
1923 */ 1940 */
1941 FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml "
1942 "due to FC_DATA_UNDRUN (scsi)\n");
1924 CMD_RESID_LEN(sc_cmd) = fsp->scsi_resid; 1943 CMD_RESID_LEN(sc_cmd) = fsp->scsi_resid;
1925 sc_cmd->result = (DID_ERROR << 16) | fsp->cdb_status; 1944 sc_cmd->result = (DID_ERROR << 16) | fsp->cdb_status;
1926 } 1945 }
@@ -1929,12 +1948,16 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
1929 /* 1948 /*
1930 * overrun is an error 1949 * overrun is an error
1931 */ 1950 */
1951 FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml "
1952 "due to FC_DATA_OVRRUN\n");
1932 sc_cmd->result = (DID_ERROR << 16) | fsp->cdb_status; 1953 sc_cmd->result = (DID_ERROR << 16) | fsp->cdb_status;
1933 break; 1954 break;
1934 case FC_CMD_ABORTED: 1955 case FC_CMD_ABORTED:
1956 FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml "
1957 "due to FC_CMD_ABORTED\n");
1935 sc_cmd->result = (DID_ERROR << 16) | fsp->io_status; 1958 sc_cmd->result = (DID_ERROR << 16) | fsp->io_status;
1936 break; 1959 break;
1937 case FC_CMD_TIME_OUT: 1960 case FC_CMD_RECOVERY:
1938 sc_cmd->result = (DID_BUS_BUSY << 16) | fsp->io_status; 1961 sc_cmd->result = (DID_BUS_BUSY << 16) | fsp->io_status;
1939 break; 1962 break;
1940 case FC_CMD_RESET: 1963 case FC_CMD_RESET:
@@ -1944,6 +1967,8 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
1944 sc_cmd->result = (DID_NO_CONNECT << 16); 1967 sc_cmd->result = (DID_NO_CONNECT << 16);
1945 break; 1968 break;
1946 default: 1969 default:
1970 FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml "
1971 "due to unknown error\n");
1947 sc_cmd->result = (DID_ERROR << 16); 1972 sc_cmd->result = (DID_ERROR << 16);
1948 break; 1973 break;
1949 } 1974 }
@@ -2028,7 +2053,7 @@ int fc_eh_device_reset(struct scsi_cmnd *sc_cmd)
2028 if (lport->state != LPORT_ST_READY) 2053 if (lport->state != LPORT_ST_READY)
2029 return rc; 2054 return rc;
2030 2055
2031 FC_SCSI_DBG(lport, "Resetting rport (%6x)\n", rport->port_id); 2056 FC_SCSI_DBG(lport, "Resetting rport (%6.6x)\n", rport->port_id);
2032 2057
2033 fsp = fc_fcp_pkt_alloc(lport, GFP_NOIO); 2058 fsp = fc_fcp_pkt_alloc(lport, GFP_NOIO);
2034 if (fsp == NULL) { 2059 if (fsp == NULL) {
@@ -2076,12 +2101,12 @@ int fc_eh_host_reset(struct scsi_cmnd *sc_cmd)
2076 2101
2077 if (fc_fcp_lport_queue_ready(lport)) { 2102 if (fc_fcp_lport_queue_ready(lport)) {
2078 shost_printk(KERN_INFO, shost, "libfc: Host reset succeeded " 2103 shost_printk(KERN_INFO, shost, "libfc: Host reset succeeded "
2079 "on port (%6x)\n", fc_host_port_id(lport->host)); 2104 "on port (%6.6x)\n", lport->port_id);
2080 return SUCCESS; 2105 return SUCCESS;
2081 } else { 2106 } else {
2082 shost_printk(KERN_INFO, shost, "libfc: Host reset failed, " 2107 shost_printk(KERN_INFO, shost, "libfc: Host reset failed, "
2083 "port (%6x) is not ready.\n", 2108 "port (%6.6x) is not ready.\n",
2084 fc_host_port_id(lport->host)); 2109 lport->port_id);
2085 return FAILED; 2110 return FAILED;
2086 } 2111 }
2087} 2112}
@@ -2166,7 +2191,7 @@ void fc_fcp_destroy(struct fc_lport *lport)
2166 2191
2167 if (!list_empty(&si->scsi_pkt_queue)) 2192 if (!list_empty(&si->scsi_pkt_queue))
2168 printk(KERN_ERR "libfc: Leaked SCSI packets when destroying " 2193 printk(KERN_ERR "libfc: Leaked SCSI packets when destroying "
2169 "port (%6x)\n", fc_host_port_id(lport->host)); 2194 "port (%6.6x)\n", lport->port_id);
2170 2195
2171 mempool_destroy(si->scsi_pkt_pool); 2196 mempool_destroy(si->scsi_pkt_pool);
2172 kfree(si); 2197 kfree(si);