diff options
Diffstat (limited to 'drivers/scsi/libfc/fc_fcp.c')
-rw-r--r-- | drivers/scsi/libfc/fc_fcp.c | 103 |
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 *); | |||
97 | static void fc_fcp_complete_locked(struct fc_fcp_pkt *); | 97 | static void fc_fcp_complete_locked(struct fc_fcp_pkt *); |
98 | static void fc_tm_done(struct fc_seq *, struct fc_frame *, void *); | 98 | static void fc_tm_done(struct fc_seq *, struct fc_frame *, void *); |
99 | static void fc_fcp_error(struct fc_fcp_pkt *, struct fc_frame *); | 99 | static void fc_fcp_error(struct fc_fcp_pkt *, struct fc_frame *); |
100 | static void fc_timeout_error(struct fc_fcp_pkt *); | 100 | static void fc_fcp_recovery(struct fc_fcp_pkt *); |
101 | static void fc_fcp_timeout(unsigned long); | 101 | static void fc_fcp_timeout(unsigned long); |
102 | static void fc_fcp_rec(struct fc_fcp_pkt *); | 102 | static void fc_fcp_rec(struct fc_fcp_pkt *); |
103 | static void fc_fcp_rec_error(struct fc_fcp_pkt *, struct fc_frame *); | 103 | static 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))) { |
480 | crc_err: | 486 | crc_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; | ||
520 | err: | ||
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; |
1346 | unlock: | 1355 | unlock: |
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 | */ |
1584 | static void fc_timeout_error(struct fc_fcp_pkt *fsp) | 1593 | static 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); |