diff options
author | Stephen M. Cameron <scameron@beardog.cce.hp.com> | 2011-05-03 14:54:12 -0500 |
---|---|---|
committer | Jens Axboe <jaxboe@fusionio.com> | 2011-05-06 08:23:59 -0600 |
commit | 8a4ec67bd5648beb09d7db988a75835b740e950d (patch) | |
tree | 745a87ec016b79f3cf425f581c38090a4ff8f270 /drivers/block/cciss.c | |
parent | 063d2cf72ab6101d2dd69bd6fb503b229be70325 (diff) | |
download | linux-3.10-8a4ec67bd5648beb09d7db988a75835b740e950d.tar.gz linux-3.10-8a4ec67bd5648beb09d7db988a75835b740e950d.tar.bz2 linux-3.10-8a4ec67bd5648beb09d7db988a75835b740e950d.zip |
cciss: add cciss_tape_cmds module paramter
This is to allow number of commands reserved for use by SCSI tape drives
and medium changers to be adjusted at driver load time via the kernel
parameter cciss_tape_cmds, with a default value of 6, and a range
of 2 - 16 inclusive. Previously, the driver limited the number of
commands which could be queued to the SCSI half of the the driver
to only 2. This is to fix the problem that if you had more than
two tape drives, you couldn't, for example, erase or rewind them all
at the same time.
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Diffstat (limited to 'drivers/block/cciss.c')
-rw-r--r-- | drivers/block/cciss.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index 9528e94dc8b..abe90c97354 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c @@ -64,6 +64,10 @@ MODULE_DESCRIPTION("Driver for HP Smart Array Controllers"); MODULE_SUPPORTED_DEVICE("HP Smart Array Controllers"); MODULE_VERSION("3.6.26"); MODULE_LICENSE("GPL"); +static int cciss_tape_cmds = 6; +module_param(cciss_tape_cmds, int, 0644); +MODULE_PARM_DESC(cciss_tape_cmds, + "number of commands to allocate for tape devices (default: 6)"); static DEFINE_MUTEX(cciss_mutex); static struct proc_dir_entry *proc_cciss; @@ -4221,7 +4225,7 @@ static void __devinit cciss_get_max_perf_mode_cmds(struct ctlr_info *h) static void __devinit cciss_find_board_params(ctlr_info_t *h) { cciss_get_max_perf_mode_cmds(h); - h->nr_cmds = h->max_commands - 4; /* Allow room for some ioctls */ + h->nr_cmds = h->max_commands - 4 - cciss_tape_cmds; h->maxsgentries = readl(&(h->cfgtable->MaxSGElements)); /* * Limit in-command s/g elements to 32 save dma'able memory. @@ -4959,6 +4963,11 @@ reinit_after_soft_reset: sprintf(h->devname, "cciss%d", i); h->ctlr = i; + if (cciss_tape_cmds < 2) + cciss_tape_cmds = 2; + if (cciss_tape_cmds > 16) + cciss_tape_cmds = 16; + init_completion(&h->scan_wait); if (cciss_create_hba_sysfs_entry(h)) |