aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libfc
diff options
context:
space:
mode:
authorRobert Love <robert.w.love@intel.com>2010-03-12 19:08:50 -0500
committerJames Bottomley <James.Bottomley@suse.de>2010-04-11 10:23:44 -0400
commitb3ef990c1514859bffae221b9e82e46a38f1e7bf (patch)
tree0c1c7887fa668883d49856303c8ed51b2e09afd5 /drivers/scsi/libfc
parent5c12c418e905aac2826bb70f947648944c079ed9 (diff)
[SCSI] libfc: Add debug statements when fc_fcp returns DID_ERROR to scsi-ml
DID_ERROR cases can be ambigouos. Debugging FCP error cases will be much easier if we have debug statements when we hit these error conditions. This patch simply adds debug messages using the FC_FCP_DBG macro when we return DID_ERROR to SCSI. This way if a DID_ERROR is reproducible turning on debug_logging will give a clue to developers as to what the problem might be. Signed-off-by: Robert Love <robert.w.love@intel.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/libfc')
-rw-r--r--drivers/scsi/libfc/fc_fcp.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c
index 39f18e39125c..044c420a1371 100644
--- a/drivers/scsi/libfc/fc_fcp.c
+++ b/drivers/scsi/libfc/fc_fcp.c
@@ -1916,6 +1916,8 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
1916 } 1916 }
1917 break; 1917 break;
1918 case FC_ERROR: 1918 case FC_ERROR:
1919 FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml "
1920 "due to FC_ERROR\n");
1919 sc_cmd->result = DID_ERROR << 16; 1921 sc_cmd->result = DID_ERROR << 16;
1920 break; 1922 break;
1921 case FC_DATA_UNDRUN: 1923 case FC_DATA_UNDRUN:
@@ -1924,12 +1926,19 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
1924 * scsi status is good but transport level 1926 * scsi status is good but transport level
1925 * underrun. 1927 * underrun.
1926 */ 1928 */
1927 sc_cmd->result = (fsp->state & FC_SRB_RCV_STATUS ? 1929 if (fsp->state & FC_SRB_RCV_STATUS) {
1928 DID_OK : DID_ERROR) << 16; 1930 sc_cmd->result = DID_OK << 16;
1931 } else {
1932 FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml"
1933 " due to FC_DATA_UNDRUN (trans)\n");
1934 sc_cmd->result = DID_ERROR << 16;
1935 }
1929 } else { 1936 } else {
1930 /* 1937 /*
1931 * scsi got underrun, this is an error 1938 * scsi got underrun, this is an error
1932 */ 1939 */
1940 FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml "
1941 "due to FC_DATA_UNDRUN (scsi)\n");
1933 CMD_RESID_LEN(sc_cmd) = fsp->scsi_resid; 1942 CMD_RESID_LEN(sc_cmd) = fsp->scsi_resid;
1934 sc_cmd->result = (DID_ERROR << 16) | fsp->cdb_status; 1943 sc_cmd->result = (DID_ERROR << 16) | fsp->cdb_status;
1935 } 1944 }
@@ -1938,9 +1947,13 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
1938 /* 1947 /*
1939 * overrun is an error 1948 * overrun is an error
1940 */ 1949 */
1950 FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml "
1951 "due to FC_DATA_OVRRUN\n");
1941 sc_cmd->result = (DID_ERROR << 16) | fsp->cdb_status; 1952 sc_cmd->result = (DID_ERROR << 16) | fsp->cdb_status;
1942 break; 1953 break;
1943 case FC_CMD_ABORTED: 1954 case FC_CMD_ABORTED:
1955 FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml "
1956 "due to FC_CMD_ABORTED\n");
1944 sc_cmd->result = (DID_ERROR << 16) | fsp->io_status; 1957 sc_cmd->result = (DID_ERROR << 16) | fsp->io_status;
1945 break; 1958 break;
1946 case FC_CMD_RECOVERY: 1959 case FC_CMD_RECOVERY:
@@ -1953,6 +1966,8 @@ static void fc_io_compl(struct fc_fcp_pkt *fsp)
1953 sc_cmd->result = (DID_NO_CONNECT << 16); 1966 sc_cmd->result = (DID_NO_CONNECT << 16);
1954 break; 1967 break;
1955 default: 1968 default:
1969 FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml "
1970 "due to unknown error\n");
1956 sc_cmd->result = (DID_ERROR << 16); 1971 sc_cmd->result = (DID_ERROR << 16);
1957 break; 1972 break;
1958 } 1973 }