diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-06-03 18:48:15 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-06-03 18:48:15 -0400 |
commit | ad8456361fa19068cf49b50a4f98e41b73c08e76 (patch) | |
tree | 281c96054fa2a8ca42ac47a4edfa6961cc463f29 /drivers/scsi | |
parent | 39d112100e561686ab1e2b19c57984163ad6c1fa (diff) | |
parent | d8d9129ea28e2177749627c82962feb26e8d11e9 (diff) |
Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev
* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev:
libata: implement on-demand HPA unlocking
libata: use the enlarged capacity after late HPA unlock
SCSI: implement sd_unlock_native_capacity()
libata-sff: trivial corrections to Kconfig help text
sata_nv: don't diddle with nIEN on mcp55
sata_via: magic vt6421 fix for transmission problems w/ WD drives
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/sd.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 829cc37abc41..8802e48bc063 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c | |||
@@ -97,6 +97,7 @@ MODULE_ALIAS_SCSI_DEVICE(TYPE_RBC); | |||
97 | #endif | 97 | #endif |
98 | 98 | ||
99 | static int sd_revalidate_disk(struct gendisk *); | 99 | static int sd_revalidate_disk(struct gendisk *); |
100 | static void sd_unlock_native_capacity(struct gendisk *disk); | ||
100 | static int sd_probe(struct device *); | 101 | static int sd_probe(struct device *); |
101 | static int sd_remove(struct device *); | 102 | static int sd_remove(struct device *); |
102 | static void sd_shutdown(struct device *); | 103 | static void sd_shutdown(struct device *); |
@@ -1101,6 +1102,7 @@ static const struct block_device_operations sd_fops = { | |||
1101 | #endif | 1102 | #endif |
1102 | .media_changed = sd_media_changed, | 1103 | .media_changed = sd_media_changed, |
1103 | .revalidate_disk = sd_revalidate_disk, | 1104 | .revalidate_disk = sd_revalidate_disk, |
1105 | .unlock_native_capacity = sd_unlock_native_capacity, | ||
1104 | }; | 1106 | }; |
1105 | 1107 | ||
1106 | static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd) | 1108 | static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd) |
@@ -2121,6 +2123,26 @@ static int sd_revalidate_disk(struct gendisk *disk) | |||
2121 | } | 2123 | } |
2122 | 2124 | ||
2123 | /** | 2125 | /** |
2126 | * sd_unlock_native_capacity - unlock native capacity | ||
2127 | * @disk: struct gendisk to set capacity for | ||
2128 | * | ||
2129 | * Block layer calls this function if it detects that partitions | ||
2130 | * on @disk reach beyond the end of the device. If the SCSI host | ||
2131 | * implements ->unlock_native_capacity() method, it's invoked to | ||
2132 | * give it a chance to adjust the device capacity. | ||
2133 | * | ||
2134 | * CONTEXT: | ||
2135 | * Defined by block layer. Might sleep. | ||
2136 | */ | ||
2137 | static void sd_unlock_native_capacity(struct gendisk *disk) | ||
2138 | { | ||
2139 | struct scsi_device *sdev = scsi_disk(disk)->device; | ||
2140 | |||
2141 | if (sdev->host->hostt->unlock_native_capacity) | ||
2142 | sdev->host->hostt->unlock_native_capacity(sdev); | ||
2143 | } | ||
2144 | |||
2145 | /** | ||
2124 | * sd_format_disk_name - format disk name | 2146 | * sd_format_disk_name - format disk name |
2125 | * @prefix: name prefix - ie. "sd" for SCSI disks | 2147 | * @prefix: name prefix - ie. "sd" for SCSI disks |
2126 | * @index: index of the disk to format name for | 2148 | * @index: index of the disk to format name for |