aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-04-09 15:00:42 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-04-09 15:00:42 -0400
commitfb41b4be00270f5b28784a31a458a4dcf4519b9e (patch)
tree0b290e379051e4e1db71e63ed5dc1e943379fb1b
parent63b106a87dd84283e21aa2ce476732633eaab11d (diff)
parent6ea7e3873e52902af9ee8c0837450fdb69d54140 (diff)
Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI fixes from James Bottomley: "This is a set of eight fixes. Two are trivial gcc-6 updates (brace additions and unused variable removal). There's a couple of cxlflash regressions, a correction for sd being overly chatty on revalidation (causing excess log increases). A VPD issue which could crash USB devices because they seem very intolerant to VPD inquiries, an ALUA deadlock fix and a mpt3sas buffer overrun fix" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: scsi: Do not attach VPD to devices that don't support it sd: Fix excessive capacity printing on devices with blocks bigger than 512 bytes scsi_dh_alua: Fix a recently introduced deadlock scsi: Declare local symbols static cxlflash: Move to exponential back-off when cmd_room is not available cxlflash: Fix regression issue with re-ordering patch mpt3sas: Don't overreach ioc->reply_post[] during initialization aacraid: add missing curly braces
-rw-r--r--drivers/scsi/aacraid/linit.c3
-rw-r--r--drivers/scsi/cxlflash/main.c138
-rw-r--r--drivers/scsi/cxlflash/main.h5
-rw-r--r--drivers/scsi/device_handler/scsi_dh_alua.c4
-rw-r--r--drivers/scsi/mpt3sas/mpt3sas_base.c33
-rw-r--r--drivers/scsi/scsi.c3
-rw-r--r--drivers/scsi/scsi_sysfs.c8
-rw-r--r--drivers/scsi/sd.c47
-rw-r--r--drivers/scsi/sd.h7
-rw-r--r--include/scsi/scsi_device.h25
10 files changed, 164 insertions, 109 deletions
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index 21a67ed047e8..ff6caab8cc8b 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -452,10 +452,11 @@ static int aac_slave_configure(struct scsi_device *sdev)
452 else if (depth < 2) 452 else if (depth < 2)
453 depth = 2; 453 depth = 2;
454 scsi_change_queue_depth(sdev, depth); 454 scsi_change_queue_depth(sdev, depth);
455 } else 455 } else {
456 scsi_change_queue_depth(sdev, 1); 456 scsi_change_queue_depth(sdev, 1);
457 457
458 sdev->tagged_supported = 1; 458 sdev->tagged_supported = 1;
459 }
459 460
460 return 0; 461 return 0;
461} 462}
diff --git a/drivers/scsi/cxlflash/main.c b/drivers/scsi/cxlflash/main.c
index 35968bdb4866..8fb9643fe6e3 100644
--- a/drivers/scsi/cxlflash/main.c
+++ b/drivers/scsi/cxlflash/main.c
@@ -289,7 +289,7 @@ static void context_reset(struct afu_cmd *cmd)
289 atomic64_set(&afu->room, room); 289 atomic64_set(&afu->room, room);
290 if (room) 290 if (room)
291 goto write_rrin; 291 goto write_rrin;
292 udelay(nretry); 292 udelay(1 << nretry);
293 } while (nretry++ < MC_ROOM_RETRY_CNT); 293 } while (nretry++ < MC_ROOM_RETRY_CNT);
294 294
295 pr_err("%s: no cmd_room to send reset\n", __func__); 295 pr_err("%s: no cmd_room to send reset\n", __func__);
@@ -303,7 +303,7 @@ write_rrin:
303 if (rrin != 0x1) 303 if (rrin != 0x1)
304 break; 304 break;
305 /* Double delay each time */ 305 /* Double delay each time */
306 udelay(2 << nretry); 306 udelay(1 << nretry);
307 } while (nretry++ < MC_ROOM_RETRY_CNT); 307 } while (nretry++ < MC_ROOM_RETRY_CNT);
308} 308}
309 309
@@ -338,7 +338,7 @@ retry:
338 atomic64_set(&afu->room, room); 338 atomic64_set(&afu->room, room);
339 if (room) 339 if (room)
340 goto write_ioarrin; 340 goto write_ioarrin;
341 udelay(nretry); 341 udelay(1 << nretry);
342 } while (nretry++ < MC_ROOM_RETRY_CNT); 342 } while (nretry++ < MC_ROOM_RETRY_CNT);
343 343
344 dev_err(dev, "%s: no cmd_room to send 0x%X\n", 344 dev_err(dev, "%s: no cmd_room to send 0x%X\n",
@@ -352,7 +352,7 @@ retry:
352 * afu->room. 352 * afu->room.
353 */ 353 */
354 if (nretry++ < MC_ROOM_RETRY_CNT) { 354 if (nretry++ < MC_ROOM_RETRY_CNT) {
355 udelay(nretry); 355 udelay(1 << nretry);
356 goto retry; 356 goto retry;
357 } 357 }
358 358
@@ -683,28 +683,23 @@ static void stop_afu(struct cxlflash_cfg *cfg)
683} 683}
684 684
685/** 685/**
686 * term_mc() - terminates the master context 686 * term_intr() - disables all AFU interrupts
687 * @cfg: Internal structure associated with the host. 687 * @cfg: Internal structure associated with the host.
688 * @level: Depth of allocation, where to begin waterfall tear down. 688 * @level: Depth of allocation, where to begin waterfall tear down.
689 * 689 *
690 * Safe to call with AFU/MC in partially allocated/initialized state. 690 * Safe to call with AFU/MC in partially allocated/initialized state.
691 */ 691 */
692static void term_mc(struct cxlflash_cfg *cfg, enum undo_level level) 692static void term_intr(struct cxlflash_cfg *cfg, enum undo_level level)
693{ 693{
694 int rc = 0;
695 struct afu *afu = cfg->afu; 694 struct afu *afu = cfg->afu;
696 struct device *dev = &cfg->dev->dev; 695 struct device *dev = &cfg->dev->dev;
697 696
698 if (!afu || !cfg->mcctx) { 697 if (!afu || !cfg->mcctx) {
699 dev_err(dev, "%s: returning from term_mc with NULL afu or MC\n", 698 dev_err(dev, "%s: returning with NULL afu or MC\n", __func__);
700 __func__);
701 return; 699 return;
702 } 700 }
703 701
704 switch (level) { 702 switch (level) {
705 case UNDO_START:
706 rc = cxl_stop_context(cfg->mcctx);
707 BUG_ON(rc);
708 case UNMAP_THREE: 703 case UNMAP_THREE:
709 cxl_unmap_afu_irq(cfg->mcctx, 3, afu); 704 cxl_unmap_afu_irq(cfg->mcctx, 3, afu);
710 case UNMAP_TWO: 705 case UNMAP_TWO:
@@ -713,9 +708,34 @@ static void term_mc(struct cxlflash_cfg *cfg, enum undo_level level)
713 cxl_unmap_afu_irq(cfg->mcctx, 1, afu); 708 cxl_unmap_afu_irq(cfg->mcctx, 1, afu);
714 case FREE_IRQ: 709 case FREE_IRQ:
715 cxl_free_afu_irqs(cfg->mcctx); 710 cxl_free_afu_irqs(cfg->mcctx);
716 case RELEASE_CONTEXT: 711 /* fall through */
717 cfg->mcctx = NULL; 712 case UNDO_NOOP:
713 /* No action required */
714 break;
715 }
716}
717
718/**
719 * term_mc() - terminates the master context
720 * @cfg: Internal structure associated with the host.
721 * @level: Depth of allocation, where to begin waterfall tear down.
722 *
723 * Safe to call with AFU/MC in partially allocated/initialized state.
724 */
725static void term_mc(struct cxlflash_cfg *cfg)
726{
727 int rc = 0;
728 struct afu *afu = cfg->afu;
729 struct device *dev = &cfg->dev->dev;
730
731 if (!afu || !cfg->mcctx) {
732 dev_err(dev, "%s: returning with NULL afu or MC\n", __func__);
733 return;
718 } 734 }
735
736 rc = cxl_stop_context(cfg->mcctx);
737 WARN_ON(rc);
738 cfg->mcctx = NULL;
719} 739}
720 740
721/** 741/**
@@ -726,10 +746,20 @@ static void term_mc(struct cxlflash_cfg *cfg, enum undo_level level)
726 */ 746 */
727static void term_afu(struct cxlflash_cfg *cfg) 747static void term_afu(struct cxlflash_cfg *cfg)
728{ 748{
749 /*
750 * Tear down is carefully orchestrated to ensure
751 * no interrupts can come in when the problem state
752 * area is unmapped.
753 *
754 * 1) Disable all AFU interrupts
755 * 2) Unmap the problem state area
756 * 3) Stop the master context
757 */
758 term_intr(cfg, UNMAP_THREE);
729 if (cfg->afu) 759 if (cfg->afu)
730 stop_afu(cfg); 760 stop_afu(cfg);
731 761
732 term_mc(cfg, UNDO_START); 762 term_mc(cfg);
733 763
734 pr_debug("%s: returning\n", __func__); 764 pr_debug("%s: returning\n", __func__);
735} 765}
@@ -1597,41 +1627,24 @@ static int start_afu(struct cxlflash_cfg *cfg)
1597} 1627}
1598 1628
1599/** 1629/**
1600 * init_mc() - create and register as the master context 1630 * init_intr() - setup interrupt handlers for the master context
1601 * @cfg: Internal structure associated with the host. 1631 * @cfg: Internal structure associated with the host.
1602 * 1632 *
1603 * Return: 0 on success, -errno on failure 1633 * Return: 0 on success, -errno on failure
1604 */ 1634 */
1605static int init_mc(struct cxlflash_cfg *cfg) 1635static enum undo_level init_intr(struct cxlflash_cfg *cfg,
1636 struct cxl_context *ctx)
1606{ 1637{
1607 struct cxl_context *ctx;
1608 struct device *dev = &cfg->dev->dev;
1609 struct afu *afu = cfg->afu; 1638 struct afu *afu = cfg->afu;
1639 struct device *dev = &cfg->dev->dev;
1610 int rc = 0; 1640 int rc = 0;
1611 enum undo_level level; 1641 enum undo_level level = UNDO_NOOP;
1612
1613 ctx = cxl_get_context(cfg->dev);
1614 if (unlikely(!ctx))
1615 return -ENOMEM;
1616 cfg->mcctx = ctx;
1617
1618 /* Set it up as a master with the CXL */
1619 cxl_set_master(ctx);
1620
1621 /* During initialization reset the AFU to start from a clean slate */
1622 rc = cxl_afu_reset(cfg->mcctx);
1623 if (unlikely(rc)) {
1624 dev_err(dev, "%s: initial AFU reset failed rc=%d\n",
1625 __func__, rc);
1626 level = RELEASE_CONTEXT;
1627 goto out;
1628 }
1629 1642
1630 rc = cxl_allocate_afu_irqs(ctx, 3); 1643 rc = cxl_allocate_afu_irqs(ctx, 3);
1631 if (unlikely(rc)) { 1644 if (unlikely(rc)) {
1632 dev_err(dev, "%s: call to allocate_afu_irqs failed rc=%d!\n", 1645 dev_err(dev, "%s: call to allocate_afu_irqs failed rc=%d!\n",
1633 __func__, rc); 1646 __func__, rc);
1634 level = RELEASE_CONTEXT; 1647 level = UNDO_NOOP;
1635 goto out; 1648 goto out;
1636 } 1649 }
1637 1650
@@ -1661,8 +1674,47 @@ static int init_mc(struct cxlflash_cfg *cfg)
1661 level = UNMAP_TWO; 1674 level = UNMAP_TWO;
1662 goto out; 1675 goto out;
1663 } 1676 }
1677out:
1678 return level;
1679}
1664 1680
1665 rc = 0; 1681/**
1682 * init_mc() - create and register as the master context
1683 * @cfg: Internal structure associated with the host.
1684 *
1685 * Return: 0 on success, -errno on failure
1686 */
1687static int init_mc(struct cxlflash_cfg *cfg)
1688{
1689 struct cxl_context *ctx;
1690 struct device *dev = &cfg->dev->dev;
1691 int rc = 0;
1692 enum undo_level level;
1693
1694 ctx = cxl_get_context(cfg->dev);
1695 if (unlikely(!ctx)) {
1696 rc = -ENOMEM;
1697 goto ret;
1698 }
1699 cfg->mcctx = ctx;
1700
1701 /* Set it up as a master with the CXL */
1702 cxl_set_master(ctx);
1703
1704 /* During initialization reset the AFU to start from a clean slate */
1705 rc = cxl_afu_reset(cfg->mcctx);
1706 if (unlikely(rc)) {
1707 dev_err(dev, "%s: initial AFU reset failed rc=%d\n",
1708 __func__, rc);
1709 goto ret;
1710 }
1711
1712 level = init_intr(cfg, ctx);
1713 if (unlikely(level)) {
1714 dev_err(dev, "%s: setting up interrupts failed rc=%d\n",
1715 __func__, rc);
1716 goto out;
1717 }
1666 1718
1667 /* This performs the equivalent of the CXL_IOCTL_START_WORK. 1719 /* This performs the equivalent of the CXL_IOCTL_START_WORK.
1668 * The CXL_IOCTL_GET_PROCESS_ELEMENT is implicit in the process 1720 * The CXL_IOCTL_GET_PROCESS_ELEMENT is implicit in the process
@@ -1678,7 +1730,7 @@ ret:
1678 pr_debug("%s: returning rc=%d\n", __func__, rc); 1730 pr_debug("%s: returning rc=%d\n", __func__, rc);
1679 return rc; 1731 return rc;
1680out: 1732out:
1681 term_mc(cfg, level); 1733 term_intr(cfg, level);
1682 goto ret; 1734 goto ret;
1683} 1735}
1684 1736
@@ -1751,7 +1803,8 @@ out:
1751err2: 1803err2:
1752 kref_put(&afu->mapcount, afu_unmap); 1804 kref_put(&afu->mapcount, afu_unmap);
1753err1: 1805err1:
1754 term_mc(cfg, UNDO_START); 1806 term_intr(cfg, UNMAP_THREE);
1807 term_mc(cfg);
1755 goto out; 1808 goto out;
1756} 1809}
1757 1810
@@ -2488,8 +2541,7 @@ static pci_ers_result_t cxlflash_pci_error_detected(struct pci_dev *pdev,
2488 if (unlikely(rc)) 2541 if (unlikely(rc))
2489 dev_err(dev, "%s: Failed to mark user contexts!(%d)\n", 2542 dev_err(dev, "%s: Failed to mark user contexts!(%d)\n",
2490 __func__, rc); 2543 __func__, rc);
2491 stop_afu(cfg); 2544 term_afu(cfg);
2492 term_mc(cfg, UNDO_START);
2493 return PCI_ERS_RESULT_NEED_RESET; 2545 return PCI_ERS_RESULT_NEED_RESET;
2494 case pci_channel_io_perm_failure: 2546 case pci_channel_io_perm_failure:
2495 cfg->state = STATE_FAILTERM; 2547 cfg->state = STATE_FAILTERM;
diff --git a/drivers/scsi/cxlflash/main.h b/drivers/scsi/cxlflash/main.h
index 0faed422c7f4..eb9d8f730b38 100644
--- a/drivers/scsi/cxlflash/main.h
+++ b/drivers/scsi/cxlflash/main.h
@@ -79,12 +79,11 @@
79#define WWPN_BUF_LEN (WWPN_LEN + 1) 79#define WWPN_BUF_LEN (WWPN_LEN + 1)
80 80
81enum undo_level { 81enum undo_level {
82 RELEASE_CONTEXT = 0, 82 UNDO_NOOP = 0,
83 FREE_IRQ, 83 FREE_IRQ,
84 UNMAP_ONE, 84 UNMAP_ONE,
85 UNMAP_TWO, 85 UNMAP_TWO,
86 UNMAP_THREE, 86 UNMAP_THREE
87 UNDO_START
88}; 87};
89 88
90struct dev_dependent_vals { 89struct dev_dependent_vals {
diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c
index a404a41e871c..8eaed0522aa3 100644
--- a/drivers/scsi/device_handler/scsi_dh_alua.c
+++ b/drivers/scsi/device_handler/scsi_dh_alua.c
@@ -1112,9 +1112,9 @@ static void alua_bus_detach(struct scsi_device *sdev)
1112 h->sdev = NULL; 1112 h->sdev = NULL;
1113 spin_unlock(&h->pg_lock); 1113 spin_unlock(&h->pg_lock);
1114 if (pg) { 1114 if (pg) {
1115 spin_lock(&pg->lock); 1115 spin_lock_irq(&pg->lock);
1116 list_del_rcu(&h->node); 1116 list_del_rcu(&h->node);
1117 spin_unlock(&pg->lock); 1117 spin_unlock_irq(&pg->lock);
1118 kref_put(&pg->kref, release_port_group); 1118 kref_put(&pg->kref, release_port_group);
1119 } 1119 }
1120 sdev->handler_data = NULL; 1120 sdev->handler_data = NULL;
diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index e4db5fb3239a..8c44b9c424af 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -5030,7 +5030,7 @@ _base_make_ioc_ready(struct MPT3SAS_ADAPTER *ioc, int sleep_flag,
5030static int 5030static int
5031_base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc, int sleep_flag) 5031_base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
5032{ 5032{
5033 int r, i; 5033 int r, i, index;
5034 unsigned long flags; 5034 unsigned long flags;
5035 u32 reply_address; 5035 u32 reply_address;
5036 u16 smid; 5036 u16 smid;
@@ -5039,8 +5039,7 @@ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
5039 struct _event_ack_list *delayed_event_ack, *delayed_event_ack_next; 5039 struct _event_ack_list *delayed_event_ack, *delayed_event_ack_next;
5040 u8 hide_flag; 5040 u8 hide_flag;
5041 struct adapter_reply_queue *reply_q; 5041 struct adapter_reply_queue *reply_q;
5042 long reply_post_free; 5042 Mpi2ReplyDescriptorsUnion_t *reply_post_free_contig;
5043 u32 reply_post_free_sz, index = 0;
5044 5043
5045 dinitprintk(ioc, pr_info(MPT3SAS_FMT "%s\n", ioc->name, 5044 dinitprintk(ioc, pr_info(MPT3SAS_FMT "%s\n", ioc->name,
5046 __func__)); 5045 __func__));
@@ -5124,27 +5123,27 @@ _base_make_ioc_operational(struct MPT3SAS_ADAPTER *ioc, int sleep_flag)
5124 _base_assign_reply_queues(ioc); 5123 _base_assign_reply_queues(ioc);
5125 5124
5126 /* initialize Reply Post Free Queue */ 5125 /* initialize Reply Post Free Queue */
5127 reply_post_free_sz = ioc->reply_post_queue_depth * 5126 index = 0;
5128 sizeof(Mpi2DefaultReplyDescriptor_t); 5127 reply_post_free_contig = ioc->reply_post[0].reply_post_free;
5129 reply_post_free = (long)ioc->reply_post[index].reply_post_free;
5130 list_for_each_entry(reply_q, &ioc->reply_queue_list, list) { 5128 list_for_each_entry(reply_q, &ioc->reply_queue_list, list) {
5129 /*
5130 * If RDPQ is enabled, switch to the next allocation.
5131 * Otherwise advance within the contiguous region.
5132 */
5133 if (ioc->rdpq_array_enable) {
5134 reply_q->reply_post_free =
5135 ioc->reply_post[index++].reply_post_free;
5136 } else {
5137 reply_q->reply_post_free = reply_post_free_contig;
5138 reply_post_free_contig += ioc->reply_post_queue_depth;
5139 }
5140
5131 reply_q->reply_post_host_index = 0; 5141 reply_q->reply_post_host_index = 0;
5132 reply_q->reply_post_free = (Mpi2ReplyDescriptorsUnion_t *)
5133 reply_post_free;
5134 for (i = 0; i < ioc->reply_post_queue_depth; i++) 5142 for (i = 0; i < ioc->reply_post_queue_depth; i++)
5135 reply_q->reply_post_free[i].Words = 5143 reply_q->reply_post_free[i].Words =
5136 cpu_to_le64(ULLONG_MAX); 5144 cpu_to_le64(ULLONG_MAX);
5137 if (!_base_is_controller_msix_enabled(ioc)) 5145 if (!_base_is_controller_msix_enabled(ioc))
5138 goto skip_init_reply_post_free_queue; 5146 goto skip_init_reply_post_free_queue;
5139 /*
5140 * If RDPQ is enabled, switch to the next allocation.
5141 * Otherwise advance within the contiguous region.
5142 */
5143 if (ioc->rdpq_array_enable)
5144 reply_post_free = (long)
5145 ioc->reply_post[++index].reply_post_free;
5146 else
5147 reply_post_free += reply_post_free_sz;
5148 } 5147 }
5149 skip_init_reply_post_free_queue: 5148 skip_init_reply_post_free_queue:
5150 5149
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
index b1bf42b93fcc..1deb6adc411f 100644
--- a/drivers/scsi/scsi.c
+++ b/drivers/scsi/scsi.c
@@ -784,8 +784,9 @@ void scsi_attach_vpd(struct scsi_device *sdev)
784 int pg83_supported = 0; 784 int pg83_supported = 0;
785 unsigned char __rcu *vpd_buf, *orig_vpd_buf = NULL; 785 unsigned char __rcu *vpd_buf, *orig_vpd_buf = NULL;
786 786
787 if (sdev->skip_vpd_pages) 787 if (!scsi_device_supports_vpd(sdev))
788 return; 788 return;
789
789retry_pg0: 790retry_pg0:
790 vpd_buf = kmalloc(vpd_len, GFP_KERNEL); 791 vpd_buf = kmalloc(vpd_len, GFP_KERNEL);
791 if (!vpd_buf) 792 if (!vpd_buf)
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
index 92ffd2406f97..2b642b145be1 100644
--- a/drivers/scsi/scsi_sysfs.c
+++ b/drivers/scsi/scsi_sysfs.c
@@ -81,6 +81,7 @@ const char *scsi_host_state_name(enum scsi_host_state state)
81 return name; 81 return name;
82} 82}
83 83
84#ifdef CONFIG_SCSI_DH
84static const struct { 85static const struct {
85 unsigned char value; 86 unsigned char value;
86 char *name; 87 char *name;
@@ -94,7 +95,7 @@ static const struct {
94 { SCSI_ACCESS_STATE_TRANSITIONING, "transitioning" }, 95 { SCSI_ACCESS_STATE_TRANSITIONING, "transitioning" },
95}; 96};
96 97
97const char *scsi_access_state_name(unsigned char state) 98static const char *scsi_access_state_name(unsigned char state)
98{ 99{
99 int i; 100 int i;
100 char *name = NULL; 101 char *name = NULL;
@@ -107,6 +108,7 @@ const char *scsi_access_state_name(unsigned char state)
107 } 108 }
108 return name; 109 return name;
109} 110}
111#endif
110 112
111static int check_set(unsigned long long *val, char *src) 113static int check_set(unsigned long long *val, char *src)
112{ 114{
@@ -226,7 +228,7 @@ show_shost_state(struct device *dev, struct device_attribute *attr, char *buf)
226} 228}
227 229
228/* DEVICE_ATTR(state) clashes with dev_attr_state for sdev */ 230/* DEVICE_ATTR(state) clashes with dev_attr_state for sdev */
229struct device_attribute dev_attr_hstate = 231static struct device_attribute dev_attr_hstate =
230 __ATTR(state, S_IRUGO | S_IWUSR, show_shost_state, store_shost_state); 232 __ATTR(state, S_IRUGO | S_IWUSR, show_shost_state, store_shost_state);
231 233
232static ssize_t 234static ssize_t
@@ -401,7 +403,7 @@ static struct attribute *scsi_sysfs_shost_attrs[] = {
401 NULL 403 NULL
402}; 404};
403 405
404struct attribute_group scsi_shost_attr_group = { 406static struct attribute_group scsi_shost_attr_group = {
405 .attrs = scsi_sysfs_shost_attrs, 407 .attrs = scsi_sysfs_shost_attrs,
406}; 408};
407 409
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index 1bd0753f678a..f52b74cf8d1e 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -1275,18 +1275,19 @@ static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
1275 struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk); 1275 struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);
1276 struct scsi_device *sdp = sdkp->device; 1276 struct scsi_device *sdp = sdkp->device;
1277 struct Scsi_Host *host = sdp->host; 1277 struct Scsi_Host *host = sdp->host;
1278 sector_t capacity = logical_to_sectors(sdp, sdkp->capacity);
1278 int diskinfo[4]; 1279 int diskinfo[4];
1279 1280
1280 /* default to most commonly used values */ 1281 /* default to most commonly used values */
1281 diskinfo[0] = 0x40; /* 1 << 6 */ 1282 diskinfo[0] = 0x40; /* 1 << 6 */
1282 diskinfo[1] = 0x20; /* 1 << 5 */ 1283 diskinfo[1] = 0x20; /* 1 << 5 */
1283 diskinfo[2] = sdkp->capacity >> 11; 1284 diskinfo[2] = capacity >> 11;
1284 1285
1285 /* override with calculated, extended default, or driver values */ 1286 /* override with calculated, extended default, or driver values */
1286 if (host->hostt->bios_param) 1287 if (host->hostt->bios_param)
1287 host->hostt->bios_param(sdp, bdev, sdkp->capacity, diskinfo); 1288 host->hostt->bios_param(sdp, bdev, capacity, diskinfo);
1288 else 1289 else
1289 scsicam_bios_param(bdev, sdkp->capacity, diskinfo); 1290 scsicam_bios_param(bdev, capacity, diskinfo);
1290 1291
1291 geo->heads = diskinfo[0]; 1292 geo->heads = diskinfo[0];
1292 geo->sectors = diskinfo[1]; 1293 geo->sectors = diskinfo[1];
@@ -2337,14 +2338,6 @@ got_data:
2337 if (sdkp->capacity > 0xffffffff) 2338 if (sdkp->capacity > 0xffffffff)
2338 sdp->use_16_for_rw = 1; 2339 sdp->use_16_for_rw = 1;
2339 2340
2340 /* Rescale capacity to 512-byte units */
2341 if (sector_size == 4096)
2342 sdkp->capacity <<= 3;
2343 else if (sector_size == 2048)
2344 sdkp->capacity <<= 2;
2345 else if (sector_size == 1024)
2346 sdkp->capacity <<= 1;
2347
2348 blk_queue_physical_block_size(sdp->request_queue, 2341 blk_queue_physical_block_size(sdp->request_queue,
2349 sdkp->physical_block_size); 2342 sdkp->physical_block_size);
2350 sdkp->device->sector_size = sector_size; 2343 sdkp->device->sector_size = sector_size;
@@ -2795,28 +2788,6 @@ static void sd_read_write_same(struct scsi_disk *sdkp, unsigned char *buffer)
2795 sdkp->ws10 = 1; 2788 sdkp->ws10 = 1;
2796} 2789}
2797 2790
2798static int sd_try_extended_inquiry(struct scsi_device *sdp)
2799{
2800 /* Attempt VPD inquiry if the device blacklist explicitly calls
2801 * for it.
2802 */
2803 if (sdp->try_vpd_pages)
2804 return 1;
2805 /*
2806 * Although VPD inquiries can go to SCSI-2 type devices,
2807 * some USB ones crash on receiving them, and the pages
2808 * we currently ask for are for SPC-3 and beyond
2809 */
2810 if (sdp->scsi_level > SCSI_SPC_2 && !sdp->skip_vpd_pages)
2811 return 1;
2812 return 0;
2813}
2814
2815static inline u32 logical_to_sectors(struct scsi_device *sdev, u32 blocks)
2816{
2817 return blocks << (ilog2(sdev->sector_size) - 9);
2818}
2819
2820/** 2791/**
2821 * sd_revalidate_disk - called the first time a new disk is seen, 2792 * sd_revalidate_disk - called the first time a new disk is seen,
2822 * performs disk spin up, read_capacity, etc. 2793 * performs disk spin up, read_capacity, etc.
@@ -2856,7 +2827,7 @@ static int sd_revalidate_disk(struct gendisk *disk)
2856 if (sdkp->media_present) { 2827 if (sdkp->media_present) {
2857 sd_read_capacity(sdkp, buffer); 2828 sd_read_capacity(sdkp, buffer);
2858 2829
2859 if (sd_try_extended_inquiry(sdp)) { 2830 if (scsi_device_supports_vpd(sdp)) {
2860 sd_read_block_provisioning(sdkp); 2831 sd_read_block_provisioning(sdkp);
2861 sd_read_block_limits(sdkp); 2832 sd_read_block_limits(sdkp);
2862 sd_read_block_characteristics(sdkp); 2833 sd_read_block_characteristics(sdkp);
@@ -2900,7 +2871,7 @@ static int sd_revalidate_disk(struct gendisk *disk)
2900 /* Combine with controller limits */ 2871 /* Combine with controller limits */
2901 q->limits.max_sectors = min(rw_max, queue_max_hw_sectors(q)); 2872 q->limits.max_sectors = min(rw_max, queue_max_hw_sectors(q));
2902 2873
2903 set_capacity(disk, sdkp->capacity); 2874 set_capacity(disk, logical_to_sectors(sdp, sdkp->capacity));
2904 sd_config_write_same(sdkp); 2875 sd_config_write_same(sdkp);
2905 kfree(buffer); 2876 kfree(buffer);
2906 2877
diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h
index 5f2a84aff29f..654630bb7d0e 100644
--- a/drivers/scsi/sd.h
+++ b/drivers/scsi/sd.h
@@ -65,7 +65,7 @@ struct scsi_disk {
65 struct device dev; 65 struct device dev;
66 struct gendisk *disk; 66 struct gendisk *disk;
67 atomic_t openers; 67 atomic_t openers;
68 sector_t capacity; /* size in 512-byte sectors */ 68 sector_t capacity; /* size in logical blocks */
69 u32 max_xfer_blocks; 69 u32 max_xfer_blocks;
70 u32 opt_xfer_blocks; 70 u32 opt_xfer_blocks;
71 u32 max_ws_blocks; 71 u32 max_ws_blocks;
@@ -146,6 +146,11 @@ static inline int scsi_medium_access_command(struct scsi_cmnd *scmd)
146 return 0; 146 return 0;
147} 147}
148 148
149static inline sector_t logical_to_sectors(struct scsi_device *sdev, sector_t blocks)
150{
151 return blocks << (ilog2(sdev->sector_size) - 9);
152}
153
149/* 154/*
150 * A DIF-capable target device can be formatted with different 155 * A DIF-capable target device can be formatted with different
151 * protection schemes. Currently 0 through 3 are defined: 156 * protection schemes. Currently 0 through 3 are defined:
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index c067019ed12a..74d79bde7075 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -516,6 +516,31 @@ static inline int scsi_device_tpgs(struct scsi_device *sdev)
516 return sdev->inquiry ? (sdev->inquiry[5] >> 4) & 0x3 : 0; 516 return sdev->inquiry ? (sdev->inquiry[5] >> 4) & 0x3 : 0;
517} 517}
518 518
519/**
520 * scsi_device_supports_vpd - test if a device supports VPD pages
521 * @sdev: the &struct scsi_device to test
522 *
523 * If the 'try_vpd_pages' flag is set it takes precedence.
524 * Otherwise we will assume VPD pages are supported if the
525 * SCSI level is at least SPC-3 and 'skip_vpd_pages' is not set.
526 */
527static inline int scsi_device_supports_vpd(struct scsi_device *sdev)
528{
529 /* Attempt VPD inquiry if the device blacklist explicitly calls
530 * for it.
531 */
532 if (sdev->try_vpd_pages)
533 return 1;
534 /*
535 * Although VPD inquiries can go to SCSI-2 type devices,
536 * some USB ones crash on receiving them, and the pages
537 * we currently ask for are for SPC-3 and beyond
538 */
539 if (sdev->scsi_level > SCSI_SPC_2 && !sdev->skip_vpd_pages)
540 return 1;
541 return 0;
542}
543
519#define MODULE_ALIAS_SCSI_DEVICE(type) \ 544#define MODULE_ALIAS_SCSI_DEVICE(type) \
520 MODULE_ALIAS("scsi:t-" __stringify(type) "*") 545 MODULE_ALIAS("scsi:t-" __stringify(type) "*")
521#define SCSI_DEVICE_MODALIAS_FMT "scsi:t-0x%02x" 546#define SCSI_DEVICE_MODALIAS_FMT "scsi:t-0x%02x"