Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 72ec24bd authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik
Browse files

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: default avatarTejun Heo <tj@kernel.org>
Cc: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent ed4e2f80
Loading
Loading
Loading
Loading
+22 −0
Original line number Original line Diff line number Diff line
@@ -97,6 +97,7 @@ MODULE_ALIAS_SCSI_DEVICE(TYPE_RBC);
#endif
#endif


static int  sd_revalidate_disk(struct gendisk *);
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_probe(struct device *);
static int  sd_remove(struct device *);
static int  sd_remove(struct device *);
static void sd_shutdown(struct device *);
static void sd_shutdown(struct device *);
@@ -1101,6 +1102,7 @@ static const struct block_device_operations sd_fops = {
#endif
#endif
	.media_changed		= sd_media_changed,
	.media_changed		= sd_media_changed,
	.revalidate_disk	= sd_revalidate_disk,
	.revalidate_disk	= sd_revalidate_disk,
	.unlock_native_capacity	= sd_unlock_native_capacity,
};
};


static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)
static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)
@@ -2120,6 +2122,26 @@ static int sd_revalidate_disk(struct gendisk *disk)
	return 0;
	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
 *	sd_format_disk_name - format disk name
 *	@prefix: name prefix - ie. "sd" for SCSI disks
 *	@prefix: name prefix - ie. "sd" for SCSI disks
+8 −0
Original line number Original line Diff line number Diff line
@@ -326,6 +326,14 @@ struct scsi_host_template {
	int (* bios_param)(struct scsi_device *, struct block_device *,
	int (* bios_param)(struct scsi_device *, struct block_device *,
			sector_t, int []);
			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
	 * Can be used to export driver statistics and other infos to the
	 * world outside the kernel ie. userspace and it also provides an
	 * world outside the kernel ie. userspace and it also provides an