Commit e7f76552 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

scsi: don't use disk->private_data to find the scsi_driver



Requiring every ULP to have the scsi_drive as first member of the
private data is rather fragile and not necessary anyway.  Just use
the driver hanging off the SCSI device instead.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
Reviewed-by: default avatarChaitanya Kulkarni <kch@nvidia.com>
Reviewed-by: default avatarMing Lei <ming.lei@redhat.com>
Reviewed-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Link: https://lore.kernel.org/r/20220308055200.735835-4-hch@lst.de


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent e02657ea
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -3515,7 +3515,6 @@ static int sd_probe(struct device *dev)
	}

	sdkp->device = sdp;
	sdkp->driver = &sd_template;
	sdkp->disk = gd;
	sdkp->index = index;
	sdkp->max_retries = SD_MAX_RETRIES;
@@ -3548,7 +3547,7 @@ static int sd_probe(struct device *dev)
	gd->minors = SD_MINORS;

	gd->fops = &sd_fops;
	gd->private_data = &sdkp->driver;
	gd->private_data = sdkp;

	/* defaults, until the device tells us otherwise */
	sdp->sector_size = 512;
+1 −2
Original line number Diff line number Diff line
@@ -68,7 +68,6 @@ enum {
};

struct scsi_disk {
	struct scsi_driver *driver;	/* always &sd_template */
	struct scsi_device *device;
	struct device	dev;
	struct gendisk	*disk;
@@ -131,7 +130,7 @@ struct scsi_disk {

static inline struct scsi_disk *scsi_disk(struct gendisk *disk)
{
	return container_of(disk->private_data, struct scsi_disk, driver);
	return disk->private_data;
}

#define sd_printk(prefix, sdsk, fmt, a...)				\
+2 −3
Original line number Diff line number Diff line
@@ -147,7 +147,7 @@ static void sr_kref_release(struct kref *kref);

static inline struct scsi_cd *scsi_cd(struct gendisk *disk)
{
	return container_of(disk->private_data, struct scsi_cd, driver);
	return disk->private_data;
}

static int sr_runtime_suspend(struct device *dev)
@@ -692,7 +692,6 @@ static int sr_probe(struct device *dev)

	cd->device = sdev;
	cd->disk = disk;
	cd->driver = &sr_template;
	cd->capacity = 0x1fffff;
	cd->device->changed = 1;	/* force recheck CD type */
	cd->media_present = 1;
@@ -713,7 +712,7 @@ static int sr_probe(struct device *dev)
	sr_vendor_init(cd);

	set_capacity(disk, cd->capacity);
	disk->private_data = &cd->driver;
	disk->private_data = cd;

	if (register_cdrom(disk, &cd->cdi))
		goto fail_minor;
+0 −1
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ struct scsi_device;


typedef struct scsi_cd {
	struct scsi_driver *driver;
	unsigned capacity;	/* size in blocks                       */
	struct scsi_device *device;
	unsigned int vendor;	/* vendor code, see sr_vendor.c         */
+0 −1
Original line number Diff line number Diff line
@@ -4276,7 +4276,6 @@ static int st_probe(struct device *dev)
		goto out_buffer_free;
	}
	kref_init(&tpnt->kref);
	tpnt->driver = &st_template;

	tpnt->device = SDp;
	if (SDp->scsi_level <= 2)
Loading