SCSI: implement sd_unlock_native_capacity()
Implement sd_unlock_native_capacity() method which calls into hostt->unlock_native_capacity() if implemented. This will be invoked by block layer if partitions extend beyond the end of the device and can be used to implement, for example, on-demand ATA host protected area unlocking. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Ben Hutchings <ben@decadent.org.uk> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
Родитель
ed4e2f801c
Коммит
72ec24bd77
|
@ -97,6 +97,7 @@ MODULE_ALIAS_SCSI_DEVICE(TYPE_RBC);
|
|||
#endif
|
||||
|
||||
static int sd_revalidate_disk(struct gendisk *);
|
||||
static void sd_unlock_native_capacity(struct gendisk *disk);
|
||||
static int sd_probe(struct device *);
|
||||
static int sd_remove(struct device *);
|
||||
static void sd_shutdown(struct device *);
|
||||
|
@ -1101,6 +1102,7 @@ static const struct block_device_operations sd_fops = {
|
|||
#endif
|
||||
.media_changed = sd_media_changed,
|
||||
.revalidate_disk = sd_revalidate_disk,
|
||||
.unlock_native_capacity = sd_unlock_native_capacity,
|
||||
};
|
||||
|
||||
static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)
|
||||
|
@ -2120,6 +2122,26 @@ static int sd_revalidate_disk(struct gendisk *disk)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* sd_unlock_native_capacity - unlock native capacity
|
||||
* @disk: struct gendisk to set capacity for
|
||||
*
|
||||
* Block layer calls this function if it detects that partitions
|
||||
* on @disk reach beyond the end of the device. If the SCSI host
|
||||
* implements ->unlock_native_capacity() method, it's invoked to
|
||||
* give it a chance to adjust the device capacity.
|
||||
*
|
||||
* CONTEXT:
|
||||
* Defined by block layer. Might sleep.
|
||||
*/
|
||||
static void sd_unlock_native_capacity(struct gendisk *disk)
|
||||
{
|
||||
struct scsi_device *sdev = scsi_disk(disk)->device;
|
||||
|
||||
if (sdev->host->hostt->unlock_native_capacity)
|
||||
sdev->host->hostt->unlock_native_capacity(sdev);
|
||||
}
|
||||
|
||||
/**
|
||||
* sd_format_disk_name - format disk name
|
||||
* @prefix: name prefix - ie. "sd" for SCSI disks
|
||||
|
|
|
@ -326,6 +326,14 @@ struct scsi_host_template {
|
|||
int (* bios_param)(struct scsi_device *, struct block_device *,
|
||||
sector_t, int []);
|
||||
|
||||
/*
|
||||
* This function is called when one or more partitions on the
|
||||
* device reach beyond the end of the device.
|
||||
*
|
||||
* Status: OPTIONAL
|
||||
*/
|
||||
void (*unlock_native_capacity)(struct scsi_device *);
|
||||
|
||||
/*
|
||||
* Can be used to export driver statistics and other infos to the
|
||||
* world outside the kernel ie. userspace and it also provides an
|
||||
|
|
Загрузка…
Ссылка в новой задаче