Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

libiscsi: add conn and scsi eh log debug flags

Allow the user to control the debug logs in libiscsi. We will now
have a module param for connection, session & error handling.

[Mike Christie - Fixed up to compile on current code and added
missing ISCSI_DBG_EH conversions]

Signed-off-by: Erez Zilber <erezzi.list@gmail.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>

authored by

Erez Zilber and committed by
James Bottomley
bd2199d4 32382492

+65 -44
+65 -44
drivers/scsi/libiscsi.c
··· 38 38 #include <scsi/scsi_transport_iscsi.h> 39 39 #include <scsi/libiscsi.h> 40 40 41 - static int iscsi_dbg_lib; 42 - module_param_named(debug_libiscsi, iscsi_dbg_lib, int, S_IRUGO | S_IWUSR); 43 - MODULE_PARM_DESC(debug_libiscsi, "Turn on debugging for libiscsi module. " 44 - "Set to 1 to turn on, and zero to turn off. Default " 45 - "is off."); 41 + static int iscsi_dbg_lib_conn; 42 + module_param_named(debug_libiscsi_conn, iscsi_dbg_lib_conn, int, 43 + S_IRUGO | S_IWUSR); 44 + MODULE_PARM_DESC(debug_libiscsi_conn, 45 + "Turn on debugging for connections in libiscsi module. " 46 + "Set to 1 to turn on, and zero to turn off. Default is off."); 47 + 48 + static int iscsi_dbg_lib_session; 49 + module_param_named(debug_libiscsi_session, iscsi_dbg_lib_session, int, 50 + S_IRUGO | S_IWUSR); 51 + MODULE_PARM_DESC(debug_libiscsi_session, 52 + "Turn on debugging for sessions in libiscsi module. " 53 + "Set to 1 to turn on, and zero to turn off. Default is off."); 54 + 55 + static int iscsi_dbg_lib_eh; 56 + module_param_named(debug_libiscsi_eh, iscsi_dbg_lib_eh, int, 57 + S_IRUGO | S_IWUSR); 58 + MODULE_PARM_DESC(debug_libiscsi_eh, 59 + "Turn on debugging for error handling in libiscsi module. " 60 + "Set to 1 to turn on, and zero to turn off. Default is off."); 46 61 47 62 #define ISCSI_DBG_CONN(_conn, dbg_fmt, arg...) \ 48 63 do { \ 49 - if (iscsi_dbg_lib) \ 64 + if (iscsi_dbg_lib_conn) \ 50 65 iscsi_conn_printk(KERN_INFO, _conn, \ 51 66 "%s " dbg_fmt, \ 52 67 __func__, ##arg); \ ··· 69 54 70 55 #define ISCSI_DBG_SESSION(_session, dbg_fmt, arg...) \ 71 56 do { \ 72 - if (iscsi_dbg_lib) \ 57 + if (iscsi_dbg_lib_session) \ 58 + iscsi_session_printk(KERN_INFO, _session, \ 59 + "%s " dbg_fmt, \ 60 + __func__, ##arg); \ 61 + } while (0); 62 + 63 + #define ISCSI_DBG_EH(_session, dbg_fmt, arg...) \ 64 + do { \ 65 + if (iscsi_dbg_lib_eh) \ 73 66 iscsi_session_printk(KERN_INFO, _session, \ 74 67 "%s " dbg_fmt, \ 75 68 __func__, ##arg); \ ··· 1584 1561 spin_lock_bh(&session->lock); 1585 1562 if (session->state == ISCSI_STATE_TERMINATE) { 1586 1563 failed: 1587 - iscsi_session_printk(KERN_INFO, session, 1588 - "failing target reset: Could not log " 1589 - "back into target [age %d]\n", 1590 - session->age); 1564 + ISCSI_DBG_EH(session, 1565 + "failing target reset: Could not log back into " 1566 + "target [age %d]\n", 1567 + session->age); 1591 1568 spin_unlock_bh(&session->lock); 1592 1569 mutex_unlock(&session->eh_mutex); 1593 1570 return FAILED; ··· 1601 1578 */ 1602 1579 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED); 1603 1580 1604 - ISCSI_DBG_SESSION(session, "wait for relogin\n"); 1581 + ISCSI_DBG_EH(session, "wait for relogin\n"); 1605 1582 wait_event_interruptible(conn->ehwait, 1606 1583 session->state == ISCSI_STATE_TERMINATE || 1607 1584 session->state == ISCSI_STATE_LOGGED_IN || ··· 1611 1588 1612 1589 mutex_lock(&session->eh_mutex); 1613 1590 spin_lock_bh(&session->lock); 1614 - if (session->state == ISCSI_STATE_LOGGED_IN) 1615 - iscsi_session_printk(KERN_INFO, session, 1616 - "target reset succeeded\n"); 1617 - else 1591 + if (session->state == ISCSI_STATE_LOGGED_IN) { 1592 + ISCSI_DBG_EH(session, 1593 + "target reset succeeded\n"); 1594 + } else 1618 1595 goto failed; 1619 1596 spin_unlock_bh(&session->lock); 1620 1597 mutex_unlock(&session->eh_mutex); ··· 1630 1607 spin_lock(&session->lock); 1631 1608 if (conn->tmf_state == TMF_QUEUED) { 1632 1609 conn->tmf_state = TMF_TIMEDOUT; 1633 - ISCSI_DBG_SESSION(session, "tmf timedout\n"); 1610 + ISCSI_DBG_EH(session, "tmf timedout\n"); 1634 1611 /* unblock eh_abort() */ 1635 1612 wake_up(&conn->ehwait); 1636 1613 } ··· 1650 1627 spin_unlock_bh(&session->lock); 1651 1628 iscsi_conn_failure(conn, ISCSI_ERR_CONN_FAILED); 1652 1629 spin_lock_bh(&session->lock); 1653 - ISCSI_DBG_SESSION(session, "tmf exec failure\n"); 1630 + ISCSI_DBG_EH(session, "tmf exec failure\n"); 1654 1631 return -EPERM; 1655 1632 } 1656 1633 conn->tmfcmd_pdus_cnt++; ··· 1658 1635 conn->tmf_timer.function = iscsi_tmf_timedout; 1659 1636 conn->tmf_timer.data = (unsigned long)conn; 1660 1637 add_timer(&conn->tmf_timer); 1661 - ISCSI_DBG_SESSION(session, "tmf set timeout\n"); 1638 + ISCSI_DBG_EH(session, "tmf set timeout\n"); 1662 1639 1663 1640 spin_unlock_bh(&session->lock); 1664 1641 mutex_unlock(&session->eh_mutex); ··· 1756 1733 cls_session = starget_to_session(scsi_target(sc->device)); 1757 1734 session = cls_session->dd_data; 1758 1735 1759 - ISCSI_DBG_SESSION(session, "scsi cmd %p timedout\n", sc); 1736 + ISCSI_DBG_EH(session, "scsi cmd %p timedout\n", sc); 1760 1737 1761 1738 spin_lock(&session->lock); 1762 1739 if (session->state != ISCSI_STATE_LOGGED_IN) { ··· 1786 1763 * nop as a ping. 1787 1764 */ 1788 1765 if (time_after_eq(task->last_xfer, task->last_timeout)) { 1789 - ISCSI_DBG_CONN(conn, "Command making progress. Asking " 1790 - "scsi-ml for more time to complete. " 1791 - "Last data recv at %lu. Last timeout was at " 1792 - "%lu\n.", task->last_xfer, task->last_timeout); 1766 + ISCSI_DBG_EH(session, "Command making progress. Asking " 1767 + "scsi-ml for more time to complete. " 1768 + "Last data recv at %lu. Last timeout was at " 1769 + "%lu\n.", task->last_xfer, task->last_timeout); 1793 1770 task->have_checked_conn = false; 1794 1771 rc = BLK_EH_RESET_TIMER; 1795 1772 goto done; ··· 1829 1806 if (task) 1830 1807 task->last_timeout = jiffies; 1831 1808 spin_unlock(&session->lock); 1832 - ISCSI_DBG_SESSION(session, "return %s\n", rc == BLK_EH_RESET_TIMER ? 1833 - "timer reset" : "nh"); 1809 + ISCSI_DBG_EH(session, "return %s\n", rc == BLK_EH_RESET_TIMER ? 1810 + "timer reset" : "nh"); 1834 1811 return rc; 1835 1812 } 1836 1813 ··· 1900 1877 cls_session = starget_to_session(scsi_target(sc->device)); 1901 1878 session = cls_session->dd_data; 1902 1879 1903 - ISCSI_DBG_SESSION(session, "aborting sc %p\n", sc); 1880 + ISCSI_DBG_EH(session, "aborting sc %p\n", sc); 1904 1881 1905 1882 mutex_lock(&session->eh_mutex); 1906 1883 spin_lock_bh(&session->lock); ··· 1909 1886 * got the command. 1910 1887 */ 1911 1888 if (!sc->SCp.ptr) { 1912 - ISCSI_DBG_SESSION(session, "sc never reached iscsi layer or " 1913 - "it completed.\n"); 1889 + ISCSI_DBG_EH(session, "sc never reached iscsi layer or " 1890 + "it completed.\n"); 1914 1891 spin_unlock_bh(&session->lock); 1915 1892 mutex_unlock(&session->eh_mutex); 1916 1893 return SUCCESS; ··· 1924 1901 sc->SCp.phase != session->age) { 1925 1902 spin_unlock_bh(&session->lock); 1926 1903 mutex_unlock(&session->eh_mutex); 1927 - ISCSI_DBG_SESSION(session, "failing abort due to dropped " 1904 + ISCSI_DBG_EH(session, "failing abort due to dropped " 1928 1905 "session.\n"); 1929 1906 return FAILED; 1930 1907 } ··· 1934 1911 age = session->age; 1935 1912 1936 1913 task = (struct iscsi_task *)sc->SCp.ptr; 1937 - ISCSI_DBG_SESSION(session, "aborting [sc %p itt 0x%x]\n", 1938 - sc, task->itt); 1914 + ISCSI_DBG_EH(session, "aborting [sc %p itt 0x%x]\n", 1915 + sc, task->itt); 1939 1916 1940 1917 /* task completed before time out */ 1941 1918 if (!task->sc) { 1942 - ISCSI_DBG_SESSION(session, "sc completed while abort in " 1943 - "progress\n"); 1919 + ISCSI_DBG_EH(session, "sc completed while abort in progress\n"); 1944 1920 goto success; 1945 1921 } 1946 1922 ··· 1988 1966 if (!sc->SCp.ptr) { 1989 1967 conn->tmf_state = TMF_INITIAL; 1990 1968 /* task completed before tmf abort response */ 1991 - ISCSI_DBG_SESSION(session, "sc completed while abort " 1992 - "in progress\n"); 1969 + ISCSI_DBG_EH(session, "sc completed while abort in " 1970 + "progress\n"); 1993 1971 goto success; 1994 1972 } 1995 1973 /* fall through */ ··· 2001 1979 success: 2002 1980 spin_unlock_bh(&session->lock); 2003 1981 success_unlocked: 2004 - ISCSI_DBG_SESSION(session, "abort success [sc %p itt 0x%x]\n", 2005 - sc, task->itt); 1982 + ISCSI_DBG_EH(session, "abort success [sc %p itt 0x%x]\n", 1983 + sc, task->itt); 2006 1984 mutex_unlock(&session->eh_mutex); 2007 1985 return SUCCESS; 2008 1986 2009 1987 failed: 2010 1988 spin_unlock_bh(&session->lock); 2011 1989 failed_unlocked: 2012 - ISCSI_DBG_SESSION(session, "abort failed [sc %p itt 0x%x]\n", sc, 2013 - task ? task->itt : 0); 1990 + ISCSI_DBG_EH(session, "abort failed [sc %p itt 0x%x]\n", sc, 1991 + task ? task->itt : 0); 2014 1992 mutex_unlock(&session->eh_mutex); 2015 1993 return FAILED; 2016 1994 } ··· 2037 2015 cls_session = starget_to_session(scsi_target(sc->device)); 2038 2016 session = cls_session->dd_data; 2039 2017 2040 - ISCSI_DBG_SESSION(session, "LU Reset [sc %p lun %u]\n", 2041 - sc, sc->device->lun); 2018 + ISCSI_DBG_EH(session, "LU Reset [sc %p lun %u]\n", sc, sc->device->lun); 2042 2019 2043 2020 mutex_lock(&session->eh_mutex); 2044 2021 spin_lock_bh(&session->lock); ··· 2091 2070 unlock: 2092 2071 spin_unlock_bh(&session->lock); 2093 2072 done: 2094 - ISCSI_DBG_SESSION(session, "dev reset result = %s\n", 2095 - rc == SUCCESS ? "SUCCESS" : "FAILED"); 2073 + ISCSI_DBG_EH(session, "dev reset result = %s\n", 2074 + rc == SUCCESS ? "SUCCESS" : "FAILED"); 2096 2075 mutex_unlock(&session->eh_mutex); 2097 2076 return rc; 2098 2077 }