scsi: qla2xxx: remove double assignment in qla2x00_update_fcport
[linux-2.6-microblaze.git] / drivers / scsi / sd.c
index ebc8035..b2fef44 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0
 /*
  *      sd.c Copyright (C) 1992 Drew Eckhardt
  *           Copyright (C) 1993, 1994, 1995, 1999 Eric Youngdale
@@ -567,6 +568,7 @@ static struct scsi_driver sd_template = {
                .name           = "sd",
                .owner          = THIS_MODULE,
                .probe          = sd_probe,
+               .probe_type     = PROBE_PREFER_ASYNCHRONOUS,
                .remove         = sd_remove,
                .shutdown       = sd_shutdown,
                .pm             = &sd_pm_ops,
@@ -3252,69 +3254,6 @@ static int sd_format_disk_name(char *prefix, int index, char *buf, int buflen)
        return 0;
 }
 
-/*
- * The asynchronous part of sd_probe
- */
-static void sd_probe_async(void *data, async_cookie_t cookie)
-{
-       struct scsi_disk *sdkp = data;
-       struct scsi_device *sdp;
-       struct gendisk *gd;
-       u32 index;
-       struct device *dev;
-
-       sdp = sdkp->device;
-       gd = sdkp->disk;
-       index = sdkp->index;
-       dev = &sdp->sdev_gendev;
-
-       gd->major = sd_major((index & 0xf0) >> 4);
-       gd->first_minor = ((index & 0xf) << 4) | (index & 0xfff00);
-
-       gd->fops = &sd_fops;
-       gd->private_data = &sdkp->driver;
-       gd->queue = sdkp->device->request_queue;
-
-       /* defaults, until the device tells us otherwise */
-       sdp->sector_size = 512;
-       sdkp->capacity = 0;
-       sdkp->media_present = 1;
-       sdkp->write_prot = 0;
-       sdkp->cache_override = 0;
-       sdkp->WCE = 0;
-       sdkp->RCD = 0;
-       sdkp->ATO = 0;
-       sdkp->first_scan = 1;
-       sdkp->max_medium_access_timeouts = SD_MAX_MEDIUM_TIMEOUTS;
-
-       sd_revalidate_disk(gd);
-
-       gd->flags = GENHD_FL_EXT_DEVT;
-       if (sdp->removable) {
-               gd->flags |= GENHD_FL_REMOVABLE;
-               gd->events |= DISK_EVENT_MEDIA_CHANGE;
-               gd->event_flags = DISK_EVENT_FLAG_POLL | DISK_EVENT_FLAG_UEVENT;
-       }
-
-       blk_pm_runtime_init(sdp->request_queue, dev);
-       device_add_disk(dev, gd, NULL);
-       if (sdkp->capacity)
-               sd_dif_config_host(sdkp);
-
-       sd_revalidate_disk(gd);
-
-       if (sdkp->security) {
-               sdkp->opal_dev = init_opal_dev(sdp, &sd_sec_submit);
-               if (sdkp->opal_dev)
-                       sd_printk(KERN_NOTICE, sdkp, "supports TCG Opal\n");
-       }
-
-       sd_printk(KERN_NOTICE, sdkp, "Attached SCSI %sdisk\n",
-                 sdp->removable ? "removable " : "");
-       scsi_autopm_put_device(sdp);
-       put_device(&sdkp->dev);
-}
-
 /**
  *     sd_probe - called during driver initialization and whenever a
  *     new scsi device is attached to the system. It is called once
@@ -3404,8 +3343,50 @@ static int sd_probe(struct device *dev)
        get_device(dev);
        dev_set_drvdata(dev, sdkp);
 
-       get_device(&sdkp->dev); /* prevent release before async_schedule */
-       async_schedule_domain(sd_probe_async, sdkp, &scsi_sd_probe_domain);
+       gd->major = sd_major((index & 0xf0) >> 4);
+       gd->first_minor = ((index & 0xf) << 4) | (index & 0xfff00);
+
+       gd->fops = &sd_fops;
+       gd->private_data = &sdkp->driver;
+       gd->queue = sdkp->device->request_queue;
+
+       /* defaults, until the device tells us otherwise */
+       sdp->sector_size = 512;
+       sdkp->capacity = 0;
+       sdkp->media_present = 1;
+       sdkp->write_prot = 0;
+       sdkp->cache_override = 0;
+       sdkp->WCE = 0;
+       sdkp->RCD = 0;
+       sdkp->ATO = 0;
+       sdkp->first_scan = 1;
+       sdkp->max_medium_access_timeouts = SD_MAX_MEDIUM_TIMEOUTS;
+
+       sd_revalidate_disk(gd);
+
+       gd->flags = GENHD_FL_EXT_DEVT;
+       if (sdp->removable) {
+               gd->flags |= GENHD_FL_REMOVABLE;
+               gd->events |= DISK_EVENT_MEDIA_CHANGE;
+               gd->event_flags = DISK_EVENT_FLAG_POLL | DISK_EVENT_FLAG_UEVENT;
+       }
+
+       blk_pm_runtime_init(sdp->request_queue, dev);
+       device_add_disk(dev, gd, NULL);
+       if (sdkp->capacity)
+               sd_dif_config_host(sdkp);
+
+       sd_revalidate_disk(gd);
+
+       if (sdkp->security) {
+               sdkp->opal_dev = init_opal_dev(sdp, &sd_sec_submit);
+               if (sdkp->opal_dev)
+                       sd_printk(KERN_NOTICE, sdkp, "supports TCG Opal\n");
+       }
+
+       sd_printk(KERN_NOTICE, sdkp, "Attached SCSI %sdisk\n",
+                 sdp->removable ? "removable " : "");
+       scsi_autopm_put_device(sdp);
 
        return 0;
 
@@ -3441,7 +3422,6 @@ static int sd_remove(struct device *dev)
        scsi_autopm_get_device(sdkp->device);
 
        async_synchronize_full_domain(&scsi_sd_pm_domain);
-       async_synchronize_full_domain(&scsi_sd_probe_domain);
        device_del(&sdkp->dev);
        del_gendisk(sdkp->disk);
        sd_shutdown(dev);