diff options
| author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-03 12:12:50 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-03 12:12:50 -0400 |
| commit | 672c6108a51bf559d19595d9f8193dfd81f0f752 (patch) | |
| tree | d88dc7d2e8acb7e70193cf8bb888cc668d168fc6 | |
| parent | fb80a6e1a521eb298edb4365429d533dd39427fa (diff) | |
| parent | f52359622fa25783cf1a08c0772048d2ed1a7434 (diff) | |
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
| -rw-r--r-- | drivers/message/fusion/mptbase.c | 27 | ||||
| -rw-r--r-- | drivers/scsi/ppa.c | 7 | ||||
| -rw-r--r-- | drivers/scsi/scsi_devinfo.c | 1 | ||||
| -rw-r--r-- | drivers/scsi/scsi_lib.c | 2 | ||||
| -rw-r--r-- | drivers/scsi/scsi_transport_sas.c | 4 |
5 files changed, 32 insertions, 9 deletions
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c index 9080853fe283..a30084076ac8 100644 --- a/drivers/message/fusion/mptbase.c +++ b/drivers/message/fusion/mptbase.c | |||
| @@ -1605,6 +1605,21 @@ mpt_resume(struct pci_dev *pdev) | |||
| 1605 | } | 1605 | } |
| 1606 | #endif | 1606 | #endif |
| 1607 | 1607 | ||
| 1608 | static int | ||
| 1609 | mpt_signal_reset(int index, MPT_ADAPTER *ioc, int reset_phase) | ||
| 1610 | { | ||
| 1611 | if ((MptDriverClass[index] == MPTSPI_DRIVER && | ||
| 1612 | ioc->bus_type != SPI) || | ||
| 1613 | (MptDriverClass[index] == MPTFC_DRIVER && | ||
| 1614 | ioc->bus_type != FC) || | ||
| 1615 | (MptDriverClass[index] == MPTSAS_DRIVER && | ||
| 1616 | ioc->bus_type != SAS)) | ||
| 1617 | /* make sure we only call the relevant reset handler | ||
| 1618 | * for the bus */ | ||
| 1619 | return 0; | ||
| 1620 | return (MptResetHandlers[index])(ioc, reset_phase); | ||
| 1621 | } | ||
| 1622 | |||
| 1608 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ | 1623 | /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ |
| 1609 | /* | 1624 | /* |
| 1610 | * mpt_do_ioc_recovery - Initialize or recover MPT adapter. | 1625 | * mpt_do_ioc_recovery - Initialize or recover MPT adapter. |
| @@ -1885,14 +1900,14 @@ mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag) | |||
| 1885 | if ((ret == 0) && MptResetHandlers[ii]) { | 1900 | if ((ret == 0) && MptResetHandlers[ii]) { |
| 1886 | dprintk((MYIOC_s_INFO_FMT "Calling IOC post_reset handler #%d\n", | 1901 | dprintk((MYIOC_s_INFO_FMT "Calling IOC post_reset handler #%d\n", |
| 1887 | ioc->name, ii)); | 1902 | ioc->name, ii)); |
| 1888 | rc += (*(MptResetHandlers[ii]))(ioc, MPT_IOC_POST_RESET); | 1903 | rc += mpt_signal_reset(ii, ioc, MPT_IOC_POST_RESET); |
| 1889 | handlers++; | 1904 | handlers++; |
| 1890 | } | 1905 | } |
| 1891 | 1906 | ||
| 1892 | if (alt_ioc_ready && MptResetHandlers[ii]) { | 1907 | if (alt_ioc_ready && MptResetHandlers[ii]) { |
| 1893 | drsprintk((MYIOC_s_INFO_FMT "Calling alt-%s post_reset handler #%d\n", | 1908 | drsprintk((MYIOC_s_INFO_FMT "Calling alt-%s post_reset handler #%d\n", |
| 1894 | ioc->name, ioc->alt_ioc->name, ii)); | 1909 | ioc->name, ioc->alt_ioc->name, ii)); |
| 1895 | rc += (*(MptResetHandlers[ii]))(ioc->alt_ioc, MPT_IOC_POST_RESET); | 1910 | rc += mpt_signal_reset(ii, ioc->alt_ioc, MPT_IOC_POST_RESET); |
| 1896 | handlers++; | 1911 | handlers++; |
| 1897 | } | 1912 | } |
| 1898 | } | 1913 | } |
| @@ -3267,11 +3282,11 @@ mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag) | |||
| 3267 | if (MptResetHandlers[ii]) { | 3282 | if (MptResetHandlers[ii]) { |
| 3268 | dprintk((MYIOC_s_INFO_FMT "Calling IOC pre_reset handler #%d\n", | 3283 | dprintk((MYIOC_s_INFO_FMT "Calling IOC pre_reset handler #%d\n", |
| 3269 | ioc->name, ii)); | 3284 | ioc->name, ii)); |
| 3270 | r += (*(MptResetHandlers[ii]))(ioc, MPT_IOC_PRE_RESET); | 3285 | r += mpt_signal_reset(ii, ioc, MPT_IOC_PRE_RESET); |
| 3271 | if (ioc->alt_ioc) { | 3286 | if (ioc->alt_ioc) { |
| 3272 | dprintk((MYIOC_s_INFO_FMT "Calling alt-%s pre_reset handler #%d\n", | 3287 | dprintk((MYIOC_s_INFO_FMT "Calling alt-%s pre_reset handler #%d\n", |
| 3273 | ioc->name, ioc->alt_ioc->name, ii)); | 3288 | ioc->name, ioc->alt_ioc->name, ii)); |
| 3274 | r += (*(MptResetHandlers[ii]))(ioc->alt_ioc, MPT_IOC_PRE_RESET); | 3289 | r += mpt_signal_reset(ii, ioc->alt_ioc, MPT_IOC_PRE_RESET); |
| 3275 | } | 3290 | } |
| 3276 | } | 3291 | } |
| 3277 | } | 3292 | } |
| @@ -5706,11 +5721,11 @@ mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag) | |||
| 5706 | if (MptResetHandlers[ii]) { | 5721 | if (MptResetHandlers[ii]) { |
| 5707 | dtmprintk((MYIOC_s_INFO_FMT "Calling IOC reset_setup handler #%d\n", | 5722 | dtmprintk((MYIOC_s_INFO_FMT "Calling IOC reset_setup handler #%d\n", |
| 5708 | ioc->name, ii)); | 5723 | ioc->name, ii)); |
| 5709 | r += (*(MptResetHandlers[ii]))(ioc, MPT_IOC_SETUP_RESET); | 5724 | r += mpt_signal_reset(ii, ioc, MPT_IOC_SETUP_RESET); |
| 5710 | if (ioc->alt_ioc) { | 5725 | if (ioc->alt_ioc) { |
| 5711 | dtmprintk((MYIOC_s_INFO_FMT "Calling alt-%s setup reset handler #%d\n", | 5726 | dtmprintk((MYIOC_s_INFO_FMT "Calling alt-%s setup reset handler #%d\n", |
| 5712 | ioc->name, ioc->alt_ioc->name, ii)); | 5727 | ioc->name, ioc->alt_ioc->name, ii)); |
| 5713 | r += (*(MptResetHandlers[ii]))(ioc->alt_ioc, MPT_IOC_SETUP_RESET); | 5728 | r += mpt_signal_reset(ii, ioc->alt_ioc, MPT_IOC_SETUP_RESET); |
| 5714 | } | 5729 | } |
| 5715 | } | 5730 | } |
| 5716 | } | 5731 | } |
diff --git a/drivers/scsi/ppa.c b/drivers/scsi/ppa.c index fee843fab1c7..108910f512e4 100644 --- a/drivers/scsi/ppa.c +++ b/drivers/scsi/ppa.c | |||
| @@ -982,6 +982,12 @@ static int device_check(ppa_struct *dev) | |||
| 982 | return -ENODEV; | 982 | return -ENODEV; |
| 983 | } | 983 | } |
| 984 | 984 | ||
| 985 | static int ppa_adjust_queue(struct scsi_device *device) | ||
| 986 | { | ||
| 987 | blk_queue_bounce_limit(device->request_queue, BLK_BOUNCE_HIGH); | ||
| 988 | return 0; | ||
| 989 | } | ||
| 990 | |||
| 985 | static struct scsi_host_template ppa_template = { | 991 | static struct scsi_host_template ppa_template = { |
| 986 | .module = THIS_MODULE, | 992 | .module = THIS_MODULE, |
| 987 | .proc_name = "ppa", | 993 | .proc_name = "ppa", |
| @@ -997,6 +1003,7 @@ static struct scsi_host_template ppa_template = { | |||
| 997 | .cmd_per_lun = 1, | 1003 | .cmd_per_lun = 1, |
| 998 | .use_clustering = ENABLE_CLUSTERING, | 1004 | .use_clustering = ENABLE_CLUSTERING, |
| 999 | .can_queue = 1, | 1005 | .can_queue = 1, |
| 1006 | .slave_alloc = ppa_adjust_queue, | ||
| 1000 | }; | 1007 | }; |
| 1001 | 1008 | ||
| 1002 | /*************************************************************************** | 1009 | /*************************************************************************** |
diff --git a/drivers/scsi/scsi_devinfo.c b/drivers/scsi/scsi_devinfo.c index 941c1e15c899..62f8cb7b3d2b 100644 --- a/drivers/scsi/scsi_devinfo.c +++ b/drivers/scsi/scsi_devinfo.c | |||
| @@ -165,6 +165,7 @@ static struct { | |||
| 165 | {"HP", "HSV100", NULL, BLIST_REPORTLUN2 | BLIST_NOSTARTONADD}, | 165 | {"HP", "HSV100", NULL, BLIST_REPORTLUN2 | BLIST_NOSTARTONADD}, |
| 166 | {"HP", "C1557A", NULL, BLIST_FORCELUN}, | 166 | {"HP", "C1557A", NULL, BLIST_FORCELUN}, |
| 167 | {"HP", "C3323-300", "4269", BLIST_NOTQ}, | 167 | {"HP", "C3323-300", "4269", BLIST_NOTQ}, |
| 168 | {"HP", "C5713A", NULL, BLIST_NOREPORTLUN}, | ||
| 168 | {"IBM", "AuSaV1S2", NULL, BLIST_FORCELUN}, | 169 | {"IBM", "AuSaV1S2", NULL, BLIST_FORCELUN}, |
| 169 | {"IBM", "ProFibre 4000R", "*", BLIST_SPARSELUN | BLIST_LARGELUN}, | 170 | {"IBM", "ProFibre 4000R", "*", BLIST_SPARSELUN | BLIST_LARGELUN}, |
| 170 | {"IBM", "2105", NULL, BLIST_RETRY_HWERROR}, | 171 | {"IBM", "2105", NULL, BLIST_RETRY_HWERROR}, |
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 764a8b375ead..faee4757c03a 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
| @@ -367,7 +367,7 @@ static int scsi_req_map_sg(struct request *rq, struct scatterlist *sgl, | |||
| 367 | int nsegs, unsigned bufflen, gfp_t gfp) | 367 | int nsegs, unsigned bufflen, gfp_t gfp) |
| 368 | { | 368 | { |
| 369 | struct request_queue *q = rq->q; | 369 | struct request_queue *q = rq->q; |
| 370 | int nr_pages = (bufflen + PAGE_SIZE - 1) >> PAGE_SHIFT; | 370 | int nr_pages = (bufflen + sgl[0].offset + PAGE_SIZE - 1) >> PAGE_SHIFT; |
| 371 | unsigned int data_len = 0, len, bytes, off; | 371 | unsigned int data_len = 0, len, bytes, off; |
| 372 | struct page *page; | 372 | struct page *page; |
| 373 | struct bio *bio = NULL; | 373 | struct bio *bio = NULL; |
diff --git a/drivers/scsi/scsi_transport_sas.c b/drivers/scsi/scsi_transport_sas.c index 8b6d65e21bae..f3b16066387c 100644 --- a/drivers/scsi/scsi_transport_sas.c +++ b/drivers/scsi/scsi_transport_sas.c | |||
| @@ -955,7 +955,8 @@ static int sas_user_scan(struct Scsi_Host *shost, uint channel, | |||
| 955 | list_for_each_entry(rphy, &sas_host->rphy_list, list) { | 955 | list_for_each_entry(rphy, &sas_host->rphy_list, list) { |
| 956 | struct sas_phy *parent = dev_to_phy(rphy->dev.parent); | 956 | struct sas_phy *parent = dev_to_phy(rphy->dev.parent); |
| 957 | 957 | ||
| 958 | if (rphy->scsi_target_id == -1) | 958 | if (rphy->identify.device_type != SAS_END_DEVICE || |
| 959 | rphy->scsi_target_id == -1) | ||
| 959 | continue; | 960 | continue; |
| 960 | 961 | ||
| 961 | if ((channel == SCAN_WILD_CARD || channel == parent->port_identifier) && | 962 | if ((channel == SCAN_WILD_CARD || channel == parent->port_identifier) && |
| @@ -977,7 +978,6 @@ static int sas_user_scan(struct Scsi_Host *shost, uint channel, | |||
| 977 | #define SETUP_TEMPLATE(attrb, field, perm, test) \ | 978 | #define SETUP_TEMPLATE(attrb, field, perm, test) \ |
| 978 | i->private_##attrb[count] = class_device_attr_##field; \ | 979 | i->private_##attrb[count] = class_device_attr_##field; \ |
| 979 | i->private_##attrb[count].attr.mode = perm; \ | 980 | i->private_##attrb[count].attr.mode = perm; \ |
| 980 | i->private_##attrb[count].store = NULL; \ | ||
| 981 | i->attrb[count] = &i->private_##attrb[count]; \ | 981 | i->attrb[count] = &i->private_##attrb[count]; \ |
| 982 | if (test) \ | 982 | if (test) \ |
| 983 | count++ | 983 | count++ |
