#define DEBUG 1
#ifdef DEBUG
-#define SDprintk if (debug) printk
-#define SDprintk2 if (debug > 1) printk
+#define BUS_DBG(bp, fmt, args...) if (debug > 0) printk("%s%d: %s " fmt, bp->h.r_name, bp->h.r_inst, __func__, ##args)
+#define BUS_DBG2(bp, fmt, args...) if (debug > 1) printk("%s%d: %s " fmt, bp->h.r_name, bp->h.r_inst, __func__, ##args)
static int debug = 0;
module_param(debug, int, 0);
#else
-#define SDprintk(fmt, args...)
-#define SDprintk2(fmt, args...)
+#define BUS_DBG(bp, fmt, args...)
+#define BUS_DBG2(bp, fmt, args...)
#endif
-#define Eprintk(fmt, args...) printk(KERN_ERR "isp_scst(%s): " fmt, __FUNCTION__, ##args)
-#define Iprintk(fmt, args...) printk(KERN_INFO "isp_scst(%s): " fmt, __FUNCTION__, ##args)
+#define Eprintk(fmt, args...) printk(KERN_ERR "isp_scst(%s): " fmt, __func__, ##args)
+#define Iprintk(fmt, args...) printk(KERN_INFO "isp_scst(%s): " fmt, __func__, ##args)
static void scsi_target_handler(qact_e, void *);
return (NULL);
}
atomic_inc(&bc->sess_count);
- SDprintk("scsi_target: alloc initiator 0x%016llx, ++sess_count %d\n", iid, atomic_read(&bc->sess_count));
+ BUS_DBG(bc->bus, "0x%016llx, ++sess_count %d\n", iid, atomic_read(&bc->sess_count));
return (nptr);
}
static void
free_ini(bus_chan_t *bc, ini_t *ini, int wait)
{
- SDprintk("scsi_target: free initiator 0x%016llx, sess_count-- %d, wait %d\n", ini->ini_iid, atomic_read(&bc->sess_count), wait);
+ BUS_DBG(bc->bus, "0x%016llx, sess_count-- %d, wait %d\n", ini->ini_iid, atomic_read(&bc->sess_count), wait);
scst_unregister_session(ini->ini_scst_sess, wait, NULL);
/* no wait call is only when there are no pending commands, so we can free stuff here */
kfree(ini);
}
static __inline void
-__ini_get(ini_t *ini)
+__ini_get(bus_chan_t *bc, ini_t *ini)
{
if (ini != NULL) {
ini->ini_refcnt++;
- SDprintk2("ini 0x%016llx ++refcnt (%d)\n", ini->ini_iid, ini->ini_refcnt);
+ BUS_DBG2(bc->bus, "0x%016llx ++refcnt (%d)\n", ini->ini_iid, ini->ini_refcnt);
}
}
{
unsigned long flags;
spin_lock_irqsave(&bc->tmds_lock, flags);
- __ini_get(ini);
+ __ini_get(bc, ini);
spin_unlock_irqrestore(&bc->tmds_lock, flags);
}
{
if (ini != NULL) {
ini->ini_refcnt--;
- SDprintk2("ini 0x%016llx --refcnt (%d)\n", ini->ini_iid, ini->ini_refcnt);
+ BUS_DBG2(bc->bus, "0x%016llx --refcnt (%d)\n", ini->ini_iid, ini->ini_refcnt);
if (ini->ini_refcnt < 0) {
free_ini(bc, ini, 0);
}
if (tmd->cd_flags & CDF_PRIVATE_ABORTED) {
__ini_put(bc, tmd->cd_ini);
spin_unlock_irq(&bc->tmds_lock);
- SDprintk("%s: ABORTED TMD_FIN[%llx]\n", __FUNCTION__, tmd->cd_tagval);
+ BUS_DBG(bp, "ABORTED TMD_FIN[%llx]\n", tmd->cd_tagval);
(*bp->h.r_action)(QIN_TMD_FIN, tmd);
goto rx_loop;
}
}
spin_unlock_irqrestore(&scsi_target_lock, flags);
+ BUS_DBG2(bp, "TMD_START[%llx] %p cdb0=%x\n", tmd->cd_tagval, tmd, tmd->cd_cdb[0] & 0xff);
+
tmd->cd_bus = bp;
tmd->cd_hnext = NULL;
bc = &bp->bchan[tmd->cd_channel];
/* then, add commands to queue */
spin_lock_irqsave(&bc->tmds_lock, flags);
tmd->cd_ini = ini_from_iid(bc, tmd->cd_iid);
- __ini_get(tmd->cd_ini);
+ __ini_get(bc, tmd->cd_ini);
if (bc->tmds_front == NULL) {
bc->tmds_front = tmd;
} else {
tmd_cmd_t *prev_tmd = NULL;
tmd_xact_t *xact;
- SDprintk("scsi_target: searching new initiators for %s%d Chan %d\n", bp->h.r_name, bp->h.r_inst, chan);
+ BUS_DBG(bp, "Chan %d searching new initiators\n", chan);
/* iterate over queue and find any commands not assigned to initiator */
spin_lock_irq(&bc->tmds_lock);
ini = ini_from_iid(bc, tmd->cd_iid);
if (ini != NULL) {
tmd->cd_ini = ini;
- __ini_get(ini);
+ __ini_get(bc, ini);
} else {
spin_unlock_irq(&bc->tmds_lock);
if (ini != NULL) {
tmd->cd_ini = ini;
add_ini(bc, tmd->cd_iid, ini);
- __ini_get(ini);
+ __ini_get(bc, ini);
} else {
/* fail to alloc initiator, remove from queue and send busy */
if (prev_tmd == NULL) {
tmd_xact_t *xact = &tmd->cd_xact;
enum scst_exec_context context = scst_estimate_context();
- SDprintk2("scsi_target: TMD_DONE[%llx] %p hf %x lf %x xfrlen %d totlen %d moved %d\n",
- tmd->cd_tagval, tmd, xact->td_hflags, xact->td_lflags, xact->td_xfrlen, tmd->cd_totlen, tmd->cd_moved);
-
bp = tmd->cd_bus;
+
+ BUS_DBG2(bp,"TMD_DONE[%llx] %p hf %x lf %x xfrlen %d totlen %d moved %d\n",
+ tmd->cd_tagval, tmd, xact->td_hflags, xact->td_lflags, xact->td_xfrlen, tmd->cd_totlen, tmd->cd_moved);
+
scst_cmd = tmd->cd_scst_cmd;
if (!scst_cmd) {
/* command returned by us with status BUSY */
- SDprintk("%s: BUSY TMD_FIN[%llx]\n", __FUNCTION__, tmd->cd_tagval);
+ BUS_DBG(bp, "BUSY TMD_FIN[%llx]\n", tmd->cd_tagval);
ini_put(&bp->bchan[tmd->cd_channel], tmd->cd_ini);
(*bp->h.r_action)(QIN_TMD_FIN, tmd);
return;
}
spin_unlock_irqrestore(&scsi_target_lock, flags);
- SDprintk("scsi_target: MGT code %x from %s%d iid 0x%016llx tag %llx\n", np->nt_ncode, bp->h.r_name, bp->h.r_inst, np->nt_wwn, np->nt_tagval);
+ BUS_DBG(bp, "TMD_NOTIFY %p code %x iid 0x%016llx tag %llx\n", np, np->nt_ncode, np->nt_wwn, np->nt_tagval);
bc = &bp->bchan[np->nt_channel];
spin_lock_irqsave(&bc->tmds_lock, flags);
ini = ini_from_iid(bc, np->nt_wwn);
np->nt_ini = ini;
- __ini_get(np->nt_ini);
+ __ini_get(bc, np->nt_ini);
spin_unlock_irqrestore(&bc->tmds_lock, flags);
switch (np->nt_ncode) {
goto err_no_ini;
}
if (abort_task(bc, np->nt_wwn, np->nt_tagval)) {
- SDprintk("TMD_NOTIFY abort task [%llx]\n", np->nt_tagval);
+ BUS_DBG(bp, "TMD_NOTIFY abort task [%llx]\n", np->nt_tagval);
goto notify_ack;
}
if (scst_rx_mgmt_fn_tag(ini->ini_scst_sess, SCST_ABORT_TASK, np->nt_tagval, 1, np) < 0) {
* table to avoid double free
*/
if (del_ini(bc, np->nt_wwn)) {
- SDprintk("droping reference to initiator 0x%016llx\n", np->nt_wwn);
+ BUS_DBG(bp, "droping reference to initiator 0x%016llx\n", np->nt_wwn);
__ini_put(bc, ini);
} else {
Eprintk("cannot logout initiator 0x%016llx\n", np->nt_wwn);
case QOUT_TMD_START:
{
tmd_cmd_t *tmd = arg;
- SDprintk2("scsi_target: TMD_START[%llx] %p cdb0=%x\n", tmd->cd_tagval, tmd, tmd->cd_cdb[0] & 0xff);
tmd->cd_xact.td_cmd = tmd;
scsi_target_start_cmd(arg);
break;
case QOUT_NOTIFY:
{
isp_notify_t *np = arg;
- SDprintk("scsi_target: TMD_NOTIFY %p code=0x%x\n", np, np->nt_ncode);
scsi_target_notify(np);
break;
}
static int
qlaispd_function(void *arg)
{
- SDprintk("qlaispd starting\n");
+ printk(KERN_DEBUG "qlaispd starting\n");
while (!kthread_should_stop()) {
- SDprintk("qlaispd sleeping\n");
+ printk(KERN_DEBUG "qlaispd sleeping\n");
wait_event_interruptible(qlaispd_waitq, qlaispd_flags || kthread_should_stop());
- SDprintk("qlaispd running\n");
+ printk(KERN_DEBUG "qlaispd running\n");
if (test_and_clear_bit(SF_REGISTER_SCST, &qlaispd_flags)) {
register_scst();
unregister_scst();
}
}
- SDprintk("qlaispd exiting\n");
+ printk(KERN_DEBUG "qlaispd exiting\n");
return (0);
}
/* Locking disable_sem prevent moving pending commands to low level driver
* during disabling luns, as we can't get them back, what leads to SCST
* commands leakage */
- SDprintk("%s: Chan %d before down_write disable_sem\n", __FUNCTION__, chan);
+ BUS_DBG(bp, "Chan %d before down_write disable_sem\n", chan);
down_write(&bc->disable_sem);
- SDprintk("%s: Chan %d after down_write disable_sem\n", __FUNCTION__, chan);
+ BUS_DBG(bp, "Chan %d after down_write disable_sem\n", chan);
ec.en_private = &rsem;
(*bp->h.r_action)(en ? QIN_ENABLE : QIN_DISABLE, &ec);
}
if (bc->enable == 0) {
- SDprintk("%s: Chan %d drop all initiators references\n", __FUNCTION__, chan);
+ BUS_DBG(bp, "Chan %d drop all initiators references\n", chan);
/* If no lun is active on channel we want to logoff from SCST. At this point no new
* commands and notifies come from low level driver, but we need to care on pendgin
* ones. We just drop reference to initiators. When last command/notify finish
}
if (unlikely(down_read_trylock(&bc->disable_sem) != 1)) {
- SDprintk("%s: TMD[%llx] Chan %d disable_sem trylock failed, atomic %d\n",
- __FUNCTION__, tmd->cd_tagval, tmd->cd_channel, scst_cmd_atomic(scst_cmd));
+ BUS_DBG(bp, "TMD[%llx] Chan %d disable_sem trylock failed, atomic %d\n",
+ tmd->cd_tagval, tmd->cd_channel, scst_cmd_atomic(scst_cmd));
if (scst_cmd_atomic(scst_cmd)) {
return (SCST_TGT_RES_NEED_THREAD_CTX);
}
}
if (unlikely(bc->enable == 0)) {
- SDprintk("%s: TMD[%llx] Chan %d not enabled\n", __FUNCTION__, tmd->cd_tagval, tmd->cd_channel);
+ BUS_DBG(bp, "TMD[%llx] Chan %d not enabled\n", tmd->cd_tagval, tmd->cd_channel);
up_read(&bc->disable_sem);
scst_rx_data(scst_cmd, SCST_RX_STATUS_ERROR, SCST_CONTEXT_SAME);
return (SCST_TGT_RES_SUCCESS);
}
- SDprintk2("%s: TMD[%llx] write nbytes %u\n", __FUNCTION__, tmd->cd_tagval, scst_cmd_get_bufflen(scst_cmd));
+ BUS_DBG2(bp, "TMD[%llx] write nbytes %u\n", tmd->cd_tagval, scst_cmd_get_bufflen(scst_cmd));
up_read(&bc->disable_sem);
(*bp->h.r_action)(QIN_TMD_CONT, xact);
/*
key = (slen >= 2) ? sbuf[2] : 0;
asc = (slen >= 12) ? sbuf[12] : 0;
ascq = (slen >= 13) ? sbuf[13] : 0;
- SDprintk("sense code: key 0x%02x asc 0x%02x ascq 0x%02x\n", key, asc, ascq);
+ BUS_DBG(bp, "sense code: key 0x%02x asc 0x%02x ascq 0x%02x\n", key, asc, ascq);
}
#endif
}
- SDprintk2("%s: TMD[%llx] status %d\n", __FUNCTION__, tmd->cd_tagval, scst_cmd_get_status(scst_cmd));
+ BUS_DBG2(bp, "TMD[%llx] status %d\n", tmd->cd_tagval, scst_cmd_get_status(scst_cmd));
}
out:
}
if (unlikely(down_read_trylock(&bc->disable_sem) != 1)) {
- SDprintk("%s: TMD[%llx] Chan %d disable_sem trylock failed, atomic %d\n",
- __FUNCTION__, tmd->cd_tagval, tmd->cd_channel, scst_cmd_atomic(scst_cmd));
+ BUS_DBG(bp, "TMD[%llx] Chan %d disable_sem trylock failed, atomic %d\n",
+ tmd->cd_tagval, tmd->cd_channel, scst_cmd_atomic(scst_cmd));
if (scst_cmd_atomic(scst_cmd)) {
return (SCST_TGT_RES_NEED_THREAD_CTX);
}
}
if (unlikely(bc->enable == 0)) {
- SDprintk("%s: TMD[%llx] Chan %d not enabled\n", __FUNCTION__, tmd->cd_tagval, tmd->cd_channel);
+ BUS_DBG(bp, "TMD[%llx] Chan %d not enabled\n", tmd->cd_tagval, tmd->cd_channel);
up_read(&bc->disable_sem);
scst_tgt_cmd_done(scst_cmd, SCST_CONTEXT_SAME);
return (SCST_TGT_RES_SUCCESS);
}
- SDprintk2("%s: TMD[%llx] %p hf %x lf %x xfrlen %d totlen %d moved %d\n",
- __FUNCTION__, tmd->cd_tagval, tmd, xact->td_hflags, xact->td_lflags, xact->td_xfrlen, tmd->cd_totlen, tmd->cd_moved);
+ BUS_DBG2(bp, "TMD[%llx] %p hf %x lf %x xfrlen %d totlen %d moved %d\n",
+ tmd->cd_tagval, tmd, xact->td_hflags, xact->td_lflags, xact->td_xfrlen, tmd->cd_totlen, tmd->cd_moved);
up_read(&bc->disable_sem);
(*bp->h.r_action)(QIN_TMD_CONT, xact);
/*
xact->td_data = NULL;
ini_put(&bp->bchan[tmd->cd_channel], tmd->cd_ini);
- SDprintk2("%s: TMD_FIN[%llx]\n", __FUNCTION__, tmd->cd_tagval);
+ BUS_DBG2(bp, "TMD_FIN[%llx]\n", tmd->cd_tagval);
(*bp->h.r_action)(QIN_TMD_FIN, tmd);
}
bus_t *bp = bus_from_notify(np);
ini_put(&bp->bchan[np->nt_channel], np->nt_ini);
- SDprintk("%s: NOTIFY_ACK[%llx]\n", __FUNCTION__, np->nt_tagval);
+ BUS_DBG(bp, "NOTIFY_ACK[%llx]\n", np->nt_tagval);
(*bp->h.r_action) (QIN_NOTIFY_ACK, np);
}
bc = &bp->bchan[chan];
bus_chan_unregister_sessions(bc, 1);
if (bc->scst_tgt) {
- SDprintk("%s: waiting for finishing %d sessions\n", __FUNCTION__, atomic_read(&bc->sess_count));
+ BUS_DBG(bp, "Chan %d waiting for finishing %d sessions\n", chan, atomic_read(&bc->sess_count));
wait_event(bc->unreg_waitq, atomic_read(&bc->sess_count) == 0);
- SDprintk("%s: all sessions finished\n", __FUNCTION__);
+ BUS_DBG(bp, "Chan %d all sessions finished\n", chan);
scst_unregister(bc->scst_tgt);
}
}