Commit f7b4aa63 authored by Tej Parkash's avatar Tej Parkash Committed by James Bottomley

[SCSI] qla4xxx: Add change_queue_depth API support

change_queue_depth will adjust device queuedepth upon receiving
"SAM_STAT_TASK_SET_FULL" scsi status from the target.
Also added ql4xqfulltracking command line param to enable or disable
queuefull tracking. One can disabling queuefull tracking to ensure
user set scsi device queuedepth is not altered.
Signed-off-by: default avatarTej Parkash <tej.parkash@qlogic.com>
Signed-off-by: default avatarVikas Chaudhary <vikas.chaudhary@qlogic.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 90599b62
...@@ -68,6 +68,14 @@ MODULE_PARM_DESC(ql4xmaxqdepth, ...@@ -68,6 +68,14 @@ MODULE_PARM_DESC(ql4xmaxqdepth,
" Maximum queue depth to report for target devices.\n" " Maximum queue depth to report for target devices.\n"
"\t\t Default: 32."); "\t\t Default: 32.");
static int ql4xqfulltracking = 1;
module_param(ql4xqfulltracking, int, S_IRUGO | S_IWUSR);
MODULE_PARM_DESC(ql4xqfulltracking,
" Enable or disable dynamic tracking and adjustment of\n"
"\t\t scsi device queue depth.\n"
"\t\t 0 - Disable.\n"
"\t\t 1 - Enable. (Default)");
static int ql4xsess_recovery_tmo = QL4_SESS_RECOVERY_TMO; static int ql4xsess_recovery_tmo = QL4_SESS_RECOVERY_TMO;
module_param(ql4xsess_recovery_tmo, int, S_IRUGO); module_param(ql4xsess_recovery_tmo, int, S_IRUGO);
MODULE_PARM_DESC(ql4xsess_recovery_tmo, MODULE_PARM_DESC(ql4xsess_recovery_tmo,
...@@ -140,6 +148,8 @@ static int qla4xxx_slave_configure(struct scsi_device *device); ...@@ -140,6 +148,8 @@ static int qla4xxx_slave_configure(struct scsi_device *device);
static void qla4xxx_slave_destroy(struct scsi_device *sdev); static void qla4xxx_slave_destroy(struct scsi_device *sdev);
static umode_t ql4_attr_is_visible(int param_type, int param); static umode_t ql4_attr_is_visible(int param_type, int param);
static int qla4xxx_host_reset(struct Scsi_Host *shost, int reset_type); static int qla4xxx_host_reset(struct Scsi_Host *shost, int reset_type);
static int qla4xxx_change_queue_depth(struct scsi_device *sdev, int qdepth,
int reason);
static struct qla4_8xxx_legacy_intr_set legacy_intr[] = static struct qla4_8xxx_legacy_intr_set legacy_intr[] =
QLA82XX_LEGACY_INTR_CONFIG; QLA82XX_LEGACY_INTR_CONFIG;
...@@ -159,6 +169,7 @@ static struct scsi_host_template qla4xxx_driver_template = { ...@@ -159,6 +169,7 @@ static struct scsi_host_template qla4xxx_driver_template = {
.slave_configure = qla4xxx_slave_configure, .slave_configure = qla4xxx_slave_configure,
.slave_alloc = qla4xxx_slave_alloc, .slave_alloc = qla4xxx_slave_alloc,
.slave_destroy = qla4xxx_slave_destroy, .slave_destroy = qla4xxx_slave_destroy,
.change_queue_depth = qla4xxx_change_queue_depth,
.this_id = -1, .this_id = -1,
.cmd_per_lun = 3, .cmd_per_lun = 3,
...@@ -5251,6 +5262,15 @@ static void qla4xxx_slave_destroy(struct scsi_device *sdev) ...@@ -5251,6 +5262,15 @@ static void qla4xxx_slave_destroy(struct scsi_device *sdev)
scsi_deactivate_tcq(sdev, 1); scsi_deactivate_tcq(sdev, 1);
} }
static int qla4xxx_change_queue_depth(struct scsi_device *sdev, int qdepth,
int reason)
{
if (!ql4xqfulltracking)
return -EOPNOTSUPP;
return iscsi_change_queue_depth(sdev, qdepth, reason);
}
/** /**
* qla4xxx_del_from_active_array - returns an active srb * qla4xxx_del_from_active_array - returns an active srb
* @ha: Pointer to host adapter structure. * @ha: Pointer to host adapter structure.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment