Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6: [SCSI] scsi_lib.c: properly count the number of pages in scsi_req_map_sg() [SCSI] scsi_transport_sas: make write attrs writeable [SCSI] scsi_transport_sas; fix user_scan [SCSI] ppa: fix for machines with highmem [SCSI] mptspi: reset handler shouldn't be called for other bus protocols [SCSI] Blacklist entry for HP dat changer
This commit is contained in:
@@ -1605,6 +1605,21 @@ mpt_resume(struct pci_dev *pdev)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int
|
||||||
|
mpt_signal_reset(int index, MPT_ADAPTER *ioc, int reset_phase)
|
||||||
|
{
|
||||||
|
if ((MptDriverClass[index] == MPTSPI_DRIVER &&
|
||||||
|
ioc->bus_type != SPI) ||
|
||||||
|
(MptDriverClass[index] == MPTFC_DRIVER &&
|
||||||
|
ioc->bus_type != FC) ||
|
||||||
|
(MptDriverClass[index] == MPTSAS_DRIVER &&
|
||||||
|
ioc->bus_type != SAS))
|
||||||
|
/* make sure we only call the relevant reset handler
|
||||||
|
* for the bus */
|
||||||
|
return 0;
|
||||||
|
return (MptResetHandlers[index])(ioc, reset_phase);
|
||||||
|
}
|
||||||
|
|
||||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||||
/*
|
/*
|
||||||
* mpt_do_ioc_recovery - Initialize or recover MPT adapter.
|
* mpt_do_ioc_recovery - Initialize or recover MPT adapter.
|
||||||
@@ -1885,14 +1900,14 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag)
|
|||||||
if ((ret == 0) && MptResetHandlers[ii]) {
|
if ((ret == 0) && MptResetHandlers[ii]) {
|
||||||
dprintk((MYIOC_s_INFO_FMT "Calling IOC post_reset handler #%d\n",
|
dprintk((MYIOC_s_INFO_FMT "Calling IOC post_reset handler #%d\n",
|
||||||
ioc->name, ii));
|
ioc->name, ii));
|
||||||
rc += (*(MptResetHandlers[ii]))(ioc, MPT_IOC_POST_RESET);
|
rc += mpt_signal_reset(ii, ioc, MPT_IOC_POST_RESET);
|
||||||
handlers++;
|
handlers++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alt_ioc_ready && MptResetHandlers[ii]) {
|
if (alt_ioc_ready && MptResetHandlers[ii]) {
|
||||||
drsprintk((MYIOC_s_INFO_FMT "Calling alt-%s post_reset handler #%d\n",
|
drsprintk((MYIOC_s_INFO_FMT "Calling alt-%s post_reset handler #%d\n",
|
||||||
ioc->name, ioc->alt_ioc->name, ii));
|
ioc->name, ioc->alt_ioc->name, ii));
|
||||||
rc += (*(MptResetHandlers[ii]))(ioc->alt_ioc, MPT_IOC_POST_RESET);
|
rc += mpt_signal_reset(ii, ioc->alt_ioc, MPT_IOC_POST_RESET);
|
||||||
handlers++;
|
handlers++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3267,11 +3282,11 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag)
|
|||||||
if (MptResetHandlers[ii]) {
|
if (MptResetHandlers[ii]) {
|
||||||
dprintk((MYIOC_s_INFO_FMT "Calling IOC pre_reset handler #%d\n",
|
dprintk((MYIOC_s_INFO_FMT "Calling IOC pre_reset handler #%d\n",
|
||||||
ioc->name, ii));
|
ioc->name, ii));
|
||||||
r += (*(MptResetHandlers[ii]))(ioc, MPT_IOC_PRE_RESET);
|
r += mpt_signal_reset(ii, ioc, MPT_IOC_PRE_RESET);
|
||||||
if (ioc->alt_ioc) {
|
if (ioc->alt_ioc) {
|
||||||
dprintk((MYIOC_s_INFO_FMT "Calling alt-%s pre_reset handler #%d\n",
|
dprintk((MYIOC_s_INFO_FMT "Calling alt-%s pre_reset handler #%d\n",
|
||||||
ioc->name, ioc->alt_ioc->name, ii));
|
ioc->name, ioc->alt_ioc->name, ii));
|
||||||
r += (*(MptResetHandlers[ii]))(ioc->alt_ioc, MPT_IOC_PRE_RESET);
|
r += mpt_signal_reset(ii, ioc->alt_ioc, MPT_IOC_PRE_RESET);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5706,11 +5721,11 @@ mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag)
|
|||||||
if (MptResetHandlers[ii]) {
|
if (MptResetHandlers[ii]) {
|
||||||
dtmprintk((MYIOC_s_INFO_FMT "Calling IOC reset_setup handler #%d\n",
|
dtmprintk((MYIOC_s_INFO_FMT "Calling IOC reset_setup handler #%d\n",
|
||||||
ioc->name, ii));
|
ioc->name, ii));
|
||||||
r += (*(MptResetHandlers[ii]))(ioc, MPT_IOC_SETUP_RESET);
|
r += mpt_signal_reset(ii, ioc, MPT_IOC_SETUP_RESET);
|
||||||
if (ioc->alt_ioc) {
|
if (ioc->alt_ioc) {
|
||||||
dtmprintk((MYIOC_s_INFO_FMT "Calling alt-%s setup reset handler #%d\n",
|
dtmprintk((MYIOC_s_INFO_FMT "Calling alt-%s setup reset handler #%d\n",
|
||||||
ioc->name, ioc->alt_ioc->name, ii));
|
ioc->name, ioc->alt_ioc->name, ii));
|
||||||
r += (*(MptResetHandlers[ii]))(ioc->alt_ioc, MPT_IOC_SETUP_RESET);
|
r += mpt_signal_reset(ii, ioc->alt_ioc, MPT_IOC_SETUP_RESET);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -982,6 +982,12 @@ static int device_check(ppa_struct *dev)
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ppa_adjust_queue(struct scsi_device *device)
|
||||||
|
{
|
||||||
|
blk_queue_bounce_limit(device->request_queue, BLK_BOUNCE_HIGH);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static struct scsi_host_template ppa_template = {
|
static struct scsi_host_template ppa_template = {
|
||||||
.module = THIS_MODULE,
|
.module = THIS_MODULE,
|
||||||
.proc_name = "ppa",
|
.proc_name = "ppa",
|
||||||
@@ -997,6 +1003,7 @@ static struct scsi_host_template ppa_template = {
|
|||||||
.cmd_per_lun = 1,
|
.cmd_per_lun = 1,
|
||||||
.use_clustering = ENABLE_CLUSTERING,
|
.use_clustering = ENABLE_CLUSTERING,
|
||||||
.can_queue = 1,
|
.can_queue = 1,
|
||||||
|
.slave_alloc = ppa_adjust_queue,
|
||||||
};
|
};
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
@@ -165,6 +165,7 @@ static struct {
|
|||||||
{"HP", "HSV100", NULL, BLIST_REPORTLUN2 | BLIST_NOSTARTONADD},
|
{"HP", "HSV100", NULL, BLIST_REPORTLUN2 | BLIST_NOSTARTONADD},
|
||||||
{"HP", "C1557A", NULL, BLIST_FORCELUN},
|
{"HP", "C1557A", NULL, BLIST_FORCELUN},
|
||||||
{"HP", "C3323-300", "4269", BLIST_NOTQ},
|
{"HP", "C3323-300", "4269", BLIST_NOTQ},
|
||||||
|
{"HP", "C5713A", NULL, BLIST_NOREPORTLUN},
|
||||||
{"IBM", "AuSaV1S2", NULL, BLIST_FORCELUN},
|
{"IBM", "AuSaV1S2", NULL, BLIST_FORCELUN},
|
||||||
{"IBM", "ProFibre 4000R", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
|
{"IBM", "ProFibre 4000R", "*", BLIST_SPARSELUN | BLIST_LARGELUN},
|
||||||
{"IBM", "2105", NULL, BLIST_RETRY_HWERROR},
|
{"IBM", "2105", NULL, BLIST_RETRY_HWERROR},
|
||||||
|
@@ -367,7 +367,7 @@ static int scsi_req_map_sg(struct request *rq, struct scatterlist *sgl,
|
|||||||
int nsegs, unsigned bufflen, gfp_t gfp)
|
int nsegs, unsigned bufflen, gfp_t gfp)
|
||||||
{
|
{
|
||||||
struct request_queue *q = rq->q;
|
struct request_queue *q = rq->q;
|
||||||
int nr_pages = (bufflen + PAGE_SIZE - 1) >> PAGE_SHIFT;
|
int nr_pages = (bufflen + sgl[0].offset + PAGE_SIZE - 1) >> PAGE_SHIFT;
|
||||||
unsigned int data_len = 0, len, bytes, off;
|
unsigned int data_len = 0, len, bytes, off;
|
||||||
struct page *page;
|
struct page *page;
|
||||||
struct bio *bio = NULL;
|
struct bio *bio = NULL;
|
||||||
|
@@ -955,7 +955,8 @@ static int sas_user_scan(struct Scsi_Host *shost, uint channel,
|
|||||||
list_for_each_entry(rphy, &sas_host->rphy_list, list) {
|
list_for_each_entry(rphy, &sas_host->rphy_list, list) {
|
||||||
struct sas_phy *parent = dev_to_phy(rphy->dev.parent);
|
struct sas_phy *parent = dev_to_phy(rphy->dev.parent);
|
||||||
|
|
||||||
if (rphy->scsi_target_id == -1)
|
if (rphy->identify.device_type != SAS_END_DEVICE ||
|
||||||
|
rphy->scsi_target_id == -1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ((channel == SCAN_WILD_CARD || channel == parent->port_identifier) &&
|
if ((channel == SCAN_WILD_CARD || channel == parent->port_identifier) &&
|
||||||
@@ -977,7 +978,6 @@ static int sas_user_scan(struct Scsi_Host *shost, uint channel,
|
|||||||
#define SETUP_TEMPLATE(attrb, field, perm, test) \
|
#define SETUP_TEMPLATE(attrb, field, perm, test) \
|
||||||
i->private_##attrb[count] = class_device_attr_##field; \
|
i->private_##attrb[count] = class_device_attr_##field; \
|
||||||
i->private_##attrb[count].attr.mode = perm; \
|
i->private_##attrb[count].attr.mode = perm; \
|
||||||
i->private_##attrb[count].store = NULL; \
|
|
||||||
i->attrb[count] = &i->private_##attrb[count]; \
|
i->attrb[count] = &i->private_##attrb[count]; \
|
||||||
if (test) \
|
if (test) \
|
||||||
count++
|
count++
|
||||||
|
Reference in New Issue
Block a user