@@ -672,7 +672,7 @@ static struct scsi_disk *scsi_disk_get(struct gendisk *disk)
if (disk->private_data) {
sdkp = scsi_disk(disk);
if (scsi_device_get(sdkp->device) == 0)
- get_device(&sdkp->dev);
+ get_device(&sdkp->disk_dev);
else
sdkp = NULL;
}
@@ -685,7 +685,7 @@ static void scsi_disk_put(struct scsi_disk *sdkp)
struct scsi_device *sdev = sdkp->device;
mutex_lock(&sd_ref_mutex);
- put_device(&sdkp->dev);
+ put_device(&sdkp->disk_dev);
scsi_device_put(sdev);
mutex_unlock(&sd_ref_mutex);
}
@@ -3529,14 +3529,14 @@ static int sd_probe(struct device *dev)
SD_MOD_TIMEOUT);
}
- device_initialize(&sdkp->dev);
- sdkp->dev.parent = get_device(dev);
- sdkp->dev.class = &sd_disk_class;
- dev_set_name(&sdkp->dev, "%s", dev_name(dev));
+ device_initialize(&sdkp->disk_dev);
+ sdkp->disk_dev.parent = get_device(dev);
+ sdkp->disk_dev.class = &sd_disk_class;
+ dev_set_name(&sdkp->disk_dev, "%s", dev_name(dev));
- error = device_add(&sdkp->dev);
+ error = device_add(&sdkp->disk_dev);
if (error) {
- put_device(&sdkp->dev);
+ put_device(&sdkp->disk_dev);
goto out;
}
@@ -3577,7 +3577,7 @@ static int sd_probe(struct device *dev)
error = device_add_disk(dev, gd, NULL);
if (error) {
- put_device(&sdkp->dev);
+ put_device(&sdkp->disk_dev);
goto out;
}
@@ -3628,7 +3628,7 @@ static int sd_remove(struct device *dev)
sdkp = dev_get_drvdata(dev);
scsi_autopm_get_device(sdkp->device);
- device_del(&sdkp->dev);
+ device_del(&sdkp->disk_dev);
del_gendisk(sdkp->disk);
sd_shutdown(dev);
@@ -3636,7 +3636,7 @@ static int sd_remove(struct device *dev)
mutex_lock(&sd_ref_mutex);
dev_set_drvdata(dev, NULL);
- put_device(&sdkp->dev);
+ put_device(&sdkp->disk_dev);
mutex_unlock(&sd_ref_mutex);
return 0;
@@ -69,7 +69,13 @@ enum {
struct scsi_disk {
struct scsi_device *device;
- struct device dev;
+
+ /*
+ * This device is mostly just used to show a bunch of attributes in a
+ * weird place. In doubt don't add any new users, and most importantly
+ * don't use if for any actual refcounting.
+ */
+ struct device disk_dev;
struct gendisk *disk;
struct opal_dev *opal_dev;
#ifdef CONFIG_BLK_DEV_ZONED
@@ -126,7 +132,7 @@ struct scsi_disk {
unsigned security : 1;
unsigned ignore_medium_access_errors : 1;
};
-#define to_scsi_disk(obj) container_of(obj,struct scsi_disk,dev)
+#define to_scsi_disk(obj) container_of(obj, struct scsi_disk, disk_dev)
static inline struct scsi_disk *scsi_disk(struct gendisk *disk)
{
dev is very hard to grab for. Give the field a more descriptive name and documents it's purpose. Signed-off-by: Christoph Hellwig <hch@lst.de> --- drivers/scsi/sd.c | 22 +++++++++++----------- drivers/scsi/sd.h | 10 ++++++++-- 2 files changed, 19 insertions(+), 13 deletions(-)