LCOV - code coverage report
Current view: top level - drivers/scsi - sd.c (source / functions) Hit Total Coverage
Test: landlock.info Lines: 23 1670 1.4 %
Date: 2021-04-22 12:43:58 Functions: 2 98 2.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0-only
       2             : /*
       3             :  *      sd.c Copyright (C) 1992 Drew Eckhardt
       4             :  *           Copyright (C) 1993, 1994, 1995, 1999 Eric Youngdale
       5             :  *
       6             :  *      Linux scsi disk driver
       7             :  *              Initial versions: Drew Eckhardt
       8             :  *              Subsequent revisions: Eric Youngdale
       9             :  *      Modification history:
      10             :  *       - Drew Eckhardt <drew@colorado.edu> original
      11             :  *       - Eric Youngdale <eric@andante.org> add scatter-gather, multiple 
      12             :  *         outstanding request, and other enhancements.
      13             :  *         Support loadable low-level scsi drivers.
      14             :  *       - Jirka Hanika <geo@ff.cuni.cz> support more scsi disks using 
      15             :  *         eight major numbers.
      16             :  *       - Richard Gooch <rgooch@atnf.csiro.au> support devfs.
      17             :  *       - Torben Mathiasen <tmm@image.dk> Resource allocation fixes in 
      18             :  *         sd_init and cleanups.
      19             :  *       - Alex Davis <letmein@erols.com> Fix problem where partition info
      20             :  *         not being read in sd_open. Fix problem where removable media 
      21             :  *         could be ejected after sd_open.
      22             :  *       - Douglas Gilbert <dgilbert@interlog.com> cleanup for lk 2.5.x
      23             :  *       - Badari Pulavarty <pbadari@us.ibm.com>, Matthew Wilcox 
      24             :  *         <willy@debian.org>, Kurt Garloff <garloff@suse.de>: 
      25             :  *         Support 32k/1M disks.
      26             :  *
      27             :  *      Logging policy (needs CONFIG_SCSI_LOGGING defined):
      28             :  *       - setting up transfer: SCSI_LOG_HLQUEUE levels 1 and 2
      29             :  *       - end of transfer (bh + scsi_lib): SCSI_LOG_HLCOMPLETE level 1
      30             :  *       - entering sd_ioctl: SCSI_LOG_IOCTL level 1
      31             :  *       - entering other commands: SCSI_LOG_HLQUEUE level 3
      32             :  *      Note: when the logging level is set by the user, it must be greater
      33             :  *      than the level indicated above to trigger output.       
      34             :  */
      35             : 
      36             : #include <linux/module.h>
      37             : #include <linux/fs.h>
      38             : #include <linux/kernel.h>
      39             : #include <linux/mm.h>
      40             : #include <linux/bio.h>
      41             : #include <linux/genhd.h>
      42             : #include <linux/hdreg.h>
      43             : #include <linux/errno.h>
      44             : #include <linux/idr.h>
      45             : #include <linux/interrupt.h>
      46             : #include <linux/init.h>
      47             : #include <linux/blkdev.h>
      48             : #include <linux/blkpg.h>
      49             : #include <linux/blk-pm.h>
      50             : #include <linux/delay.h>
      51             : #include <linux/mutex.h>
      52             : #include <linux/string_helpers.h>
      53             : #include <linux/async.h>
      54             : #include <linux/slab.h>
      55             : #include <linux/sed-opal.h>
      56             : #include <linux/pm_runtime.h>
      57             : #include <linux/pr.h>
      58             : #include <linux/t10-pi.h>
      59             : #include <linux/uaccess.h>
      60             : #include <asm/unaligned.h>
      61             : 
      62             : #include <scsi/scsi.h>
      63             : #include <scsi/scsi_cmnd.h>
      64             : #include <scsi/scsi_dbg.h>
      65             : #include <scsi/scsi_device.h>
      66             : #include <scsi/scsi_driver.h>
      67             : #include <scsi/scsi_eh.h>
      68             : #include <scsi/scsi_host.h>
      69             : #include <scsi/scsi_ioctl.h>
      70             : #include <scsi/scsicam.h>
      71             : 
      72             : #include "sd.h"
      73             : #include "scsi_priv.h"
      74             : #include "scsi_logging.h"
      75             : 
      76             : MODULE_AUTHOR("Eric Youngdale");
      77             : MODULE_DESCRIPTION("SCSI disk (sd) driver");
      78             : MODULE_LICENSE("GPL");
      79             : 
      80             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK0_MAJOR);
      81             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK1_MAJOR);
      82             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK2_MAJOR);
      83             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK3_MAJOR);
      84             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK4_MAJOR);
      85             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK5_MAJOR);
      86             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK6_MAJOR);
      87             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK7_MAJOR);
      88             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK8_MAJOR);
      89             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK9_MAJOR);
      90             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK10_MAJOR);
      91             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK11_MAJOR);
      92             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK12_MAJOR);
      93             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK13_MAJOR);
      94             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK14_MAJOR);
      95             : MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK15_MAJOR);
      96             : MODULE_ALIAS_SCSI_DEVICE(TYPE_DISK);
      97             : MODULE_ALIAS_SCSI_DEVICE(TYPE_MOD);
      98             : MODULE_ALIAS_SCSI_DEVICE(TYPE_RBC);
      99             : MODULE_ALIAS_SCSI_DEVICE(TYPE_ZBC);
     100             : 
     101             : #if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT)
     102             : #define SD_MINORS       16
     103             : #else
     104             : #define SD_MINORS       0
     105             : #endif
     106             : 
     107             : static void sd_config_discard(struct scsi_disk *, unsigned int);
     108             : static void sd_config_write_same(struct scsi_disk *);
     109             : static int  sd_revalidate_disk(struct gendisk *);
     110             : static void sd_unlock_native_capacity(struct gendisk *disk);
     111             : static int  sd_probe(struct device *);
     112             : static int  sd_remove(struct device *);
     113             : static void sd_shutdown(struct device *);
     114             : static int sd_suspend_system(struct device *);
     115             : static int sd_suspend_runtime(struct device *);
     116             : static int sd_resume(struct device *);
     117             : static void sd_rescan(struct device *);
     118             : static blk_status_t sd_init_command(struct scsi_cmnd *SCpnt);
     119             : static void sd_uninit_command(struct scsi_cmnd *SCpnt);
     120             : static int sd_done(struct scsi_cmnd *);
     121             : static void sd_eh_reset(struct scsi_cmnd *);
     122             : static int sd_eh_action(struct scsi_cmnd *, int);
     123             : static void sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer);
     124             : static void scsi_disk_release(struct device *cdev);
     125             : 
     126             : static DEFINE_IDA(sd_index_ida);
     127             : 
     128             : /* This semaphore is used to mediate the 0->1 reference get in the
     129             :  * face of object destruction (i.e. we can't allow a get on an
     130             :  * object after last put) */
     131             : static DEFINE_MUTEX(sd_ref_mutex);
     132             : 
     133             : static struct kmem_cache *sd_cdb_cache;
     134             : static mempool_t *sd_cdb_pool;
     135             : static mempool_t *sd_page_pool;
     136             : 
     137             : static const char *sd_cache_types[] = {
     138             :         "write through", "none", "write back",
     139             :         "write back, no read (daft)"
     140             : };
     141             : 
     142           0 : static void sd_set_flush_flag(struct scsi_disk *sdkp)
     143             : {
     144           0 :         bool wc = false, fua = false;
     145             : 
     146           0 :         if (sdkp->WCE) {
     147           0 :                 wc = true;
     148           0 :                 if (sdkp->DPOFUA)
     149           0 :                         fua = true;
     150             :         }
     151             : 
     152           0 :         blk_queue_write_cache(sdkp->disk->queue, wc, fua);
     153           0 : }
     154             : 
     155             : static ssize_t
     156           0 : cache_type_store(struct device *dev, struct device_attribute *attr,
     157             :                  const char *buf, size_t count)
     158             : {
     159           0 :         int ct, rcd, wce, sp;
     160           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     161           0 :         struct scsi_device *sdp = sdkp->device;
     162           0 :         char buffer[64];
     163           0 :         char *buffer_data;
     164           0 :         struct scsi_mode_data data;
     165           0 :         struct scsi_sense_hdr sshdr;
     166           0 :         static const char temp[] = "temporary ";
     167           0 :         int len;
     168             : 
     169           0 :         if (sdp->type != TYPE_DISK && sdp->type != TYPE_ZBC)
     170             :                 /* no cache control on RBC devices; theoretically they
     171             :                  * can do it, but there's probably so many exceptions
     172             :                  * it's not worth the risk */
     173             :                 return -EINVAL;
     174             : 
     175           0 :         if (strncmp(buf, temp, sizeof(temp) - 1) == 0) {
     176           0 :                 buf += sizeof(temp) - 1;
     177           0 :                 sdkp->cache_override = 1;
     178             :         } else {
     179           0 :                 sdkp->cache_override = 0;
     180             :         }
     181             : 
     182           0 :         ct = sysfs_match_string(sd_cache_types, buf);
     183           0 :         if (ct < 0)
     184             :                 return -EINVAL;
     185             : 
     186           0 :         rcd = ct & 0x01 ? 1 : 0;
     187           0 :         wce = (ct & 0x02) && !sdkp->write_prot ? 1 : 0;
     188             : 
     189           0 :         if (sdkp->cache_override) {
     190           0 :                 sdkp->WCE = wce;
     191           0 :                 sdkp->RCD = rcd;
     192           0 :                 sd_set_flush_flag(sdkp);
     193           0 :                 return count;
     194             :         }
     195             : 
     196           0 :         if (scsi_mode_sense(sdp, 0x08, 8, buffer, sizeof(buffer), SD_TIMEOUT,
     197             :                             sdkp->max_retries, &data, NULL))
     198             :                 return -EINVAL;
     199           0 :         len = min_t(size_t, sizeof(buffer), data.length - data.header_length -
     200             :                   data.block_descriptor_length);
     201           0 :         buffer_data = buffer + data.header_length +
     202           0 :                 data.block_descriptor_length;
     203           0 :         buffer_data[2] &= ~0x05;
     204           0 :         buffer_data[2] |= wce << 2 | rcd;
     205           0 :         sp = buffer_data[0] & 0x80 ? 1 : 0;
     206           0 :         buffer_data[0] &= ~0x80;
     207             : 
     208             :         /*
     209             :          * Ensure WP, DPOFUA, and RESERVED fields are cleared in
     210             :          * received mode parameter buffer before doing MODE SELECT.
     211             :          */
     212           0 :         data.device_specific = 0;
     213             : 
     214           0 :         if (scsi_mode_select(sdp, 1, sp, 8, buffer_data, len, SD_TIMEOUT,
     215             :                              sdkp->max_retries, &data, &sshdr)) {
     216           0 :                 if (scsi_sense_valid(&sshdr))
     217           0 :                         sd_print_sense_hdr(sdkp, &sshdr);
     218           0 :                 return -EINVAL;
     219             :         }
     220           0 :         sd_revalidate_disk(sdkp->disk);
     221           0 :         return count;
     222             : }
     223             : 
     224             : static ssize_t
     225           0 : manage_start_stop_show(struct device *dev, struct device_attribute *attr,
     226             :                        char *buf)
     227             : {
     228           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     229           0 :         struct scsi_device *sdp = sdkp->device;
     230             : 
     231           0 :         return sprintf(buf, "%u\n", sdp->manage_start_stop);
     232             : }
     233             : 
     234             : static ssize_t
     235           0 : manage_start_stop_store(struct device *dev, struct device_attribute *attr,
     236             :                         const char *buf, size_t count)
     237             : {
     238           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     239           0 :         struct scsi_device *sdp = sdkp->device;
     240           0 :         bool v;
     241             : 
     242           0 :         if (!capable(CAP_SYS_ADMIN))
     243             :                 return -EACCES;
     244             : 
     245           0 :         if (kstrtobool(buf, &v))
     246             :                 return -EINVAL;
     247             : 
     248           0 :         sdp->manage_start_stop = v;
     249             : 
     250           0 :         return count;
     251             : }
     252             : static DEVICE_ATTR_RW(manage_start_stop);
     253             : 
     254             : static ssize_t
     255           0 : allow_restart_show(struct device *dev, struct device_attribute *attr, char *buf)
     256             : {
     257           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     258             : 
     259           0 :         return sprintf(buf, "%u\n", sdkp->device->allow_restart);
     260             : }
     261             : 
     262             : static ssize_t
     263           0 : allow_restart_store(struct device *dev, struct device_attribute *attr,
     264             :                     const char *buf, size_t count)
     265             : {
     266           0 :         bool v;
     267           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     268           0 :         struct scsi_device *sdp = sdkp->device;
     269             : 
     270           0 :         if (!capable(CAP_SYS_ADMIN))
     271             :                 return -EACCES;
     272             : 
     273           0 :         if (sdp->type != TYPE_DISK && sdp->type != TYPE_ZBC)
     274             :                 return -EINVAL;
     275             : 
     276           0 :         if (kstrtobool(buf, &v))
     277             :                 return -EINVAL;
     278             : 
     279           0 :         sdp->allow_restart = v;
     280             : 
     281           0 :         return count;
     282             : }
     283             : static DEVICE_ATTR_RW(allow_restart);
     284             : 
     285             : static ssize_t
     286           0 : cache_type_show(struct device *dev, struct device_attribute *attr, char *buf)
     287             : {
     288           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     289           0 :         int ct = sdkp->RCD + 2*sdkp->WCE;
     290             : 
     291           0 :         return sprintf(buf, "%s\n", sd_cache_types[ct]);
     292             : }
     293             : static DEVICE_ATTR_RW(cache_type);
     294             : 
     295             : static ssize_t
     296           0 : FUA_show(struct device *dev, struct device_attribute *attr, char *buf)
     297             : {
     298           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     299             : 
     300           0 :         return sprintf(buf, "%u\n", sdkp->DPOFUA);
     301             : }
     302             : static DEVICE_ATTR_RO(FUA);
     303             : 
     304             : static ssize_t
     305           0 : protection_type_show(struct device *dev, struct device_attribute *attr,
     306             :                      char *buf)
     307             : {
     308           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     309             : 
     310           0 :         return sprintf(buf, "%u\n", sdkp->protection_type);
     311             : }
     312             : 
     313             : static ssize_t
     314           0 : protection_type_store(struct device *dev, struct device_attribute *attr,
     315             :                       const char *buf, size_t count)
     316             : {
     317           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     318           0 :         unsigned int val;
     319           0 :         int err;
     320             : 
     321           0 :         if (!capable(CAP_SYS_ADMIN))
     322             :                 return -EACCES;
     323             : 
     324           0 :         err = kstrtouint(buf, 10, &val);
     325             : 
     326           0 :         if (err)
     327           0 :                 return err;
     328             : 
     329           0 :         if (val <= T10_PI_TYPE3_PROTECTION)
     330           0 :                 sdkp->protection_type = val;
     331             : 
     332           0 :         return count;
     333             : }
     334             : static DEVICE_ATTR_RW(protection_type);
     335             : 
     336             : static ssize_t
     337           0 : protection_mode_show(struct device *dev, struct device_attribute *attr,
     338             :                      char *buf)
     339             : {
     340           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     341           0 :         struct scsi_device *sdp = sdkp->device;
     342           0 :         unsigned int dif, dix;
     343             : 
     344           0 :         dif = scsi_host_dif_capable(sdp->host, sdkp->protection_type);
     345           0 :         dix = scsi_host_dix_capable(sdp->host, sdkp->protection_type);
     346             : 
     347           0 :         if (!dix && scsi_host_dix_capable(sdp->host, T10_PI_TYPE0_PROTECTION)) {
     348             :                 dif = 0;
     349             :                 dix = 1;
     350             :         }
     351             : 
     352           0 :         if (!dif && !dix)
     353           0 :                 return sprintf(buf, "none\n");
     354             : 
     355           0 :         return sprintf(buf, "%s%u\n", dix ? "dix" : "dif", dif);
     356             : }
     357             : static DEVICE_ATTR_RO(protection_mode);
     358             : 
     359             : static ssize_t
     360           0 : app_tag_own_show(struct device *dev, struct device_attribute *attr, char *buf)
     361             : {
     362           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     363             : 
     364           0 :         return sprintf(buf, "%u\n", sdkp->ATO);
     365             : }
     366             : static DEVICE_ATTR_RO(app_tag_own);
     367             : 
     368             : static ssize_t
     369           0 : thin_provisioning_show(struct device *dev, struct device_attribute *attr,
     370             :                        char *buf)
     371             : {
     372           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     373             : 
     374           0 :         return sprintf(buf, "%u\n", sdkp->lbpme);
     375             : }
     376             : static DEVICE_ATTR_RO(thin_provisioning);
     377             : 
     378             : /* sysfs_match_string() requires dense arrays */
     379             : static const char *lbp_mode[] = {
     380             :         [SD_LBP_FULL]           = "full",
     381             :         [SD_LBP_UNMAP]          = "unmap",
     382             :         [SD_LBP_WS16]           = "writesame_16",
     383             :         [SD_LBP_WS10]           = "writesame_10",
     384             :         [SD_LBP_ZERO]           = "writesame_zero",
     385             :         [SD_LBP_DISABLE]        = "disabled",
     386             : };
     387             : 
     388             : static ssize_t
     389           0 : provisioning_mode_show(struct device *dev, struct device_attribute *attr,
     390             :                        char *buf)
     391             : {
     392           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     393             : 
     394           0 :         return sprintf(buf, "%s\n", lbp_mode[sdkp->provisioning_mode]);
     395             : }
     396             : 
     397             : static ssize_t
     398           0 : provisioning_mode_store(struct device *dev, struct device_attribute *attr,
     399             :                         const char *buf, size_t count)
     400             : {
     401           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     402           0 :         struct scsi_device *sdp = sdkp->device;
     403           0 :         int mode;
     404             : 
     405           0 :         if (!capable(CAP_SYS_ADMIN))
     406             :                 return -EACCES;
     407             : 
     408           0 :         if (sd_is_zoned(sdkp)) {
     409           0 :                 sd_config_discard(sdkp, SD_LBP_DISABLE);
     410           0 :                 return count;
     411             :         }
     412             : 
     413           0 :         if (sdp->type != TYPE_DISK)
     414             :                 return -EINVAL;
     415             : 
     416           0 :         mode = sysfs_match_string(lbp_mode, buf);
     417           0 :         if (mode < 0)
     418             :                 return -EINVAL;
     419             : 
     420           0 :         sd_config_discard(sdkp, mode);
     421             : 
     422           0 :         return count;
     423             : }
     424             : static DEVICE_ATTR_RW(provisioning_mode);
     425             : 
     426             : /* sysfs_match_string() requires dense arrays */
     427             : static const char *zeroing_mode[] = {
     428             :         [SD_ZERO_WRITE]         = "write",
     429             :         [SD_ZERO_WS]            = "writesame",
     430             :         [SD_ZERO_WS16_UNMAP]    = "writesame_16_unmap",
     431             :         [SD_ZERO_WS10_UNMAP]    = "writesame_10_unmap",
     432             : };
     433             : 
     434             : static ssize_t
     435           0 : zeroing_mode_show(struct device *dev, struct device_attribute *attr,
     436             :                   char *buf)
     437             : {
     438           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     439             : 
     440           0 :         return sprintf(buf, "%s\n", zeroing_mode[sdkp->zeroing_mode]);
     441             : }
     442             : 
     443             : static ssize_t
     444           0 : zeroing_mode_store(struct device *dev, struct device_attribute *attr,
     445             :                    const char *buf, size_t count)
     446             : {
     447           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     448           0 :         int mode;
     449             : 
     450           0 :         if (!capable(CAP_SYS_ADMIN))
     451             :                 return -EACCES;
     452             : 
     453           0 :         mode = sysfs_match_string(zeroing_mode, buf);
     454           0 :         if (mode < 0)
     455             :                 return -EINVAL;
     456             : 
     457           0 :         sdkp->zeroing_mode = mode;
     458             : 
     459           0 :         return count;
     460             : }
     461             : static DEVICE_ATTR_RW(zeroing_mode);
     462             : 
     463             : static ssize_t
     464           0 : max_medium_access_timeouts_show(struct device *dev,
     465             :                                 struct device_attribute *attr, char *buf)
     466             : {
     467           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     468             : 
     469           0 :         return sprintf(buf, "%u\n", sdkp->max_medium_access_timeouts);
     470             : }
     471             : 
     472             : static ssize_t
     473           0 : max_medium_access_timeouts_store(struct device *dev,
     474             :                                  struct device_attribute *attr, const char *buf,
     475             :                                  size_t count)
     476             : {
     477           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     478           0 :         int err;
     479             : 
     480           0 :         if (!capable(CAP_SYS_ADMIN))
     481             :                 return -EACCES;
     482             : 
     483           0 :         err = kstrtouint(buf, 10, &sdkp->max_medium_access_timeouts);
     484             : 
     485           0 :         return err ? err : count;
     486             : }
     487             : static DEVICE_ATTR_RW(max_medium_access_timeouts);
     488             : 
     489             : static ssize_t
     490           0 : max_write_same_blocks_show(struct device *dev, struct device_attribute *attr,
     491             :                            char *buf)
     492             : {
     493           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     494             : 
     495           0 :         return sprintf(buf, "%u\n", sdkp->max_ws_blocks);
     496             : }
     497             : 
     498             : static ssize_t
     499           0 : max_write_same_blocks_store(struct device *dev, struct device_attribute *attr,
     500             :                             const char *buf, size_t count)
     501             : {
     502           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     503           0 :         struct scsi_device *sdp = sdkp->device;
     504           0 :         unsigned long max;
     505           0 :         int err;
     506             : 
     507           0 :         if (!capable(CAP_SYS_ADMIN))
     508             :                 return -EACCES;
     509             : 
     510           0 :         if (sdp->type != TYPE_DISK && sdp->type != TYPE_ZBC)
     511             :                 return -EINVAL;
     512             : 
     513           0 :         err = kstrtoul(buf, 10, &max);
     514             : 
     515           0 :         if (err)
     516           0 :                 return err;
     517             : 
     518           0 :         if (max == 0)
     519           0 :                 sdp->no_write_same = 1;
     520           0 :         else if (max <= SD_MAX_WS16_BLOCKS) {
     521           0 :                 sdp->no_write_same = 0;
     522           0 :                 sdkp->max_ws_blocks = max;
     523             :         }
     524             : 
     525           0 :         sd_config_write_same(sdkp);
     526             : 
     527           0 :         return count;
     528             : }
     529             : static DEVICE_ATTR_RW(max_write_same_blocks);
     530             : 
     531             : static ssize_t
     532           0 : zoned_cap_show(struct device *dev, struct device_attribute *attr, char *buf)
     533             : {
     534           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     535             : 
     536           0 :         if (sdkp->device->type == TYPE_ZBC)
     537           0 :                 return sprintf(buf, "host-managed\n");
     538           0 :         if (sdkp->zoned == 1)
     539           0 :                 return sprintf(buf, "host-aware\n");
     540           0 :         if (sdkp->zoned == 2)
     541           0 :                 return sprintf(buf, "drive-managed\n");
     542           0 :         return sprintf(buf, "none\n");
     543             : }
     544             : static DEVICE_ATTR_RO(zoned_cap);
     545             : 
     546             : static ssize_t
     547           0 : max_retries_store(struct device *dev, struct device_attribute *attr,
     548             :                   const char *buf, size_t count)
     549             : {
     550           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     551           0 :         struct scsi_device *sdev = sdkp->device;
     552           0 :         int retries, err;
     553             : 
     554           0 :         err = kstrtoint(buf, 10, &retries);
     555           0 :         if (err)
     556           0 :                 return err;
     557             : 
     558           0 :         if (retries == SCSI_CMD_RETRIES_NO_LIMIT || retries <= SD_MAX_RETRIES) {
     559           0 :                 sdkp->max_retries = retries;
     560           0 :                 return count;
     561             :         }
     562             : 
     563           0 :         sdev_printk(KERN_ERR, sdev, "max_retries must be between -1 and %d\n",
     564             :                     SD_MAX_RETRIES);
     565           0 :         return -EINVAL;
     566             : }
     567             : 
     568             : static ssize_t
     569           0 : max_retries_show(struct device *dev, struct device_attribute *attr,
     570             :                  char *buf)
     571             : {
     572           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
     573             : 
     574           0 :         return sprintf(buf, "%d\n", sdkp->max_retries);
     575             : }
     576             : 
     577             : static DEVICE_ATTR_RW(max_retries);
     578             : 
     579             : static struct attribute *sd_disk_attrs[] = {
     580             :         &dev_attr_cache_type.attr,
     581             :         &dev_attr_FUA.attr,
     582             :         &dev_attr_allow_restart.attr,
     583             :         &dev_attr_manage_start_stop.attr,
     584             :         &dev_attr_protection_type.attr,
     585             :         &dev_attr_protection_mode.attr,
     586             :         &dev_attr_app_tag_own.attr,
     587             :         &dev_attr_thin_provisioning.attr,
     588             :         &dev_attr_provisioning_mode.attr,
     589             :         &dev_attr_zeroing_mode.attr,
     590             :         &dev_attr_max_write_same_blocks.attr,
     591             :         &dev_attr_max_medium_access_timeouts.attr,
     592             :         &dev_attr_zoned_cap.attr,
     593             :         &dev_attr_max_retries.attr,
     594             :         NULL,
     595             : };
     596             : ATTRIBUTE_GROUPS(sd_disk);
     597             : 
     598             : static struct class sd_disk_class = {
     599             :         .name           = "scsi_disk",
     600             :         .owner          = THIS_MODULE,
     601             :         .dev_release    = scsi_disk_release,
     602             :         .dev_groups     = sd_disk_groups,
     603             : };
     604             : 
     605             : static const struct dev_pm_ops sd_pm_ops = {
     606             :         .suspend                = sd_suspend_system,
     607             :         .resume                 = sd_resume,
     608             :         .poweroff               = sd_suspend_system,
     609             :         .restore                = sd_resume,
     610             :         .runtime_suspend        = sd_suspend_runtime,
     611             :         .runtime_resume         = sd_resume,
     612             : };
     613             : 
     614             : static struct scsi_driver sd_template = {
     615             :         .gendrv = {
     616             :                 .name           = "sd",
     617             :                 .owner          = THIS_MODULE,
     618             :                 .probe          = sd_probe,
     619             :                 .probe_type     = PROBE_PREFER_ASYNCHRONOUS,
     620             :                 .remove         = sd_remove,
     621             :                 .shutdown       = sd_shutdown,
     622             :                 .pm             = &sd_pm_ops,
     623             :         },
     624             :         .rescan                 = sd_rescan,
     625             :         .init_command           = sd_init_command,
     626             :         .uninit_command         = sd_uninit_command,
     627             :         .done                   = sd_done,
     628             :         .eh_action              = sd_eh_action,
     629             :         .eh_reset               = sd_eh_reset,
     630             : };
     631             : 
     632             : /*
     633             :  * Don't request a new module, as that could deadlock in multipath
     634             :  * environment.
     635             :  */
     636           0 : static void sd_default_probe(dev_t devt)
     637             : {
     638           0 : }
     639             : 
     640             : /*
     641             :  * Device no to disk mapping:
     642             :  * 
     643             :  *       major         disc2     disc  p1
     644             :  *   |............|.............|....|....| <- dev_t
     645             :  *    31        20 19          8 7  4 3  0
     646             :  * 
     647             :  * Inside a major, we have 16k disks, however mapped non-
     648             :  * contiguously. The first 16 disks are for major0, the next
     649             :  * ones with major1, ... Disk 256 is for major0 again, disk 272 
     650             :  * for major1, ... 
     651             :  * As we stay compatible with our numbering scheme, we can reuse 
     652             :  * the well-know SCSI majors 8, 65--71, 136--143.
     653             :  */
     654          16 : static int sd_major(int major_idx)
     655             : {
     656          16 :         switch (major_idx) {
     657             :         case 0:
     658             :                 return SCSI_DISK0_MAJOR;
     659           7 :         case 1 ... 7:
     660           7 :                 return SCSI_DISK1_MAJOR + major_idx - 1;
     661           8 :         case 8 ... 15:
     662           8 :                 return SCSI_DISK8_MAJOR + major_idx - 8;
     663           0 :         default:
     664           0 :                 BUG();
     665             :                 return 0;       /* shut up gcc */
     666             :         }
     667             : }
     668             : 
     669           0 : static struct scsi_disk *scsi_disk_get(struct gendisk *disk)
     670             : {
     671           0 :         struct scsi_disk *sdkp = NULL;
     672             : 
     673           0 :         mutex_lock(&sd_ref_mutex);
     674             : 
     675           0 :         if (disk->private_data) {
     676           0 :                 sdkp = scsi_disk(disk);
     677           0 :                 if (scsi_device_get(sdkp->device) == 0)
     678           0 :                         get_device(&sdkp->dev);
     679             :                 else
     680             :                         sdkp = NULL;
     681             :         }
     682           0 :         mutex_unlock(&sd_ref_mutex);
     683           0 :         return sdkp;
     684             : }
     685             : 
     686           0 : static void scsi_disk_put(struct scsi_disk *sdkp)
     687             : {
     688           0 :         struct scsi_device *sdev = sdkp->device;
     689             : 
     690           0 :         mutex_lock(&sd_ref_mutex);
     691           0 :         put_device(&sdkp->dev);
     692           0 :         scsi_device_put(sdev);
     693           0 :         mutex_unlock(&sd_ref_mutex);
     694           0 : }
     695             : 
     696             : #ifdef CONFIG_BLK_SED_OPAL
     697             : static int sd_sec_submit(void *data, u16 spsp, u8 secp, void *buffer,
     698             :                 size_t len, bool send)
     699             : {
     700             :         struct scsi_disk *sdkp = data;
     701             :         struct scsi_device *sdev = sdkp->device;
     702             :         u8 cdb[12] = { 0, };
     703             :         int ret;
     704             : 
     705             :         cdb[0] = send ? SECURITY_PROTOCOL_OUT : SECURITY_PROTOCOL_IN;
     706             :         cdb[1] = secp;
     707             :         put_unaligned_be16(spsp, &cdb[2]);
     708             :         put_unaligned_be32(len, &cdb[6]);
     709             : 
     710             :         ret = scsi_execute(sdev, cdb, send ? DMA_TO_DEVICE : DMA_FROM_DEVICE,
     711             :                 buffer, len, NULL, NULL, SD_TIMEOUT, sdkp->max_retries, 0,
     712             :                 RQF_PM, NULL);
     713             :         return ret <= 0 ? ret : -EIO;
     714             : }
     715             : #endif /* CONFIG_BLK_SED_OPAL */
     716             : 
     717             : /*
     718             :  * Look up the DIX operation based on whether the command is read or
     719             :  * write and whether dix and dif are enabled.
     720             :  */
     721           0 : static unsigned int sd_prot_op(bool write, bool dix, bool dif)
     722             : {
     723             :         /* Lookup table: bit 2 (write), bit 1 (dix), bit 0 (dif) */
     724           0 :         static const unsigned int ops[] = {     /* wrt dix dif */
     725             :                 SCSI_PROT_NORMAL,               /*  0   0   0  */
     726             :                 SCSI_PROT_READ_STRIP,           /*  0   0   1  */
     727             :                 SCSI_PROT_READ_INSERT,          /*  0   1   0  */
     728             :                 SCSI_PROT_READ_PASS,            /*  0   1   1  */
     729             :                 SCSI_PROT_NORMAL,               /*  1   0   0  */
     730             :                 SCSI_PROT_WRITE_INSERT,         /*  1   0   1  */
     731             :                 SCSI_PROT_WRITE_STRIP,          /*  1   1   0  */
     732             :                 SCSI_PROT_WRITE_PASS,           /*  1   1   1  */
     733             :         };
     734             : 
     735           0 :         return ops[write << 2 | dix << 1 | dif];
     736             : }
     737             : 
     738             : /*
     739             :  * Returns a mask of the protection flags that are valid for a given DIX
     740             :  * operation.
     741             :  */
     742           0 : static unsigned int sd_prot_flag_mask(unsigned int prot_op)
     743             : {
     744           0 :         static const unsigned int flag_mask[] = {
     745             :                 [SCSI_PROT_NORMAL]              = 0,
     746             : 
     747             :                 [SCSI_PROT_READ_STRIP]          = SCSI_PROT_TRANSFER_PI |
     748             :                                                   SCSI_PROT_GUARD_CHECK |
     749             :                                                   SCSI_PROT_REF_CHECK |
     750             :                                                   SCSI_PROT_REF_INCREMENT,
     751             : 
     752             :                 [SCSI_PROT_READ_INSERT]         = SCSI_PROT_REF_INCREMENT |
     753             :                                                   SCSI_PROT_IP_CHECKSUM,
     754             : 
     755             :                 [SCSI_PROT_READ_PASS]           = SCSI_PROT_TRANSFER_PI |
     756             :                                                   SCSI_PROT_GUARD_CHECK |
     757             :                                                   SCSI_PROT_REF_CHECK |
     758             :                                                   SCSI_PROT_REF_INCREMENT |
     759             :                                                   SCSI_PROT_IP_CHECKSUM,
     760             : 
     761             :                 [SCSI_PROT_WRITE_INSERT]        = SCSI_PROT_TRANSFER_PI |
     762             :                                                   SCSI_PROT_REF_INCREMENT,
     763             : 
     764             :                 [SCSI_PROT_WRITE_STRIP]         = SCSI_PROT_GUARD_CHECK |
     765             :                                                   SCSI_PROT_REF_CHECK |
     766             :                                                   SCSI_PROT_REF_INCREMENT |
     767             :                                                   SCSI_PROT_IP_CHECKSUM,
     768             : 
     769             :                 [SCSI_PROT_WRITE_PASS]          = SCSI_PROT_TRANSFER_PI |
     770             :                                                   SCSI_PROT_GUARD_CHECK |
     771             :                                                   SCSI_PROT_REF_CHECK |
     772             :                                                   SCSI_PROT_REF_INCREMENT |
     773             :                                                   SCSI_PROT_IP_CHECKSUM,
     774             :         };
     775             : 
     776           0 :         return flag_mask[prot_op];
     777             : }
     778             : 
     779           0 : static unsigned char sd_setup_protect_cmnd(struct scsi_cmnd *scmd,
     780             :                                            unsigned int dix, unsigned int dif)
     781             : {
     782           0 :         struct bio *bio = scmd->request->bio;
     783           0 :         unsigned int prot_op = sd_prot_op(rq_data_dir(scmd->request), dix, dif);
     784           0 :         unsigned int protect = 0;
     785             : 
     786           0 :         if (dix) {                              /* DIX Type 0, 1, 2, 3 */
     787           0 :                 if (bio_integrity_flagged(bio, BIP_IP_CHECKSUM))
     788             :                         scmd->prot_flags |= SCSI_PROT_IP_CHECKSUM;
     789             : 
     790           0 :                 if (bio_integrity_flagged(bio, BIP_CTRL_NOCHECK) == false)
     791           0 :                         scmd->prot_flags |= SCSI_PROT_GUARD_CHECK;
     792             :         }
     793             : 
     794           0 :         if (dif != T10_PI_TYPE3_PROTECTION) {   /* DIX/DIF Type 0, 1, 2 */
     795           0 :                 scmd->prot_flags |= SCSI_PROT_REF_INCREMENT;
     796             : 
     797           0 :                 if (bio_integrity_flagged(bio, BIP_CTRL_NOCHECK) == false)
     798           0 :                         scmd->prot_flags |= SCSI_PROT_REF_CHECK;
     799             :         }
     800             : 
     801           0 :         if (dif) {                              /* DIX/DIF Type 1, 2, 3 */
     802           0 :                 scmd->prot_flags |= SCSI_PROT_TRANSFER_PI;
     803             : 
     804           0 :                 if (bio_integrity_flagged(bio, BIP_DISK_NOCHECK))
     805             :                         protect = 3 << 5; /* Disable target PI checking */
     806             :                 else
     807           0 :                         protect = 1 << 5; /* Enable target PI checking */
     808             :         }
     809             : 
     810           0 :         scsi_set_prot_op(scmd, prot_op);
     811           0 :         scsi_set_prot_type(scmd, dif);
     812           0 :         scmd->prot_flags &= sd_prot_flag_mask(prot_op);
     813             : 
     814           0 :         return protect;
     815             : }
     816             : 
     817           0 : static void sd_config_discard(struct scsi_disk *sdkp, unsigned int mode)
     818             : {
     819           0 :         struct request_queue *q = sdkp->disk->queue;
     820           0 :         unsigned int logical_block_size = sdkp->device->sector_size;
     821           0 :         unsigned int max_blocks = 0;
     822             : 
     823           0 :         q->limits.discard_alignment =
     824           0 :                 sdkp->unmap_alignment * logical_block_size;
     825           0 :         q->limits.discard_granularity =
     826           0 :                 max(sdkp->physical_block_size,
     827             :                     sdkp->unmap_granularity * logical_block_size);
     828           0 :         sdkp->provisioning_mode = mode;
     829             : 
     830           0 :         switch (mode) {
     831             : 
     832           0 :         case SD_LBP_FULL:
     833             :         case SD_LBP_DISABLE:
     834           0 :                 blk_queue_max_discard_sectors(q, 0);
     835           0 :                 blk_queue_flag_clear(QUEUE_FLAG_DISCARD, q);
     836           0 :                 return;
     837             : 
     838           0 :         case SD_LBP_UNMAP:
     839           0 :                 max_blocks = min_not_zero(sdkp->max_unmap_blocks,
     840             :                                           (u32)SD_MAX_WS16_BLOCKS);
     841             :                 break;
     842             : 
     843           0 :         case SD_LBP_WS16:
     844           0 :                 if (sdkp->device->unmap_limit_for_ws)
     845           0 :                         max_blocks = sdkp->max_unmap_blocks;
     846             :                 else
     847           0 :                         max_blocks = sdkp->max_ws_blocks;
     848             : 
     849           0 :                 max_blocks = min_not_zero(max_blocks, (u32)SD_MAX_WS16_BLOCKS);
     850             :                 break;
     851             : 
     852           0 :         case SD_LBP_WS10:
     853           0 :                 if (sdkp->device->unmap_limit_for_ws)
     854           0 :                         max_blocks = sdkp->max_unmap_blocks;
     855             :                 else
     856           0 :                         max_blocks = sdkp->max_ws_blocks;
     857             : 
     858           0 :                 max_blocks = min_not_zero(max_blocks, (u32)SD_MAX_WS10_BLOCKS);
     859             :                 break;
     860             : 
     861           0 :         case SD_LBP_ZERO:
     862           0 :                 max_blocks = min_not_zero(sdkp->max_ws_blocks,
     863             :                                           (u32)SD_MAX_WS10_BLOCKS);
     864             :                 break;
     865             :         }
     866             : 
     867           0 :         blk_queue_max_discard_sectors(q, max_blocks * (logical_block_size >> 9));
     868           0 :         blk_queue_flag_set(QUEUE_FLAG_DISCARD, q);
     869             : }
     870             : 
     871           0 : static blk_status_t sd_setup_unmap_cmnd(struct scsi_cmnd *cmd)
     872             : {
     873           0 :         struct scsi_device *sdp = cmd->device;
     874           0 :         struct request *rq = cmd->request;
     875           0 :         struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
     876           0 :         u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));
     877           0 :         u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
     878           0 :         unsigned int data_len = 24;
     879           0 :         char *buf;
     880             : 
     881           0 :         rq->special_vec.bv_page = mempool_alloc(sd_page_pool, GFP_ATOMIC);
     882           0 :         if (!rq->special_vec.bv_page)
     883             :                 return BLK_STS_RESOURCE;
     884           0 :         clear_highpage(rq->special_vec.bv_page);
     885           0 :         rq->special_vec.bv_offset = 0;
     886           0 :         rq->special_vec.bv_len = data_len;
     887           0 :         rq->rq_flags |= RQF_SPECIAL_PAYLOAD;
     888             : 
     889           0 :         cmd->cmd_len = 10;
     890           0 :         cmd->cmnd[0] = UNMAP;
     891           0 :         cmd->cmnd[8] = 24;
     892             : 
     893           0 :         buf = page_address(rq->special_vec.bv_page);
     894           0 :         put_unaligned_be16(6 + 16, &buf[0]);
     895           0 :         put_unaligned_be16(16, &buf[2]);
     896           0 :         put_unaligned_be64(lba, &buf[8]);
     897           0 :         put_unaligned_be32(nr_blocks, &buf[16]);
     898             : 
     899           0 :         cmd->allowed = sdkp->max_retries;
     900           0 :         cmd->transfersize = data_len;
     901           0 :         rq->timeout = SD_TIMEOUT;
     902             : 
     903           0 :         return scsi_alloc_sgtables(cmd);
     904             : }
     905             : 
     906           0 : static blk_status_t sd_setup_write_same16_cmnd(struct scsi_cmnd *cmd,
     907             :                 bool unmap)
     908             : {
     909           0 :         struct scsi_device *sdp = cmd->device;
     910           0 :         struct request *rq = cmd->request;
     911           0 :         struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
     912           0 :         u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));
     913           0 :         u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
     914           0 :         u32 data_len = sdp->sector_size;
     915             : 
     916           0 :         rq->special_vec.bv_page = mempool_alloc(sd_page_pool, GFP_ATOMIC);
     917           0 :         if (!rq->special_vec.bv_page)
     918             :                 return BLK_STS_RESOURCE;
     919           0 :         clear_highpage(rq->special_vec.bv_page);
     920           0 :         rq->special_vec.bv_offset = 0;
     921           0 :         rq->special_vec.bv_len = data_len;
     922           0 :         rq->rq_flags |= RQF_SPECIAL_PAYLOAD;
     923             : 
     924           0 :         cmd->cmd_len = 16;
     925           0 :         cmd->cmnd[0] = WRITE_SAME_16;
     926           0 :         if (unmap)
     927           0 :                 cmd->cmnd[1] = 0x8; /* UNMAP */
     928           0 :         put_unaligned_be64(lba, &cmd->cmnd[2]);
     929           0 :         put_unaligned_be32(nr_blocks, &cmd->cmnd[10]);
     930             : 
     931           0 :         cmd->allowed = sdkp->max_retries;
     932           0 :         cmd->transfersize = data_len;
     933           0 :         rq->timeout = unmap ? SD_TIMEOUT : SD_WRITE_SAME_TIMEOUT;
     934             : 
     935           0 :         return scsi_alloc_sgtables(cmd);
     936             : }
     937             : 
     938           0 : static blk_status_t sd_setup_write_same10_cmnd(struct scsi_cmnd *cmd,
     939             :                 bool unmap)
     940             : {
     941           0 :         struct scsi_device *sdp = cmd->device;
     942           0 :         struct request *rq = cmd->request;
     943           0 :         struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
     944           0 :         u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));
     945           0 :         u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
     946           0 :         u32 data_len = sdp->sector_size;
     947             : 
     948           0 :         rq->special_vec.bv_page = mempool_alloc(sd_page_pool, GFP_ATOMIC);
     949           0 :         if (!rq->special_vec.bv_page)
     950             :                 return BLK_STS_RESOURCE;
     951           0 :         clear_highpage(rq->special_vec.bv_page);
     952           0 :         rq->special_vec.bv_offset = 0;
     953           0 :         rq->special_vec.bv_len = data_len;
     954           0 :         rq->rq_flags |= RQF_SPECIAL_PAYLOAD;
     955             : 
     956           0 :         cmd->cmd_len = 10;
     957           0 :         cmd->cmnd[0] = WRITE_SAME;
     958           0 :         if (unmap)
     959           0 :                 cmd->cmnd[1] = 0x8; /* UNMAP */
     960           0 :         put_unaligned_be32(lba, &cmd->cmnd[2]);
     961           0 :         put_unaligned_be16(nr_blocks, &cmd->cmnd[7]);
     962             : 
     963           0 :         cmd->allowed = sdkp->max_retries;
     964           0 :         cmd->transfersize = data_len;
     965           0 :         rq->timeout = unmap ? SD_TIMEOUT : SD_WRITE_SAME_TIMEOUT;
     966             : 
     967           0 :         return scsi_alloc_sgtables(cmd);
     968             : }
     969             : 
     970           0 : static blk_status_t sd_setup_write_zeroes_cmnd(struct scsi_cmnd *cmd)
     971             : {
     972           0 :         struct request *rq = cmd->request;
     973           0 :         struct scsi_device *sdp = cmd->device;
     974           0 :         struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
     975           0 :         u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));
     976           0 :         u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
     977             : 
     978           0 :         if (!(rq->cmd_flags & REQ_NOUNMAP)) {
     979           0 :                 switch (sdkp->zeroing_mode) {
     980           0 :                 case SD_ZERO_WS16_UNMAP:
     981           0 :                         return sd_setup_write_same16_cmnd(cmd, true);
     982           0 :                 case SD_ZERO_WS10_UNMAP:
     983           0 :                         return sd_setup_write_same10_cmnd(cmd, true);
     984             :                 }
     985             :         }
     986             : 
     987           0 :         if (sdp->no_write_same) {
     988           0 :                 rq->rq_flags |= RQF_QUIET;
     989           0 :                 return BLK_STS_TARGET;
     990             :         }
     991             : 
     992           0 :         if (sdkp->ws16 || lba > 0xffffffff || nr_blocks > 0xffff)
     993           0 :                 return sd_setup_write_same16_cmnd(cmd, false);
     994             : 
     995           0 :         return sd_setup_write_same10_cmnd(cmd, false);
     996             : }
     997             : 
     998           0 : static void sd_config_write_same(struct scsi_disk *sdkp)
     999             : {
    1000           0 :         struct request_queue *q = sdkp->disk->queue;
    1001           0 :         unsigned int logical_block_size = sdkp->device->sector_size;
    1002             : 
    1003           0 :         if (sdkp->device->no_write_same) {
    1004           0 :                 sdkp->max_ws_blocks = 0;
    1005           0 :                 goto out;
    1006             :         }
    1007             : 
    1008             :         /* Some devices can not handle block counts above 0xffff despite
    1009             :          * supporting WRITE SAME(16). Consequently we default to 64k
    1010             :          * blocks per I/O unless the device explicitly advertises a
    1011             :          * bigger limit.
    1012             :          */
    1013           0 :         if (sdkp->max_ws_blocks > SD_MAX_WS10_BLOCKS)
    1014           0 :                 sdkp->max_ws_blocks = min_not_zero(sdkp->max_ws_blocks,
    1015             :                                                    (u32)SD_MAX_WS16_BLOCKS);
    1016           0 :         else if (sdkp->ws16 || sdkp->ws10 || sdkp->device->no_report_opcodes)
    1017           0 :                 sdkp->max_ws_blocks = min_not_zero(sdkp->max_ws_blocks,
    1018             :                                                    (u32)SD_MAX_WS10_BLOCKS);
    1019             :         else {
    1020           0 :                 sdkp->device->no_write_same = 1;
    1021           0 :                 sdkp->max_ws_blocks = 0;
    1022             :         }
    1023             : 
    1024           0 :         if (sdkp->lbprz && sdkp->lbpws)
    1025           0 :                 sdkp->zeroing_mode = SD_ZERO_WS16_UNMAP;
    1026           0 :         else if (sdkp->lbprz && sdkp->lbpws10)
    1027           0 :                 sdkp->zeroing_mode = SD_ZERO_WS10_UNMAP;
    1028           0 :         else if (sdkp->max_ws_blocks)
    1029           0 :                 sdkp->zeroing_mode = SD_ZERO_WS;
    1030             :         else
    1031           0 :                 sdkp->zeroing_mode = SD_ZERO_WRITE;
    1032             : 
    1033           0 :         if (sdkp->max_ws_blocks &&
    1034           0 :             sdkp->physical_block_size > logical_block_size) {
    1035             :                 /*
    1036             :                  * Reporting a maximum number of blocks that is not aligned
    1037             :                  * on the device physical size would cause a large write same
    1038             :                  * request to be split into physically unaligned chunks by
    1039             :                  * __blkdev_issue_write_zeroes() and __blkdev_issue_write_same()
    1040             :                  * even if the caller of these functions took care to align the
    1041             :                  * large request. So make sure the maximum reported is aligned
    1042             :                  * to the device physical block size. This is only an optional
    1043             :                  * optimization for regular disks, but this is mandatory to
    1044             :                  * avoid failure of large write same requests directed at
    1045             :                  * sequential write required zones of host-managed ZBC disks.
    1046             :                  */
    1047           0 :                 sdkp->max_ws_blocks =
    1048           0 :                         round_down(sdkp->max_ws_blocks,
    1049             :                                    bytes_to_logical(sdkp->device,
    1050             :                                                     sdkp->physical_block_size));
    1051             :         }
    1052             : 
    1053           0 : out:
    1054           0 :         blk_queue_max_write_same_sectors(q, sdkp->max_ws_blocks *
    1055           0 :                                          (logical_block_size >> 9));
    1056           0 :         blk_queue_max_write_zeroes_sectors(q, sdkp->max_ws_blocks *
    1057             :                                          (logical_block_size >> 9));
    1058           0 : }
    1059             : 
    1060             : /**
    1061             :  * sd_setup_write_same_cmnd - write the same data to multiple blocks
    1062             :  * @cmd: command to prepare
    1063             :  *
    1064             :  * Will set up either WRITE SAME(10) or WRITE SAME(16) depending on
    1065             :  * the preference indicated by the target device.
    1066             :  **/
    1067           0 : static blk_status_t sd_setup_write_same_cmnd(struct scsi_cmnd *cmd)
    1068             : {
    1069           0 :         struct request *rq = cmd->request;
    1070           0 :         struct scsi_device *sdp = cmd->device;
    1071           0 :         struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
    1072           0 :         struct bio *bio = rq->bio;
    1073           0 :         u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));
    1074           0 :         u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
    1075           0 :         blk_status_t ret;
    1076             : 
    1077           0 :         if (sdkp->device->no_write_same)
    1078             :                 return BLK_STS_TARGET;
    1079             : 
    1080           0 :         BUG_ON(bio_offset(bio) || bio_iovec(bio).bv_len != sdp->sector_size);
    1081             : 
    1082           0 :         rq->timeout = SD_WRITE_SAME_TIMEOUT;
    1083             : 
    1084           0 :         if (sdkp->ws16 || lba > 0xffffffff || nr_blocks > 0xffff) {
    1085           0 :                 cmd->cmd_len = 16;
    1086           0 :                 cmd->cmnd[0] = WRITE_SAME_16;
    1087           0 :                 put_unaligned_be64(lba, &cmd->cmnd[2]);
    1088           0 :                 put_unaligned_be32(nr_blocks, &cmd->cmnd[10]);
    1089             :         } else {
    1090           0 :                 cmd->cmd_len = 10;
    1091           0 :                 cmd->cmnd[0] = WRITE_SAME;
    1092           0 :                 put_unaligned_be32(lba, &cmd->cmnd[2]);
    1093           0 :                 put_unaligned_be16(nr_blocks, &cmd->cmnd[7]);
    1094             :         }
    1095             : 
    1096           0 :         cmd->transfersize = sdp->sector_size;
    1097           0 :         cmd->allowed = sdkp->max_retries;
    1098             : 
    1099             :         /*
    1100             :          * For WRITE SAME the data transferred via the DATA OUT buffer is
    1101             :          * different from the amount of data actually written to the target.
    1102             :          *
    1103             :          * We set up __data_len to the amount of data transferred via the
    1104             :          * DATA OUT buffer so that blk_rq_map_sg sets up the proper S/G list
    1105             :          * to transfer a single sector of data first, but then reset it to
    1106             :          * the amount of data to be written right after so that the I/O path
    1107             :          * knows how much to actually write.
    1108             :          */
    1109           0 :         rq->__data_len = sdp->sector_size;
    1110           0 :         ret = scsi_alloc_sgtables(cmd);
    1111           0 :         rq->__data_len = blk_rq_bytes(rq);
    1112             : 
    1113           0 :         return ret;
    1114             : }
    1115             : 
    1116           0 : static blk_status_t sd_setup_flush_cmnd(struct scsi_cmnd *cmd)
    1117             : {
    1118           0 :         struct request *rq = cmd->request;
    1119           0 :         struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
    1120             : 
    1121             :         /* flush requests don't perform I/O, zero the S/G table */
    1122           0 :         memset(&cmd->sdb, 0, sizeof(cmd->sdb));
    1123             : 
    1124           0 :         cmd->cmnd[0] = SYNCHRONIZE_CACHE;
    1125           0 :         cmd->cmd_len = 10;
    1126           0 :         cmd->transfersize = 0;
    1127           0 :         cmd->allowed = sdkp->max_retries;
    1128             : 
    1129           0 :         rq->timeout = rq->q->rq_timeout * SD_FLUSH_TIMEOUT_MULTIPLIER;
    1130           0 :         return BLK_STS_OK;
    1131             : }
    1132             : 
    1133           0 : static blk_status_t sd_setup_rw32_cmnd(struct scsi_cmnd *cmd, bool write,
    1134             :                                        sector_t lba, unsigned int nr_blocks,
    1135             :                                        unsigned char flags)
    1136             : {
    1137           0 :         cmd->cmnd = mempool_alloc(sd_cdb_pool, GFP_ATOMIC);
    1138           0 :         if (unlikely(cmd->cmnd == NULL))
    1139             :                 return BLK_STS_RESOURCE;
    1140             : 
    1141           0 :         cmd->cmd_len = SD_EXT_CDB_SIZE;
    1142           0 :         memset(cmd->cmnd, 0, cmd->cmd_len);
    1143             : 
    1144           0 :         cmd->cmnd[0]  = VARIABLE_LENGTH_CMD;
    1145           0 :         cmd->cmnd[7]  = 0x18; /* Additional CDB len */
    1146           0 :         cmd->cmnd[9]  = write ? WRITE_32 : READ_32;
    1147           0 :         cmd->cmnd[10] = flags;
    1148           0 :         put_unaligned_be64(lba, &cmd->cmnd[12]);
    1149           0 :         put_unaligned_be32(lba, &cmd->cmnd[20]); /* Expected Indirect LBA */
    1150           0 :         put_unaligned_be32(nr_blocks, &cmd->cmnd[28]);
    1151             : 
    1152           0 :         return BLK_STS_OK;
    1153             : }
    1154             : 
    1155           0 : static blk_status_t sd_setup_rw16_cmnd(struct scsi_cmnd *cmd, bool write,
    1156             :                                        sector_t lba, unsigned int nr_blocks,
    1157             :                                        unsigned char flags)
    1158             : {
    1159           0 :         cmd->cmd_len  = 16;
    1160           0 :         cmd->cmnd[0]  = write ? WRITE_16 : READ_16;
    1161           0 :         cmd->cmnd[1]  = flags;
    1162           0 :         cmd->cmnd[14] = 0;
    1163           0 :         cmd->cmnd[15] = 0;
    1164           0 :         put_unaligned_be64(lba, &cmd->cmnd[2]);
    1165           0 :         put_unaligned_be32(nr_blocks, &cmd->cmnd[10]);
    1166             : 
    1167           0 :         return BLK_STS_OK;
    1168             : }
    1169             : 
    1170           0 : static blk_status_t sd_setup_rw10_cmnd(struct scsi_cmnd *cmd, bool write,
    1171             :                                        sector_t lba, unsigned int nr_blocks,
    1172             :                                        unsigned char flags)
    1173             : {
    1174           0 :         cmd->cmd_len = 10;
    1175           0 :         cmd->cmnd[0] = write ? WRITE_10 : READ_10;
    1176           0 :         cmd->cmnd[1] = flags;
    1177           0 :         cmd->cmnd[6] = 0;
    1178           0 :         cmd->cmnd[9] = 0;
    1179           0 :         put_unaligned_be32(lba, &cmd->cmnd[2]);
    1180           0 :         put_unaligned_be16(nr_blocks, &cmd->cmnd[7]);
    1181             : 
    1182           0 :         return BLK_STS_OK;
    1183             : }
    1184             : 
    1185           0 : static blk_status_t sd_setup_rw6_cmnd(struct scsi_cmnd *cmd, bool write,
    1186             :                                       sector_t lba, unsigned int nr_blocks,
    1187             :                                       unsigned char flags)
    1188             : {
    1189             :         /* Avoid that 0 blocks gets translated into 256 blocks. */
    1190           0 :         if (WARN_ON_ONCE(nr_blocks == 0))
    1191             :                 return BLK_STS_IOERR;
    1192             : 
    1193           0 :         if (unlikely(flags & 0x8)) {
    1194             :                 /*
    1195             :                  * This happens only if this drive failed 10byte rw
    1196             :                  * command with ILLEGAL_REQUEST during operation and
    1197             :                  * thus turned off use_10_for_rw.
    1198             :                  */
    1199           0 :                 scmd_printk(KERN_ERR, cmd, "FUA write on READ/WRITE(6) drive\n");
    1200           0 :                 return BLK_STS_IOERR;
    1201             :         }
    1202             : 
    1203           0 :         cmd->cmd_len = 6;
    1204           0 :         cmd->cmnd[0] = write ? WRITE_6 : READ_6;
    1205           0 :         cmd->cmnd[1] = (lba >> 16) & 0x1f;
    1206           0 :         cmd->cmnd[2] = (lba >> 8) & 0xff;
    1207           0 :         cmd->cmnd[3] = lba & 0xff;
    1208           0 :         cmd->cmnd[4] = nr_blocks;
    1209           0 :         cmd->cmnd[5] = 0;
    1210             : 
    1211           0 :         return BLK_STS_OK;
    1212             : }
    1213             : 
    1214           0 : static blk_status_t sd_setup_read_write_cmnd(struct scsi_cmnd *cmd)
    1215             : {
    1216           0 :         struct request *rq = cmd->request;
    1217           0 :         struct scsi_device *sdp = cmd->device;
    1218           0 :         struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
    1219           0 :         sector_t lba = sectors_to_logical(sdp, blk_rq_pos(rq));
    1220           0 :         sector_t threshold;
    1221           0 :         unsigned int nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
    1222           0 :         unsigned int mask = logical_to_sectors(sdp, 1) - 1;
    1223           0 :         bool write = rq_data_dir(rq) == WRITE;
    1224           0 :         unsigned char protect, fua;
    1225           0 :         blk_status_t ret;
    1226           0 :         unsigned int dif;
    1227           0 :         bool dix;
    1228             : 
    1229           0 :         ret = scsi_alloc_sgtables(cmd);
    1230           0 :         if (ret != BLK_STS_OK)
    1231             :                 return ret;
    1232             : 
    1233           0 :         ret = BLK_STS_IOERR;
    1234           0 :         if (!scsi_device_online(sdp) || sdp->changed) {
    1235           0 :                 scmd_printk(KERN_ERR, cmd, "device offline or changed\n");
    1236           0 :                 goto fail;
    1237             :         }
    1238             : 
    1239           0 :         if (blk_rq_pos(rq) + blk_rq_sectors(rq) > get_capacity(rq->rq_disk)) {
    1240           0 :                 scmd_printk(KERN_ERR, cmd, "access beyond end of device\n");
    1241           0 :                 goto fail;
    1242             :         }
    1243             : 
    1244           0 :         if ((blk_rq_pos(rq) & mask) || (blk_rq_sectors(rq) & mask)) {
    1245           0 :                 scmd_printk(KERN_ERR, cmd, "request not aligned to the logical block size\n");
    1246           0 :                 goto fail;
    1247             :         }
    1248             : 
    1249             :         /*
    1250             :          * Some SD card readers can't handle accesses which touch the
    1251             :          * last one or two logical blocks. Split accesses as needed.
    1252             :          */
    1253           0 :         threshold = sdkp->capacity - SD_LAST_BUGGY_SECTORS;
    1254             : 
    1255           0 :         if (unlikely(sdp->last_sector_bug && lba + nr_blocks > threshold)) {
    1256           0 :                 if (lba < threshold) {
    1257             :                         /* Access up to the threshold but not beyond */
    1258           0 :                         nr_blocks = threshold - lba;
    1259             :                 } else {
    1260             :                         /* Access only a single logical block */
    1261             :                         nr_blocks = 1;
    1262             :                 }
    1263             :         }
    1264             : 
    1265           0 :         if (req_op(rq) == REQ_OP_ZONE_APPEND) {
    1266           0 :                 ret = sd_zbc_prepare_zone_append(cmd, &lba, nr_blocks);
    1267           0 :                 if (ret)
    1268           0 :                         goto fail;
    1269             :         }
    1270             : 
    1271           0 :         fua = rq->cmd_flags & REQ_FUA ? 0x8 : 0;
    1272           0 :         dix = scsi_prot_sg_count(cmd);
    1273           0 :         dif = scsi_host_dif_capable(cmd->device->host, sdkp->protection_type);
    1274             : 
    1275           0 :         if (dif || dix)
    1276           0 :                 protect = sd_setup_protect_cmnd(cmd, dix, dif);
    1277             :         else
    1278             :                 protect = 0;
    1279             : 
    1280           0 :         if (protect && sdkp->protection_type == T10_PI_TYPE2_PROTECTION) {
    1281           0 :                 ret = sd_setup_rw32_cmnd(cmd, write, lba, nr_blocks,
    1282             :                                          protect | fua);
    1283           0 :         } else if (sdp->use_16_for_rw || (nr_blocks > 0xffff)) {
    1284           0 :                 ret = sd_setup_rw16_cmnd(cmd, write, lba, nr_blocks,
    1285             :                                          protect | fua);
    1286           0 :         } else if ((nr_blocks > 0xff) || (lba > 0x1fffff) ||
    1287           0 :                    sdp->use_10_for_rw || protect) {
    1288           0 :                 ret = sd_setup_rw10_cmnd(cmd, write, lba, nr_blocks,
    1289             :                                          protect | fua);
    1290             :         } else {
    1291           0 :                 ret = sd_setup_rw6_cmnd(cmd, write, lba, nr_blocks,
    1292             :                                         protect | fua);
    1293             :         }
    1294             : 
    1295           0 :         if (unlikely(ret != BLK_STS_OK))
    1296           0 :                 goto fail;
    1297             : 
    1298             :         /*
    1299             :          * We shouldn't disconnect in the middle of a sector, so with a dumb
    1300             :          * host adapter, it's safe to assume that we can at least transfer
    1301             :          * this many bytes between each connect / disconnect.
    1302             :          */
    1303           0 :         cmd->transfersize = sdp->sector_size;
    1304           0 :         cmd->underflow = nr_blocks << 9;
    1305           0 :         cmd->allowed = sdkp->max_retries;
    1306           0 :         cmd->sdb.length = nr_blocks * sdp->sector_size;
    1307             : 
    1308           0 :         SCSI_LOG_HLQUEUE(1,
    1309             :                          scmd_printk(KERN_INFO, cmd,
    1310             :                                      "%s: block=%llu, count=%d\n", __func__,
    1311             :                                      (unsigned long long)blk_rq_pos(rq),
    1312           0 :                                      blk_rq_sectors(rq)));
    1313           0 :         SCSI_LOG_HLQUEUE(2,
    1314             :                          scmd_printk(KERN_INFO, cmd,
    1315             :                                      "%s %d/%u 512 byte blocks.\n",
    1316             :                                      write ? "writing" : "reading", nr_blocks,
    1317           0 :                                      blk_rq_sectors(rq)));
    1318             : 
    1319             :         /*
    1320             :          * This indicates that the command is ready from our end to be queued.
    1321             :          */
    1322           0 :         return BLK_STS_OK;
    1323           0 : fail:
    1324           0 :         scsi_free_sgtables(cmd);
    1325           0 :         return ret;
    1326             : }
    1327             : 
    1328           0 : static blk_status_t sd_init_command(struct scsi_cmnd *cmd)
    1329             : {
    1330           0 :         struct request *rq = cmd->request;
    1331             : 
    1332           0 :         switch (req_op(rq)) {
    1333           0 :         case REQ_OP_DISCARD:
    1334           0 :                 switch (scsi_disk(rq->rq_disk)->provisioning_mode) {
    1335           0 :                 case SD_LBP_UNMAP:
    1336           0 :                         return sd_setup_unmap_cmnd(cmd);
    1337           0 :                 case SD_LBP_WS16:
    1338           0 :                         return sd_setup_write_same16_cmnd(cmd, true);
    1339           0 :                 case SD_LBP_WS10:
    1340           0 :                         return sd_setup_write_same10_cmnd(cmd, true);
    1341           0 :                 case SD_LBP_ZERO:
    1342           0 :                         return sd_setup_write_same10_cmnd(cmd, false);
    1343             :                 default:
    1344             :                         return BLK_STS_TARGET;
    1345             :                 }
    1346           0 :         case REQ_OP_WRITE_ZEROES:
    1347           0 :                 return sd_setup_write_zeroes_cmnd(cmd);
    1348           0 :         case REQ_OP_WRITE_SAME:
    1349           0 :                 return sd_setup_write_same_cmnd(cmd);
    1350           0 :         case REQ_OP_FLUSH:
    1351           0 :                 return sd_setup_flush_cmnd(cmd);
    1352           0 :         case REQ_OP_READ:
    1353             :         case REQ_OP_WRITE:
    1354             :         case REQ_OP_ZONE_APPEND:
    1355           0 :                 return sd_setup_read_write_cmnd(cmd);
    1356             :         case REQ_OP_ZONE_RESET:
    1357           0 :                 return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_RESET_WRITE_POINTER,
    1358             :                                                    false);
    1359             :         case REQ_OP_ZONE_RESET_ALL:
    1360           0 :                 return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_RESET_WRITE_POINTER,
    1361             :                                                    true);
    1362             :         case REQ_OP_ZONE_OPEN:
    1363           0 :                 return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_OPEN_ZONE, false);
    1364             :         case REQ_OP_ZONE_CLOSE:
    1365           0 :                 return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_CLOSE_ZONE, false);
    1366             :         case REQ_OP_ZONE_FINISH:
    1367           0 :                 return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_FINISH_ZONE, false);
    1368             :         default:
    1369           0 :                 WARN_ON_ONCE(1);
    1370           0 :                 return BLK_STS_NOTSUPP;
    1371             :         }
    1372             : }
    1373             : 
    1374           0 : static void sd_uninit_command(struct scsi_cmnd *SCpnt)
    1375             : {
    1376           0 :         struct request *rq = SCpnt->request;
    1377           0 :         u8 *cmnd;
    1378             : 
    1379           0 :         if (rq->rq_flags & RQF_SPECIAL_PAYLOAD)
    1380           0 :                 mempool_free(rq->special_vec.bv_page, sd_page_pool);
    1381             : 
    1382           0 :         if (SCpnt->cmnd != scsi_req(rq)->cmd) {
    1383           0 :                 cmnd = SCpnt->cmnd;
    1384           0 :                 SCpnt->cmnd = NULL;
    1385           0 :                 SCpnt->cmd_len = 0;
    1386           0 :                 mempool_free(cmnd, sd_cdb_pool);
    1387             :         }
    1388           0 : }
    1389             : 
    1390             : /**
    1391             :  *      sd_open - open a scsi disk device
    1392             :  *      @bdev: Block device of the scsi disk to open
    1393             :  *      @mode: FMODE_* mask
    1394             :  *
    1395             :  *      Returns 0 if successful. Returns a negated errno value in case 
    1396             :  *      of error.
    1397             :  *
    1398             :  *      Note: This can be called from a user context (e.g. fsck(1) )
    1399             :  *      or from within the kernel (e.g. as a result of a mount(1) ).
    1400             :  *      In the latter case @inode and @filp carry an abridged amount
    1401             :  *      of information as noted above.
    1402             :  *
    1403             :  *      Locking: called with bdev->bd_mutex held.
    1404             :  **/
    1405           0 : static int sd_open(struct block_device *bdev, fmode_t mode)
    1406             : {
    1407           0 :         struct scsi_disk *sdkp = scsi_disk_get(bdev->bd_disk);
    1408           0 :         struct scsi_device *sdev;
    1409           0 :         int retval;
    1410             : 
    1411           0 :         if (!sdkp)
    1412             :                 return -ENXIO;
    1413             : 
    1414           0 :         SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_open\n"));
    1415             : 
    1416           0 :         sdev = sdkp->device;
    1417             : 
    1418             :         /*
    1419             :          * If the device is in error recovery, wait until it is done.
    1420             :          * If the device is offline, then disallow any access to it.
    1421             :          */
    1422           0 :         retval = -ENXIO;
    1423           0 :         if (!scsi_block_when_processing_errors(sdev))
    1424           0 :                 goto error_out;
    1425             : 
    1426           0 :         if (sdev->removable || sdkp->write_prot) {
    1427           0 :                 if (bdev_check_media_change(bdev))
    1428           0 :                         sd_revalidate_disk(bdev->bd_disk);
    1429             :         }
    1430             : 
    1431             :         /*
    1432             :          * If the drive is empty, just let the open fail.
    1433             :          */
    1434           0 :         retval = -ENOMEDIUM;
    1435           0 :         if (sdev->removable && !sdkp->media_present && !(mode & FMODE_NDELAY))
    1436           0 :                 goto error_out;
    1437             : 
    1438             :         /*
    1439             :          * If the device has the write protect tab set, have the open fail
    1440             :          * if the user expects to be able to write to the thing.
    1441             :          */
    1442           0 :         retval = -EROFS;
    1443           0 :         if (sdkp->write_prot && (mode & FMODE_WRITE))
    1444           0 :                 goto error_out;
    1445             : 
    1446             :         /*
    1447             :          * It is possible that the disk changing stuff resulted in
    1448             :          * the device being taken offline.  If this is the case,
    1449             :          * report this to the user, and don't pretend that the
    1450             :          * open actually succeeded.
    1451             :          */
    1452           0 :         retval = -ENXIO;
    1453           0 :         if (!scsi_device_online(sdev))
    1454           0 :                 goto error_out;
    1455             : 
    1456           0 :         if ((atomic_inc_return(&sdkp->openers) == 1) && sdev->removable) {
    1457           0 :                 if (scsi_block_when_processing_errors(sdev))
    1458           0 :                         scsi_set_medium_removal(sdev, SCSI_REMOVAL_PREVENT);
    1459             :         }
    1460             : 
    1461             :         return 0;
    1462             : 
    1463           0 : error_out:
    1464           0 :         scsi_disk_put(sdkp);
    1465           0 :         return retval;  
    1466             : }
    1467             : 
    1468             : /**
    1469             :  *      sd_release - invoked when the (last) close(2) is called on this
    1470             :  *      scsi disk.
    1471             :  *      @disk: disk to release
    1472             :  *      @mode: FMODE_* mask
    1473             :  *
    1474             :  *      Returns 0. 
    1475             :  *
    1476             :  *      Note: may block (uninterruptible) if error recovery is underway
    1477             :  *      on this disk.
    1478             :  *
    1479             :  *      Locking: called with bdev->bd_mutex held.
    1480             :  **/
    1481           0 : static void sd_release(struct gendisk *disk, fmode_t mode)
    1482             : {
    1483           0 :         struct scsi_disk *sdkp = scsi_disk(disk);
    1484           0 :         struct scsi_device *sdev = sdkp->device;
    1485             : 
    1486           0 :         SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_release\n"));
    1487             : 
    1488           0 :         if (atomic_dec_return(&sdkp->openers) == 0 && sdev->removable) {
    1489           0 :                 if (scsi_block_when_processing_errors(sdev))
    1490           0 :                         scsi_set_medium_removal(sdev, SCSI_REMOVAL_ALLOW);
    1491             :         }
    1492             : 
    1493           0 :         scsi_disk_put(sdkp);
    1494           0 : }
    1495             : 
    1496           0 : static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
    1497             : {
    1498           0 :         struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);
    1499           0 :         struct scsi_device *sdp = sdkp->device;
    1500           0 :         struct Scsi_Host *host = sdp->host;
    1501           0 :         sector_t capacity = logical_to_sectors(sdp, sdkp->capacity);
    1502           0 :         int diskinfo[4];
    1503             : 
    1504             :         /* default to most commonly used values */
    1505           0 :         diskinfo[0] = 0x40;     /* 1 << 6 */
    1506           0 :         diskinfo[1] = 0x20;     /* 1 << 5 */
    1507           0 :         diskinfo[2] = capacity >> 11;
    1508             : 
    1509             :         /* override with calculated, extended default, or driver values */
    1510           0 :         if (host->hostt->bios_param)
    1511           0 :                 host->hostt->bios_param(sdp, bdev, capacity, diskinfo);
    1512             :         else
    1513           0 :                 scsicam_bios_param(bdev, capacity, diskinfo);
    1514             : 
    1515           0 :         geo->heads = diskinfo[0];
    1516           0 :         geo->sectors = diskinfo[1];
    1517           0 :         geo->cylinders = diskinfo[2];
    1518           0 :         return 0;
    1519             : }
    1520             : 
    1521             : /**
    1522             :  *      sd_ioctl - process an ioctl
    1523             :  *      @bdev: target block device
    1524             :  *      @mode: FMODE_* mask
    1525             :  *      @cmd: ioctl command number
    1526             :  *      @p: this is third argument given to ioctl(2) system call.
    1527             :  *      Often contains a pointer.
    1528             :  *
    1529             :  *      Returns 0 if successful (some ioctls return positive numbers on
    1530             :  *      success as well). Returns a negated errno value in case of error.
    1531             :  *
    1532             :  *      Note: most ioctls are forward onto the block subsystem or further
    1533             :  *      down in the scsi subsystem.
    1534             :  **/
    1535           0 : static int sd_ioctl_common(struct block_device *bdev, fmode_t mode,
    1536             :                            unsigned int cmd, void __user *p)
    1537             : {
    1538           0 :         struct gendisk *disk = bdev->bd_disk;
    1539           0 :         struct scsi_disk *sdkp = scsi_disk(disk);
    1540           0 :         struct scsi_device *sdp = sdkp->device;
    1541           0 :         int error;
    1542             :     
    1543           0 :         SCSI_LOG_IOCTL(1, sd_printk(KERN_INFO, sdkp, "sd_ioctl: disk=%s, "
    1544           0 :                                     "cmd=0x%x\n", disk->disk_name, cmd));
    1545             : 
    1546           0 :         error = scsi_verify_blk_ioctl(bdev, cmd);
    1547           0 :         if (error < 0)
    1548             :                 return error;
    1549             : 
    1550             :         /*
    1551             :          * If we are in the middle of error recovery, don't let anyone
    1552             :          * else try and use this device.  Also, if error recovery fails, it
    1553             :          * may try and take the device offline, in which case all further
    1554             :          * access to the device is prohibited.
    1555             :          */
    1556           0 :         error = scsi_ioctl_block_when_processing_errors(sdp, cmd,
    1557           0 :                         (mode & FMODE_NDELAY) != 0);
    1558           0 :         if (error)
    1559           0 :                 goto out;
    1560             : 
    1561           0 :         if (is_sed_ioctl(cmd))
    1562             :                 return sed_ioctl(sdkp->opal_dev, cmd, p);
    1563             : 
    1564             :         /*
    1565             :          * Send SCSI addressing ioctls directly to mid level, send other
    1566             :          * ioctls to block level and then onto mid level if they can't be
    1567             :          * resolved.
    1568             :          */
    1569           0 :         switch (cmd) {
    1570           0 :                 case SCSI_IOCTL_GET_IDLUN:
    1571             :                 case SCSI_IOCTL_GET_BUS_NUMBER:
    1572           0 :                         error = scsi_ioctl(sdp, cmd, p);
    1573           0 :                         break;
    1574           0 :                 default:
    1575           0 :                         error = scsi_cmd_blk_ioctl(bdev, mode, cmd, p);
    1576           0 :                         break;
    1577             :         }
    1578             : out:
    1579             :         return error;
    1580             : }
    1581             : 
    1582           0 : static void set_media_not_present(struct scsi_disk *sdkp)
    1583             : {
    1584           0 :         if (sdkp->media_present)
    1585           0 :                 sdkp->device->changed = 1;
    1586             : 
    1587           0 :         if (sdkp->device->removable) {
    1588           0 :                 sdkp->media_present = 0;
    1589           0 :                 sdkp->capacity = 0;
    1590             :         }
    1591           0 : }
    1592             : 
    1593           0 : static int media_not_present(struct scsi_disk *sdkp,
    1594             :                              struct scsi_sense_hdr *sshdr)
    1595             : {
    1596           0 :         if (!scsi_sense_valid(sshdr))
    1597             :                 return 0;
    1598             : 
    1599             :         /* not invoked for commands that could return deferred errors */
    1600           0 :         switch (sshdr->sense_key) {
    1601           0 :         case UNIT_ATTENTION:
    1602             :         case NOT_READY:
    1603             :                 /* medium not present */
    1604           0 :                 if (sshdr->asc == 0x3A) {
    1605           0 :                         set_media_not_present(sdkp);
    1606           0 :                         return 1;
    1607             :                 }
    1608             :         }
    1609             :         return 0;
    1610             : }
    1611             : 
    1612             : /**
    1613             :  *      sd_check_events - check media events
    1614             :  *      @disk: kernel device descriptor
    1615             :  *      @clearing: disk events currently being cleared
    1616             :  *
    1617             :  *      Returns mask of DISK_EVENT_*.
    1618             :  *
    1619             :  *      Note: this function is invoked from the block subsystem.
    1620             :  **/
    1621           0 : static unsigned int sd_check_events(struct gendisk *disk, unsigned int clearing)
    1622             : {
    1623           0 :         struct scsi_disk *sdkp = scsi_disk_get(disk);
    1624           0 :         struct scsi_device *sdp;
    1625           0 :         int retval;
    1626             : 
    1627           0 :         if (!sdkp)
    1628             :                 return 0;
    1629             : 
    1630           0 :         sdp = sdkp->device;
    1631           0 :         SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_check_events\n"));
    1632             : 
    1633             :         /*
    1634             :          * If the device is offline, don't send any commands - just pretend as
    1635             :          * if the command failed.  If the device ever comes back online, we
    1636             :          * can deal with it then.  It is only because of unrecoverable errors
    1637             :          * that we would ever take a device offline in the first place.
    1638             :          */
    1639           0 :         if (!scsi_device_online(sdp)) {
    1640           0 :                 set_media_not_present(sdkp);
    1641           0 :                 goto out;
    1642             :         }
    1643             : 
    1644             :         /*
    1645             :          * Using TEST_UNIT_READY enables differentiation between drive with
    1646             :          * no cartridge loaded - NOT READY, drive with changed cartridge -
    1647             :          * UNIT ATTENTION, or with same cartridge - GOOD STATUS.
    1648             :          *
    1649             :          * Drives that auto spin down. eg iomega jaz 1G, will be started
    1650             :          * by sd_spinup_disk() from sd_revalidate_disk(), which happens whenever
    1651             :          * sd_revalidate() is called.
    1652             :          */
    1653           0 :         if (scsi_block_when_processing_errors(sdp)) {
    1654           0 :                 struct scsi_sense_hdr sshdr = { 0, };
    1655             : 
    1656           0 :                 retval = scsi_test_unit_ready(sdp, SD_TIMEOUT, sdkp->max_retries,
    1657             :                                               &sshdr);
    1658             : 
    1659             :                 /* failed to execute TUR, assume media not present */
    1660           0 :                 if (host_byte(retval)) {
    1661           0 :                         set_media_not_present(sdkp);
    1662           0 :                         goto out;
    1663             :                 }
    1664             : 
    1665           0 :                 if (media_not_present(sdkp, &sshdr))
    1666           0 :                         goto out;
    1667             :         }
    1668             : 
    1669             :         /*
    1670             :          * For removable scsi disk we have to recognise the presence
    1671             :          * of a disk in the drive.
    1672             :          */
    1673           0 :         if (!sdkp->media_present)
    1674           0 :                 sdp->changed = 1;
    1675           0 :         sdkp->media_present = 1;
    1676           0 : out:
    1677             :         /*
    1678             :          * sdp->changed is set under the following conditions:
    1679             :          *
    1680             :          *      Medium present state has changed in either direction.
    1681             :          *      Device has indicated UNIT_ATTENTION.
    1682             :          */
    1683           0 :         retval = sdp->changed ? DISK_EVENT_MEDIA_CHANGE : 0;
    1684           0 :         sdp->changed = 0;
    1685           0 :         scsi_disk_put(sdkp);
    1686           0 :         return retval;
    1687             : }
    1688             : 
    1689           0 : static int sd_sync_cache(struct scsi_disk *sdkp, struct scsi_sense_hdr *sshdr)
    1690             : {
    1691           0 :         int retries, res;
    1692           0 :         struct scsi_device *sdp = sdkp->device;
    1693           0 :         const int timeout = sdp->request_queue->rq_timeout
    1694           0 :                 * SD_FLUSH_TIMEOUT_MULTIPLIER;
    1695           0 :         struct scsi_sense_hdr my_sshdr;
    1696             : 
    1697           0 :         if (!scsi_device_online(sdp))
    1698             :                 return -ENODEV;
    1699             : 
    1700             :         /* caller might not be interested in sense, but we need it */
    1701           0 :         if (!sshdr)
    1702           0 :                 sshdr = &my_sshdr;
    1703             : 
    1704           0 :         for (retries = 3; retries > 0; --retries) {
    1705           0 :                 unsigned char cmd[10] = { 0 };
    1706             : 
    1707           0 :                 cmd[0] = SYNCHRONIZE_CACHE;
    1708             :                 /*
    1709             :                  * Leave the rest of the command zero to indicate
    1710             :                  * flush everything.
    1711             :                  */
    1712           0 :                 res = scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL, sshdr,
    1713             :                                 timeout, sdkp->max_retries, 0, RQF_PM, NULL);
    1714           0 :                 if (res == 0)
    1715             :                         break;
    1716             :         }
    1717             : 
    1718           0 :         if (res) {
    1719           0 :                 sd_print_result(sdkp, "Synchronize Cache(10) failed", res);
    1720             : 
    1721           0 :                 if (driver_byte(res) == DRIVER_SENSE)
    1722           0 :                         sd_print_sense_hdr(sdkp, sshdr);
    1723             : 
    1724             :                 /* we need to evaluate the error return  */
    1725           0 :                 if (scsi_sense_valid(sshdr) &&
    1726           0 :                         (sshdr->asc == 0x3a ||       /* medium not present */
    1727           0 :                          sshdr->asc == 0x20 ||       /* invalid command */
    1728           0 :                          (sshdr->asc == 0x74 && sshdr->ascq == 0x71)))    /* drive is password locked */
    1729             :                                 /* this is no error here */
    1730             :                                 return 0;
    1731             : 
    1732           0 :                 switch (host_byte(res)) {
    1733             :                 /* ignore errors due to racing a disconnection */
    1734             :                 case DID_BAD_TARGET:
    1735             :                 case DID_NO_CONNECT:
    1736             :                         return 0;
    1737             :                 /* signal the upper layer it might try again */
    1738           0 :                 case DID_BUS_BUSY:
    1739             :                 case DID_IMM_RETRY:
    1740             :                 case DID_REQUEUE:
    1741             :                 case DID_SOFT_ERROR:
    1742           0 :                         return -EBUSY;
    1743           0 :                 default:
    1744           0 :                         return -EIO;
    1745             :                 }
    1746             :         }
    1747             :         return 0;
    1748             : }
    1749             : 
    1750           0 : static void sd_rescan(struct device *dev)
    1751             : {
    1752           0 :         struct scsi_disk *sdkp = dev_get_drvdata(dev);
    1753             : 
    1754           0 :         sd_revalidate_disk(sdkp->disk);
    1755           0 : }
    1756             : 
    1757           0 : static int sd_ioctl(struct block_device *bdev, fmode_t mode,
    1758             :                     unsigned int cmd, unsigned long arg)
    1759             : {
    1760           0 :         void __user *p = (void __user *)arg;
    1761           0 :         int ret;
    1762             : 
    1763           0 :         ret = sd_ioctl_common(bdev, mode, cmd, p);
    1764           0 :         if (ret != -ENOTTY)
    1765             :                 return ret;
    1766             : 
    1767           0 :         return scsi_ioctl(scsi_disk(bdev->bd_disk)->device, cmd, p);
    1768             : }
    1769             : 
    1770             : #ifdef CONFIG_COMPAT
    1771           0 : static int sd_compat_ioctl(struct block_device *bdev, fmode_t mode,
    1772             :                            unsigned int cmd, unsigned long arg)
    1773             : {
    1774           0 :         void __user *p = compat_ptr(arg);
    1775           0 :         int ret;
    1776             : 
    1777           0 :         ret = sd_ioctl_common(bdev, mode, cmd, p);
    1778           0 :         if (ret != -ENOTTY)
    1779             :                 return ret;
    1780             : 
    1781           0 :         return scsi_compat_ioctl(scsi_disk(bdev->bd_disk)->device, cmd, p);
    1782             : }
    1783             : #endif
    1784             : 
    1785           0 : static char sd_pr_type(enum pr_type type)
    1786             : {
    1787           0 :         switch (type) {
    1788             :         case PR_WRITE_EXCLUSIVE:
    1789             :                 return 0x01;
    1790             :         case PR_EXCLUSIVE_ACCESS:
    1791             :                 return 0x03;
    1792             :         case PR_WRITE_EXCLUSIVE_REG_ONLY:
    1793             :                 return 0x05;
    1794             :         case PR_EXCLUSIVE_ACCESS_REG_ONLY:
    1795             :                 return 0x06;
    1796             :         case PR_WRITE_EXCLUSIVE_ALL_REGS:
    1797             :                 return 0x07;
    1798             :         case PR_EXCLUSIVE_ACCESS_ALL_REGS:
    1799             :                 return 0x08;
    1800             :         default:
    1801             :                 return 0;
    1802             :         }
    1803             : };
    1804             : 
    1805           0 : static int sd_pr_command(struct block_device *bdev, u8 sa,
    1806             :                 u64 key, u64 sa_key, u8 type, u8 flags)
    1807             : {
    1808           0 :         struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);
    1809           0 :         struct scsi_device *sdev = sdkp->device;
    1810           0 :         struct scsi_sense_hdr sshdr;
    1811           0 :         int result;
    1812           0 :         u8 cmd[16] = { 0, };
    1813           0 :         u8 data[24] = { 0, };
    1814             : 
    1815           0 :         cmd[0] = PERSISTENT_RESERVE_OUT;
    1816           0 :         cmd[1] = sa;
    1817           0 :         cmd[2] = type;
    1818           0 :         put_unaligned_be32(sizeof(data), &cmd[5]);
    1819             : 
    1820           0 :         put_unaligned_be64(key, &data[0]);
    1821           0 :         put_unaligned_be64(sa_key, &data[8]);
    1822           0 :         data[20] = flags;
    1823             : 
    1824           0 :         result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, &data, sizeof(data),
    1825             :                         &sshdr, SD_TIMEOUT, sdkp->max_retries, NULL);
    1826             : 
    1827           0 :         if (driver_byte(result) == DRIVER_SENSE &&
    1828           0 :             scsi_sense_valid(&sshdr)) {
    1829           0 :                 sdev_printk(KERN_INFO, sdev, "PR command failed: %d\n", result);
    1830           0 :                 scsi_print_sense_hdr(sdev, NULL, &sshdr);
    1831             :         }
    1832             : 
    1833           0 :         return result;
    1834             : }
    1835             : 
    1836           0 : static int sd_pr_register(struct block_device *bdev, u64 old_key, u64 new_key,
    1837             :                 u32 flags)
    1838             : {
    1839           0 :         if (flags & ~PR_FL_IGNORE_KEY)
    1840             :                 return -EOPNOTSUPP;
    1841           0 :         return sd_pr_command(bdev, (flags & PR_FL_IGNORE_KEY) ? 0x06 : 0x00,
    1842             :                         old_key, new_key, 0,
    1843             :                         (1 << 0) /* APTPL */);
    1844             : }
    1845             : 
    1846           0 : static int sd_pr_reserve(struct block_device *bdev, u64 key, enum pr_type type,
    1847             :                 u32 flags)
    1848             : {
    1849           0 :         if (flags)
    1850             :                 return -EOPNOTSUPP;
    1851           0 :         return sd_pr_command(bdev, 0x01, key, 0, sd_pr_type(type), 0);
    1852             : }
    1853             : 
    1854           0 : static int sd_pr_release(struct block_device *bdev, u64 key, enum pr_type type)
    1855             : {
    1856           0 :         return sd_pr_command(bdev, 0x02, key, 0, sd_pr_type(type), 0);
    1857             : }
    1858             : 
    1859           0 : static int sd_pr_preempt(struct block_device *bdev, u64 old_key, u64 new_key,
    1860             :                 enum pr_type type, bool abort)
    1861             : {
    1862           0 :         return sd_pr_command(bdev, abort ? 0x05 : 0x04, old_key, new_key,
    1863           0 :                              sd_pr_type(type), 0);
    1864             : }
    1865             : 
    1866           0 : static int sd_pr_clear(struct block_device *bdev, u64 key)
    1867             : {
    1868           0 :         return sd_pr_command(bdev, 0x03, key, 0, 0, 0);
    1869             : }
    1870             : 
    1871             : static const struct pr_ops sd_pr_ops = {
    1872             :         .pr_register    = sd_pr_register,
    1873             :         .pr_reserve     = sd_pr_reserve,
    1874             :         .pr_release     = sd_pr_release,
    1875             :         .pr_preempt     = sd_pr_preempt,
    1876             :         .pr_clear       = sd_pr_clear,
    1877             : };
    1878             : 
    1879             : static const struct block_device_operations sd_fops = {
    1880             :         .owner                  = THIS_MODULE,
    1881             :         .open                   = sd_open,
    1882             :         .release                = sd_release,
    1883             :         .ioctl                  = sd_ioctl,
    1884             :         .getgeo                 = sd_getgeo,
    1885             : #ifdef CONFIG_COMPAT
    1886             :         .compat_ioctl           = sd_compat_ioctl,
    1887             : #endif
    1888             :         .check_events           = sd_check_events,
    1889             :         .unlock_native_capacity = sd_unlock_native_capacity,
    1890             :         .report_zones           = sd_zbc_report_zones,
    1891             :         .pr_ops                 = &sd_pr_ops,
    1892             : };
    1893             : 
    1894             : /**
    1895             :  *      sd_eh_reset - reset error handling callback
    1896             :  *      @scmd:          sd-issued command that has failed
    1897             :  *
    1898             :  *      This function is called by the SCSI midlayer before starting
    1899             :  *      SCSI EH. When counting medium access failures we have to be
    1900             :  *      careful to register it only only once per device and SCSI EH run;
    1901             :  *      there might be several timed out commands which will cause the
    1902             :  *      'max_medium_access_timeouts' counter to trigger after the first
    1903             :  *      SCSI EH run already and set the device to offline.
    1904             :  *      So this function resets the internal counter before starting SCSI EH.
    1905             :  **/
    1906           0 : static void sd_eh_reset(struct scsi_cmnd *scmd)
    1907             : {
    1908           0 :         struct scsi_disk *sdkp = scsi_disk(scmd->request->rq_disk);
    1909             : 
    1910             :         /* New SCSI EH run, reset gate variable */
    1911           0 :         sdkp->ignore_medium_access_errors = false;
    1912           0 : }
    1913             : 
    1914             : /**
    1915             :  *      sd_eh_action - error handling callback
    1916             :  *      @scmd:          sd-issued command that has failed
    1917             :  *      @eh_disp:       The recovery disposition suggested by the midlayer
    1918             :  *
    1919             :  *      This function is called by the SCSI midlayer upon completion of an
    1920             :  *      error test command (currently TEST UNIT READY). The result of sending
    1921             :  *      the eh command is passed in eh_disp.  We're looking for devices that
    1922             :  *      fail medium access commands but are OK with non access commands like
    1923             :  *      test unit ready (so wrongly see the device as having a successful
    1924             :  *      recovery)
    1925             :  **/
    1926           0 : static int sd_eh_action(struct scsi_cmnd *scmd, int eh_disp)
    1927             : {
    1928           0 :         struct scsi_disk *sdkp = scsi_disk(scmd->request->rq_disk);
    1929           0 :         struct scsi_device *sdev = scmd->device;
    1930             : 
    1931           0 :         if (!scsi_device_online(sdev) ||
    1932           0 :             !scsi_medium_access_command(scmd) ||
    1933           0 :             host_byte(scmd->result) != DID_TIME_OUT ||
    1934             :             eh_disp != SUCCESS)
    1935             :                 return eh_disp;
    1936             : 
    1937             :         /*
    1938             :          * The device has timed out executing a medium access command.
    1939             :          * However, the TEST UNIT READY command sent during error
    1940             :          * handling completed successfully. Either the device is in the
    1941             :          * process of recovering or has it suffered an internal failure
    1942             :          * that prevents access to the storage medium.
    1943             :          */
    1944           0 :         if (!sdkp->ignore_medium_access_errors) {
    1945           0 :                 sdkp->medium_access_timed_out++;
    1946           0 :                 sdkp->ignore_medium_access_errors = true;
    1947             :         }
    1948             : 
    1949             :         /*
    1950             :          * If the device keeps failing read/write commands but TEST UNIT
    1951             :          * READY always completes successfully we assume that medium
    1952             :          * access is no longer possible and take the device offline.
    1953             :          */
    1954           0 :         if (sdkp->medium_access_timed_out >= sdkp->max_medium_access_timeouts) {
    1955           0 :                 scmd_printk(KERN_ERR, scmd,
    1956             :                             "Medium access timeout failure. Offlining disk!\n");
    1957           0 :                 mutex_lock(&sdev->state_mutex);
    1958           0 :                 scsi_device_set_state(sdev, SDEV_OFFLINE);
    1959           0 :                 mutex_unlock(&sdev->state_mutex);
    1960             : 
    1961           0 :                 return SUCCESS;
    1962             :         }
    1963             : 
    1964             :         return eh_disp;
    1965             : }
    1966             : 
    1967           0 : static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)
    1968             : {
    1969           0 :         struct request *req = scmd->request;
    1970           0 :         struct scsi_device *sdev = scmd->device;
    1971           0 :         unsigned int transferred, good_bytes;
    1972           0 :         u64 start_lba, end_lba, bad_lba;
    1973             : 
    1974             :         /*
    1975             :          * Some commands have a payload smaller than the device logical
    1976             :          * block size (e.g. INQUIRY on a 4K disk).
    1977             :          */
    1978           0 :         if (scsi_bufflen(scmd) <= sdev->sector_size)
    1979             :                 return 0;
    1980             : 
    1981             :         /* Check if we have a 'bad_lba' information */
    1982           0 :         if (!scsi_get_sense_info_fld(scmd->sense_buffer,
    1983             :                                      SCSI_SENSE_BUFFERSIZE,
    1984             :                                      &bad_lba))
    1985             :                 return 0;
    1986             : 
    1987             :         /*
    1988             :          * If the bad lba was reported incorrectly, we have no idea where
    1989             :          * the error is.
    1990             :          */
    1991           0 :         start_lba = sectors_to_logical(sdev, blk_rq_pos(req));
    1992           0 :         end_lba = start_lba + bytes_to_logical(sdev, scsi_bufflen(scmd));
    1993           0 :         if (bad_lba < start_lba || bad_lba >= end_lba)
    1994             :                 return 0;
    1995             : 
    1996             :         /*
    1997             :          * resid is optional but mostly filled in.  When it's unused,
    1998             :          * its value is zero, so we assume the whole buffer transferred
    1999             :          */
    2000           0 :         transferred = scsi_bufflen(scmd) - scsi_get_resid(scmd);
    2001             : 
    2002             :         /* This computation should always be done in terms of the
    2003             :          * resolution of the device's medium.
    2004             :          */
    2005           0 :         good_bytes = logical_to_bytes(sdev, bad_lba - start_lba);
    2006             : 
    2007           0 :         return min(good_bytes, transferred);
    2008             : }
    2009             : 
    2010             : /**
    2011             :  *      sd_done - bottom half handler: called when the lower level
    2012             :  *      driver has completed (successfully or otherwise) a scsi command.
    2013             :  *      @SCpnt: mid-level's per command structure.
    2014             :  *
    2015             :  *      Note: potentially run from within an ISR. Must not block.
    2016             :  **/
    2017           0 : static int sd_done(struct scsi_cmnd *SCpnt)
    2018             : {
    2019           0 :         int result = SCpnt->result;
    2020           0 :         unsigned int good_bytes = result ? 0 : scsi_bufflen(SCpnt);
    2021           0 :         unsigned int sector_size = SCpnt->device->sector_size;
    2022           0 :         unsigned int resid;
    2023           0 :         struct scsi_sense_hdr sshdr;
    2024           0 :         struct scsi_disk *sdkp = scsi_disk(SCpnt->request->rq_disk);
    2025           0 :         struct request *req = SCpnt->request;
    2026           0 :         int sense_valid = 0;
    2027           0 :         int sense_deferred = 0;
    2028             : 
    2029           0 :         switch (req_op(req)) {
    2030           0 :         case REQ_OP_DISCARD:
    2031             :         case REQ_OP_WRITE_ZEROES:
    2032             :         case REQ_OP_WRITE_SAME:
    2033             :         case REQ_OP_ZONE_RESET:
    2034             :         case REQ_OP_ZONE_RESET_ALL:
    2035             :         case REQ_OP_ZONE_OPEN:
    2036             :         case REQ_OP_ZONE_CLOSE:
    2037             :         case REQ_OP_ZONE_FINISH:
    2038           0 :                 if (!result) {
    2039           0 :                         good_bytes = blk_rq_bytes(req);
    2040           0 :                         scsi_set_resid(SCpnt, 0);
    2041             :                 } else {
    2042           0 :                         good_bytes = 0;
    2043           0 :                         scsi_set_resid(SCpnt, blk_rq_bytes(req));
    2044             :                 }
    2045             :                 break;
    2046             :         default:
    2047             :                 /*
    2048             :                  * In case of bogus fw or device, we could end up having
    2049             :                  * an unaligned partial completion. Check this here and force
    2050             :                  * alignment.
    2051             :                  */
    2052           0 :                 resid = scsi_get_resid(SCpnt);
    2053           0 :                 if (resid & (sector_size - 1)) {
    2054           0 :                         sd_printk(KERN_INFO, sdkp,
    2055             :                                 "Unaligned partial completion (resid=%u, sector_sz=%u)\n",
    2056             :                                 resid, sector_size);
    2057           0 :                         scsi_print_command(SCpnt);
    2058           0 :                         resid = min(scsi_bufflen(SCpnt),
    2059             :                                     round_up(resid, sector_size));
    2060           0 :                         scsi_set_resid(SCpnt, resid);
    2061             :                 }
    2062             :         }
    2063             : 
    2064           0 :         if (result) {
    2065           0 :                 sense_valid = scsi_command_normalize_sense(SCpnt, &sshdr);
    2066           0 :                 if (sense_valid)
    2067           0 :                         sense_deferred = scsi_sense_is_deferred(&sshdr);
    2068             :         }
    2069           0 :         sdkp->medium_access_timed_out = 0;
    2070             : 
    2071           0 :         if (driver_byte(result) != DRIVER_SENSE &&
    2072           0 :             (!sense_valid || sense_deferred))
    2073           0 :                 goto out;
    2074             : 
    2075           0 :         switch (sshdr.sense_key) {
    2076           0 :         case HARDWARE_ERROR:
    2077             :         case MEDIUM_ERROR:
    2078           0 :                 good_bytes = sd_completed_bytes(SCpnt);
    2079           0 :                 break;
    2080             :         case RECOVERED_ERROR:
    2081           0 :                 good_bytes = scsi_bufflen(SCpnt);
    2082           0 :                 break;
    2083           0 :         case NO_SENSE:
    2084             :                 /* This indicates a false check condition, so ignore it.  An
    2085             :                  * unknown amount of data was transferred so treat it as an
    2086             :                  * error.
    2087             :                  */
    2088           0 :                 SCpnt->result = 0;
    2089           0 :                 memset(SCpnt->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
    2090           0 :                 break;
    2091           0 :         case ABORTED_COMMAND:
    2092           0 :                 if (sshdr.asc == 0x10)  /* DIF: Target detected corruption */
    2093           0 :                         good_bytes = sd_completed_bytes(SCpnt);
    2094             :                 break;
    2095           0 :         case ILLEGAL_REQUEST:
    2096           0 :                 switch (sshdr.asc) {
    2097           0 :                 case 0x10:      /* DIX: Host detected corruption */
    2098           0 :                         good_bytes = sd_completed_bytes(SCpnt);
    2099           0 :                         break;
    2100           0 :                 case 0x20:      /* INVALID COMMAND OPCODE */
    2101             :                 case 0x24:      /* INVALID FIELD IN CDB */
    2102           0 :                         switch (SCpnt->cmnd[0]) {
    2103           0 :                         case UNMAP:
    2104           0 :                                 sd_config_discard(sdkp, SD_LBP_DISABLE);
    2105           0 :                                 break;
    2106           0 :                         case WRITE_SAME_16:
    2107             :                         case WRITE_SAME:
    2108           0 :                                 if (SCpnt->cmnd[1] & 8) { /* UNMAP */
    2109           0 :                                         sd_config_discard(sdkp, SD_LBP_DISABLE);
    2110             :                                 } else {
    2111           0 :                                         sdkp->device->no_write_same = 1;
    2112           0 :                                         sd_config_write_same(sdkp);
    2113           0 :                                         req->rq_flags |= RQF_QUIET;
    2114             :                                 }
    2115             :                                 break;
    2116             :                         }
    2117             :                 }
    2118             :                 break;
    2119             :         default:
    2120             :                 break;
    2121             :         }
    2122             : 
    2123           0 :  out:
    2124           0 :         if (sd_is_zoned(sdkp))
    2125           0 :                 good_bytes = sd_zbc_complete(SCpnt, good_bytes, &sshdr);
    2126             : 
    2127           0 :         SCSI_LOG_HLCOMPLETE(1, scmd_printk(KERN_INFO, SCpnt,
    2128             :                                            "sd_done: completed %d of %d bytes\n",
    2129           0 :                                            good_bytes, scsi_bufflen(SCpnt)));
    2130             : 
    2131           0 :         return good_bytes;
    2132             : }
    2133             : 
    2134             : /*
    2135             :  * spinup disk - called only in sd_revalidate_disk()
    2136             :  */
    2137             : static void
    2138           0 : sd_spinup_disk(struct scsi_disk *sdkp)
    2139             : {
    2140           0 :         unsigned char cmd[10];
    2141           0 :         unsigned long spintime_expire = 0;
    2142           0 :         int retries, spintime;
    2143           0 :         unsigned int the_result;
    2144           0 :         struct scsi_sense_hdr sshdr;
    2145           0 :         int sense_valid = 0;
    2146             : 
    2147           0 :         spintime = 0;
    2148             : 
    2149             :         /* Spin up drives, as required.  Only do this at boot time */
    2150             :         /* Spinup needs to be done for module loads too. */
    2151           0 :         do {
    2152           0 :                 retries = 0;
    2153             : 
    2154           0 :                 do {
    2155           0 :                         cmd[0] = TEST_UNIT_READY;
    2156           0 :                         memset((void *) &cmd[1], 0, 9);
    2157             : 
    2158           0 :                         the_result = scsi_execute_req(sdkp->device, cmd,
    2159             :                                                       DMA_NONE, NULL, 0,
    2160             :                                                       &sshdr, SD_TIMEOUT,
    2161             :                                                       sdkp->max_retries, NULL);
    2162             : 
    2163             :                         /*
    2164             :                          * If the drive has indicated to us that it
    2165             :                          * doesn't have any media in it, don't bother
    2166             :                          * with any more polling.
    2167             :                          */
    2168           0 :                         if (media_not_present(sdkp, &sshdr))
    2169           0 :                                 return;
    2170             : 
    2171           0 :                         if (the_result)
    2172           0 :                                 sense_valid = scsi_sense_valid(&sshdr);
    2173           0 :                         retries++;
    2174           0 :                 } while (retries < 3 && 
    2175           0 :                          (!scsi_status_is_good(the_result) ||
    2176           0 :                           ((driver_byte(the_result) == DRIVER_SENSE) &&
    2177           0 :                           sense_valid && sshdr.sense_key == UNIT_ATTENTION)));
    2178             : 
    2179           0 :                 if (driver_byte(the_result) != DRIVER_SENSE) {
    2180             :                         /* no sense, TUR either succeeded or failed
    2181             :                          * with a status error */
    2182           0 :                         if(!spintime && !scsi_status_is_good(the_result)) {
    2183           0 :                                 sd_print_result(sdkp, "Test Unit Ready failed",
    2184             :                                                 the_result);
    2185             :                         }
    2186             :                         break;
    2187             :                 }
    2188             : 
    2189             :                 /*
    2190             :                  * The device does not want the automatic start to be issued.
    2191             :                  */
    2192           0 :                 if (sdkp->device->no_start_on_add)
    2193             :                         break;
    2194             : 
    2195           0 :                 if (sense_valid && sshdr.sense_key == NOT_READY) {
    2196           0 :                         if (sshdr.asc == 4 && sshdr.ascq == 3)
    2197             :                                 break;  /* manual intervention required */
    2198           0 :                         if (sshdr.asc == 4 && sshdr.ascq == 0xb)
    2199             :                                 break;  /* standby */
    2200           0 :                         if (sshdr.asc == 4 && sshdr.ascq == 0xc)
    2201             :                                 break;  /* unavailable */
    2202           0 :                         if (sshdr.asc == 4 && sshdr.ascq == 0x1b)
    2203             :                                 break;  /* sanitize in progress */
    2204             :                         /*
    2205             :                          * Issue command to spin up drive when not ready
    2206             :                          */
    2207           0 :                         if (!spintime) {
    2208           0 :                                 sd_printk(KERN_NOTICE, sdkp, "Spinning up disk...");
    2209           0 :                                 cmd[0] = START_STOP;
    2210           0 :                                 cmd[1] = 1;     /* Return immediately */
    2211           0 :                                 memset((void *) &cmd[2], 0, 8);
    2212           0 :                                 cmd[4] = 1;     /* Start spin cycle */
    2213           0 :                                 if (sdkp->device->start_stop_pwr_cond)
    2214           0 :                                         cmd[4] |= 1 << 4;
    2215           0 :                                 scsi_execute_req(sdkp->device, cmd, DMA_NONE,
    2216             :                                                  NULL, 0, &sshdr,
    2217             :                                                  SD_TIMEOUT, sdkp->max_retries,
    2218             :                                                  NULL);
    2219           0 :                                 spintime_expire = jiffies + 100 * HZ;
    2220           0 :                                 spintime = 1;
    2221             :                         }
    2222             :                         /* Wait 1 second for next try */
    2223           0 :                         msleep(1000);
    2224           0 :                         printk(KERN_CONT ".");
    2225             : 
    2226             :                 /*
    2227             :                  * Wait for USB flash devices with slow firmware.
    2228             :                  * Yes, this sense key/ASC combination shouldn't
    2229             :                  * occur here.  It's characteristic of these devices.
    2230             :                  */
    2231           0 :                 } else if (sense_valid &&
    2232           0 :                                 sshdr.sense_key == UNIT_ATTENTION &&
    2233           0 :                                 sshdr.asc == 0x28) {
    2234           0 :                         if (!spintime) {
    2235           0 :                                 spintime_expire = jiffies + 5 * HZ;
    2236           0 :                                 spintime = 1;
    2237             :                         }
    2238             :                         /* Wait 1 second for next try */
    2239           0 :                         msleep(1000);
    2240             :                 } else {
    2241             :                         /* we don't understand the sense code, so it's
    2242             :                          * probably pointless to loop */
    2243           0 :                         if(!spintime) {
    2244           0 :                                 sd_printk(KERN_NOTICE, sdkp, "Unit Not Ready\n");
    2245           0 :                                 sd_print_sense_hdr(sdkp, &sshdr);
    2246             :                         }
    2247             :                         break;
    2248             :                 }
    2249             :                                 
    2250           0 :         } while (spintime && time_before_eq(jiffies, spintime_expire));
    2251             : 
    2252           0 :         if (spintime) {
    2253           0 :                 if (scsi_status_is_good(the_result))
    2254           0 :                         printk(KERN_CONT "ready\n");
    2255             :                 else
    2256           0 :                         printk(KERN_CONT "not responding...\n");
    2257             :         }
    2258             : }
    2259             : 
    2260             : /*
    2261             :  * Determine whether disk supports Data Integrity Field.
    2262             :  */
    2263           0 : static int sd_read_protection_type(struct scsi_disk *sdkp, unsigned char *buffer)
    2264             : {
    2265           0 :         struct scsi_device *sdp = sdkp->device;
    2266           0 :         u8 type;
    2267           0 :         int ret = 0;
    2268             : 
    2269           0 :         if (scsi_device_protection(sdp) == 0 || (buffer[12] & 1) == 0) {
    2270           0 :                 sdkp->protection_type = 0;
    2271           0 :                 return ret;
    2272             :         }
    2273             : 
    2274           0 :         type = ((buffer[12] >> 1) & 7) + 1; /* P_TYPE 0 = Type 1 */
    2275             : 
    2276           0 :         if (type > T10_PI_TYPE3_PROTECTION)
    2277             :                 ret = -ENODEV;
    2278           0 :         else if (scsi_host_dif_capable(sdp->host, type))
    2279           0 :                 ret = 1;
    2280             : 
    2281           0 :         if (sdkp->first_scan || type != sdkp->protection_type)
    2282           0 :                 switch (ret) {
    2283           0 :                 case -ENODEV:
    2284           0 :                         sd_printk(KERN_ERR, sdkp, "formatted with unsupported" \
    2285             :                                   " protection type %u. Disabling disk!\n",
    2286             :                                   type);
    2287             :                         break;
    2288           0 :                 case 1:
    2289           0 :                         sd_printk(KERN_NOTICE, sdkp,
    2290             :                                   "Enabling DIF Type %u protection\n", type);
    2291             :                         break;
    2292           0 :                 case 0:
    2293           0 :                         sd_printk(KERN_NOTICE, sdkp,
    2294             :                                   "Disabling DIF Type %u protection\n", type);
    2295             :                         break;
    2296             :                 }
    2297             : 
    2298           0 :         sdkp->protection_type = type;
    2299             : 
    2300           0 :         return ret;
    2301             : }
    2302             : 
    2303           0 : static void read_capacity_error(struct scsi_disk *sdkp, struct scsi_device *sdp,
    2304             :                         struct scsi_sense_hdr *sshdr, int sense_valid,
    2305             :                         int the_result)
    2306             : {
    2307           0 :         if (driver_byte(the_result) == DRIVER_SENSE)
    2308           0 :                 sd_print_sense_hdr(sdkp, sshdr);
    2309             :         else
    2310           0 :                 sd_printk(KERN_NOTICE, sdkp, "Sense not available.\n");
    2311             : 
    2312             :         /*
    2313             :          * Set dirty bit for removable devices if not ready -
    2314             :          * sometimes drives will not report this properly.
    2315             :          */
    2316           0 :         if (sdp->removable &&
    2317           0 :             sense_valid && sshdr->sense_key == NOT_READY)
    2318           0 :                 set_media_not_present(sdkp);
    2319             : 
    2320             :         /*
    2321             :          * We used to set media_present to 0 here to indicate no media
    2322             :          * in the drive, but some drives fail read capacity even with
    2323             :          * media present, so we can't do that.
    2324             :          */
    2325           0 :         sdkp->capacity = 0; /* unknown mapped to zero - as usual */
    2326           0 : }
    2327             : 
    2328             : #define RC16_LEN 32
    2329             : #if RC16_LEN > SD_BUF_SIZE
    2330             : #error RC16_LEN must not be more than SD_BUF_SIZE
    2331             : #endif
    2332             : 
    2333             : #define READ_CAPACITY_RETRIES_ON_RESET  10
    2334             : 
    2335           0 : static int read_capacity_16(struct scsi_disk *sdkp, struct scsi_device *sdp,
    2336             :                                                 unsigned char *buffer)
    2337             : {
    2338           0 :         unsigned char cmd[16];
    2339           0 :         struct scsi_sense_hdr sshdr;
    2340           0 :         int sense_valid = 0;
    2341           0 :         int the_result;
    2342           0 :         int retries = 3, reset_retries = READ_CAPACITY_RETRIES_ON_RESET;
    2343           0 :         unsigned int alignment;
    2344           0 :         unsigned long long lba;
    2345           0 :         unsigned sector_size;
    2346             : 
    2347           0 :         if (sdp->no_read_capacity_16)
    2348             :                 return -EINVAL;
    2349             : 
    2350           0 :         do {
    2351           0 :                 memset(cmd, 0, 16);
    2352           0 :                 cmd[0] = SERVICE_ACTION_IN_16;
    2353           0 :                 cmd[1] = SAI_READ_CAPACITY_16;
    2354           0 :                 cmd[13] = RC16_LEN;
    2355           0 :                 memset(buffer, 0, RC16_LEN);
    2356             : 
    2357           0 :                 the_result = scsi_execute_req(sdp, cmd, DMA_FROM_DEVICE,
    2358             :                                         buffer, RC16_LEN, &sshdr,
    2359             :                                         SD_TIMEOUT, sdkp->max_retries, NULL);
    2360             : 
    2361           0 :                 if (media_not_present(sdkp, &sshdr))
    2362             :                         return -ENODEV;
    2363             : 
    2364           0 :                 if (the_result) {
    2365           0 :                         sense_valid = scsi_sense_valid(&sshdr);
    2366           0 :                         if (sense_valid &&
    2367           0 :                             sshdr.sense_key == ILLEGAL_REQUEST &&
    2368           0 :                             (sshdr.asc == 0x20 || sshdr.asc == 0x24) &&
    2369           0 :                             sshdr.ascq == 0x00)
    2370             :                                 /* Invalid Command Operation Code or
    2371             :                                  * Invalid Field in CDB, just retry
    2372             :                                  * silently with RC10 */
    2373             :                                 return -EINVAL;
    2374           0 :                         if (sense_valid &&
    2375           0 :                             sshdr.sense_key == UNIT_ATTENTION &&
    2376           0 :                             sshdr.asc == 0x29 && sshdr.ascq == 0x00)
    2377             :                                 /* Device reset might occur several times,
    2378             :                                  * give it one more chance */
    2379           0 :                                 if (--reset_retries > 0)
    2380           0 :                                         continue;
    2381             :                 }
    2382           0 :                 retries--;
    2383             : 
    2384           0 :         } while (the_result && retries);
    2385             : 
    2386           0 :         if (the_result) {
    2387           0 :                 sd_print_result(sdkp, "Read Capacity(16) failed", the_result);
    2388           0 :                 read_capacity_error(sdkp, sdp, &sshdr, sense_valid, the_result);
    2389           0 :                 return -EINVAL;
    2390             :         }
    2391             : 
    2392           0 :         sector_size = get_unaligned_be32(&buffer[8]);
    2393           0 :         lba = get_unaligned_be64(&buffer[0]);
    2394             : 
    2395           0 :         if (sd_read_protection_type(sdkp, buffer) < 0) {
    2396           0 :                 sdkp->capacity = 0;
    2397           0 :                 return -ENODEV;
    2398             :         }
    2399             : 
    2400             :         /* Logical blocks per physical block exponent */
    2401           0 :         sdkp->physical_block_size = (1 << (buffer[13] & 0xf)) * sector_size;
    2402             : 
    2403             :         /* RC basis */
    2404           0 :         sdkp->rc_basis = (buffer[12] >> 4) & 0x3;
    2405             : 
    2406             :         /* Lowest aligned logical block */
    2407           0 :         alignment = ((buffer[14] & 0x3f) << 8 | buffer[15]) * sector_size;
    2408           0 :         blk_queue_alignment_offset(sdp->request_queue, alignment);
    2409           0 :         if (alignment && sdkp->first_scan)
    2410           0 :                 sd_printk(KERN_NOTICE, sdkp,
    2411             :                           "physical block alignment offset: %u\n", alignment);
    2412             : 
    2413           0 :         if (buffer[14] & 0x80) { /* LBPME */
    2414           0 :                 sdkp->lbpme = 1;
    2415             : 
    2416           0 :                 if (buffer[14] & 0x40) /* LBPRZ */
    2417           0 :                         sdkp->lbprz = 1;
    2418             : 
    2419           0 :                 sd_config_discard(sdkp, SD_LBP_WS16);
    2420             :         }
    2421             : 
    2422           0 :         sdkp->capacity = lba + 1;
    2423           0 :         return sector_size;
    2424             : }
    2425             : 
    2426           0 : static int read_capacity_10(struct scsi_disk *sdkp, struct scsi_device *sdp,
    2427             :                                                 unsigned char *buffer)
    2428             : {
    2429           0 :         unsigned char cmd[16];
    2430           0 :         struct scsi_sense_hdr sshdr;
    2431           0 :         int sense_valid = 0;
    2432           0 :         int the_result;
    2433           0 :         int retries = 3, reset_retries = READ_CAPACITY_RETRIES_ON_RESET;
    2434           0 :         sector_t lba;
    2435           0 :         unsigned sector_size;
    2436             : 
    2437           0 :         do {
    2438           0 :                 cmd[0] = READ_CAPACITY;
    2439           0 :                 memset(&cmd[1], 0, 9);
    2440           0 :                 memset(buffer, 0, 8);
    2441             : 
    2442           0 :                 the_result = scsi_execute_req(sdp, cmd, DMA_FROM_DEVICE,
    2443             :                                         buffer, 8, &sshdr,
    2444             :                                         SD_TIMEOUT, sdkp->max_retries, NULL);
    2445             : 
    2446           0 :                 if (media_not_present(sdkp, &sshdr))
    2447             :                         return -ENODEV;
    2448             : 
    2449           0 :                 if (the_result) {
    2450           0 :                         sense_valid = scsi_sense_valid(&sshdr);
    2451           0 :                         if (sense_valid &&
    2452           0 :                             sshdr.sense_key == UNIT_ATTENTION &&
    2453           0 :                             sshdr.asc == 0x29 && sshdr.ascq == 0x00)
    2454             :                                 /* Device reset might occur several times,
    2455             :                                  * give it one more chance */
    2456           0 :                                 if (--reset_retries > 0)
    2457           0 :                                         continue;
    2458             :                 }
    2459           0 :                 retries--;
    2460             : 
    2461           0 :         } while (the_result && retries);
    2462             : 
    2463           0 :         if (the_result) {
    2464           0 :                 sd_print_result(sdkp, "Read Capacity(10) failed", the_result);
    2465           0 :                 read_capacity_error(sdkp, sdp, &sshdr, sense_valid, the_result);
    2466           0 :                 return -EINVAL;
    2467             :         }
    2468             : 
    2469           0 :         sector_size = get_unaligned_be32(&buffer[4]);
    2470           0 :         lba = get_unaligned_be32(&buffer[0]);
    2471             : 
    2472           0 :         if (sdp->no_read_capacity_16 && (lba == 0xffffffff)) {
    2473             :                 /* Some buggy (usb cardreader) devices return an lba of
    2474             :                    0xffffffff when the want to report a size of 0 (with
    2475             :                    which they really mean no media is present) */
    2476           0 :                 sdkp->capacity = 0;
    2477           0 :                 sdkp->physical_block_size = sector_size;
    2478           0 :                 return sector_size;
    2479             :         }
    2480             : 
    2481           0 :         sdkp->capacity = lba + 1;
    2482           0 :         sdkp->physical_block_size = sector_size;
    2483           0 :         return sector_size;
    2484             : }
    2485             : 
    2486           0 : static int sd_try_rc16_first(struct scsi_device *sdp)
    2487             : {
    2488           0 :         if (sdp->host->max_cmd_len < 16)
    2489             :                 return 0;
    2490           0 :         if (sdp->try_rc_10_first)
    2491             :                 return 0;
    2492           0 :         if (sdp->scsi_level > SCSI_SPC_2)
    2493             :                 return 1;
    2494           0 :         if (scsi_device_protection(sdp))
    2495           0 :                 return 1;
    2496             :         return 0;
    2497             : }
    2498             : 
    2499             : /*
    2500             :  * read disk capacity
    2501             :  */
    2502             : static void
    2503           0 : sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer)
    2504             : {
    2505           0 :         int sector_size;
    2506           0 :         struct scsi_device *sdp = sdkp->device;
    2507             : 
    2508           0 :         if (sd_try_rc16_first(sdp)) {
    2509           0 :                 sector_size = read_capacity_16(sdkp, sdp, buffer);
    2510           0 :                 if (sector_size == -EOVERFLOW)
    2511           0 :                         goto got_data;
    2512           0 :                 if (sector_size == -ENODEV)
    2513             :                         return;
    2514           0 :                 if (sector_size < 0)
    2515           0 :                         sector_size = read_capacity_10(sdkp, sdp, buffer);
    2516           0 :                 if (sector_size < 0)
    2517             :                         return;
    2518             :         } else {
    2519           0 :                 sector_size = read_capacity_10(sdkp, sdp, buffer);
    2520           0 :                 if (sector_size == -EOVERFLOW)
    2521           0 :                         goto got_data;
    2522           0 :                 if (sector_size < 0)
    2523             :                         return;
    2524           0 :                 if ((sizeof(sdkp->capacity) > 4) &&
    2525           0 :                     (sdkp->capacity > 0xffffffffULL)) {
    2526           0 :                         int old_sector_size = sector_size;
    2527           0 :                         sd_printk(KERN_NOTICE, sdkp, "Very big device. "
    2528             :                                         "Trying to use READ CAPACITY(16).\n");
    2529           0 :                         sector_size = read_capacity_16(sdkp, sdp, buffer);
    2530           0 :                         if (sector_size < 0) {
    2531           0 :                                 sd_printk(KERN_NOTICE, sdkp,
    2532             :                                         "Using 0xffffffff as device size\n");
    2533           0 :                                 sdkp->capacity = 1 + (sector_t) 0xffffffff;
    2534           0 :                                 sector_size = old_sector_size;
    2535           0 :                                 goto got_data;
    2536             :                         }
    2537             :                         /* Remember that READ CAPACITY(16) succeeded */
    2538           0 :                         sdp->try_rc_10_first = 0;
    2539             :                 }
    2540             :         }
    2541             : 
    2542             :         /* Some devices are known to return the total number of blocks,
    2543             :          * not the highest block number.  Some devices have versions
    2544             :          * which do this and others which do not.  Some devices we might
    2545             :          * suspect of doing this but we don't know for certain.
    2546             :          *
    2547             :          * If we know the reported capacity is wrong, decrement it.  If
    2548             :          * we can only guess, then assume the number of blocks is even
    2549             :          * (usually true but not always) and err on the side of lowering
    2550             :          * the capacity.
    2551             :          */
    2552           0 :         if (sdp->fix_capacity ||
    2553           0 :             (sdp->guess_capacity && (sdkp->capacity & 0x01))) {
    2554           0 :                 sd_printk(KERN_INFO, sdkp, "Adjusting the sector count "
    2555             :                                 "from its reported value: %llu\n",
    2556             :                                 (unsigned long long) sdkp->capacity);
    2557           0 :                 --sdkp->capacity;
    2558             :         }
    2559             : 
    2560           0 : got_data:
    2561           0 :         if (sector_size == 0) {
    2562           0 :                 sector_size = 512;
    2563           0 :                 sd_printk(KERN_NOTICE, sdkp, "Sector size 0 reported, "
    2564             :                           "assuming 512.\n");
    2565             :         }
    2566             : 
    2567           0 :         if (sector_size != 512 &&
    2568           0 :             sector_size != 1024 &&
    2569           0 :             sector_size != 2048 &&
    2570           0 :             sector_size != 4096) {
    2571           0 :                 sd_printk(KERN_NOTICE, sdkp, "Unsupported sector size %d.\n",
    2572             :                           sector_size);
    2573             :                 /*
    2574             :                  * The user might want to re-format the drive with
    2575             :                  * a supported sectorsize.  Once this happens, it
    2576             :                  * would be relatively trivial to set the thing up.
    2577             :                  * For this reason, we leave the thing in the table.
    2578             :                  */
    2579           0 :                 sdkp->capacity = 0;
    2580             :                 /*
    2581             :                  * set a bogus sector size so the normal read/write
    2582             :                  * logic in the block layer will eventually refuse any
    2583             :                  * request on this device without tripping over power
    2584             :                  * of two sector size assumptions
    2585             :                  */
    2586           0 :                 sector_size = 512;
    2587             :         }
    2588           0 :         blk_queue_logical_block_size(sdp->request_queue, sector_size);
    2589           0 :         blk_queue_physical_block_size(sdp->request_queue,
    2590             :                                       sdkp->physical_block_size);
    2591           0 :         sdkp->device->sector_size = sector_size;
    2592             : 
    2593           0 :         if (sdkp->capacity > 0xffffffff)
    2594           0 :                 sdp->use_16_for_rw = 1;
    2595             : 
    2596             : }
    2597             : 
    2598             : /*
    2599             :  * Print disk capacity
    2600             :  */
    2601             : static void
    2602           0 : sd_print_capacity(struct scsi_disk *sdkp,
    2603             :                   sector_t old_capacity)
    2604             : {
    2605           0 :         int sector_size = sdkp->device->sector_size;
    2606           0 :         char cap_str_2[10], cap_str_10[10];
    2607             : 
    2608           0 :         if (!sdkp->first_scan && old_capacity == sdkp->capacity)
    2609           0 :                 return;
    2610             : 
    2611           0 :         string_get_size(sdkp->capacity, sector_size,
    2612             :                         STRING_UNITS_2, cap_str_2, sizeof(cap_str_2));
    2613           0 :         string_get_size(sdkp->capacity, sector_size,
    2614             :                         STRING_UNITS_10, cap_str_10, sizeof(cap_str_10));
    2615             : 
    2616           0 :         sd_printk(KERN_NOTICE, sdkp,
    2617             :                   "%llu %d-byte logical blocks: (%s/%s)\n",
    2618             :                   (unsigned long long)sdkp->capacity,
    2619             :                   sector_size, cap_str_10, cap_str_2);
    2620             : 
    2621           0 :         if (sdkp->physical_block_size != sector_size)
    2622           0 :                 sd_printk(KERN_NOTICE, sdkp,
    2623             :                           "%u-byte physical blocks\n",
    2624             :                           sdkp->physical_block_size);
    2625             : }
    2626             : 
    2627             : /* called with buffer of length 512 */
    2628             : static inline int
    2629           0 : sd_do_mode_sense(struct scsi_disk *sdkp, int dbd, int modepage,
    2630             :                  unsigned char *buffer, int len, struct scsi_mode_data *data,
    2631             :                  struct scsi_sense_hdr *sshdr)
    2632             : {
    2633           0 :         return scsi_mode_sense(sdkp->device, dbd, modepage, buffer, len,
    2634             :                                SD_TIMEOUT, sdkp->max_retries, data,
    2635             :                                sshdr);
    2636             : }
    2637             : 
    2638             : /*
    2639             :  * read write protect setting, if possible - called only in sd_revalidate_disk()
    2640             :  * called with buffer of length SD_BUF_SIZE
    2641             :  */
    2642             : static void
    2643           0 : sd_read_write_protect_flag(struct scsi_disk *sdkp, unsigned char *buffer)
    2644             : {
    2645           0 :         int res;
    2646           0 :         struct scsi_device *sdp = sdkp->device;
    2647           0 :         struct scsi_mode_data data;
    2648           0 :         int old_wp = sdkp->write_prot;
    2649             : 
    2650           0 :         set_disk_ro(sdkp->disk, 0);
    2651           0 :         if (sdp->skip_ms_page_3f) {
    2652           0 :                 sd_first_printk(KERN_NOTICE, sdkp, "Assuming Write Enabled\n");
    2653           0 :                 return;
    2654             :         }
    2655             : 
    2656           0 :         if (sdp->use_192_bytes_for_3f) {
    2657           0 :                 res = sd_do_mode_sense(sdkp, 0, 0x3F, buffer, 192, &data, NULL);
    2658             :         } else {
    2659             :                 /*
    2660             :                  * First attempt: ask for all pages (0x3F), but only 4 bytes.
    2661             :                  * We have to start carefully: some devices hang if we ask
    2662             :                  * for more than is available.
    2663             :                  */
    2664           0 :                 res = sd_do_mode_sense(sdkp, 0, 0x3F, buffer, 4, &data, NULL);
    2665             : 
    2666             :                 /*
    2667             :                  * Second attempt: ask for page 0 When only page 0 is
    2668             :                  * implemented, a request for page 3F may return Sense Key
    2669             :                  * 5: Illegal Request, Sense Code 24: Invalid field in
    2670             :                  * CDB.
    2671             :                  */
    2672           0 :                 if (!scsi_status_is_good(res))
    2673           0 :                         res = sd_do_mode_sense(sdkp, 0, 0, buffer, 4, &data, NULL);
    2674             : 
    2675             :                 /*
    2676             :                  * Third attempt: ask 255 bytes, as we did earlier.
    2677             :                  */
    2678           0 :                 if (!scsi_status_is_good(res))
    2679           0 :                         res = sd_do_mode_sense(sdkp, 0, 0x3F, buffer, 255,
    2680             :                                                &data, NULL);
    2681             :         }
    2682             : 
    2683           0 :         if (!scsi_status_is_good(res)) {
    2684           0 :                 sd_first_printk(KERN_WARNING, sdkp,
    2685             :                           "Test WP failed, assume Write Enabled\n");
    2686             :         } else {
    2687           0 :                 sdkp->write_prot = ((data.device_specific & 0x80) != 0);
    2688           0 :                 set_disk_ro(sdkp->disk, sdkp->write_prot);
    2689           0 :                 if (sdkp->first_scan || old_wp != sdkp->write_prot) {
    2690           0 :                         sd_printk(KERN_NOTICE, sdkp, "Write Protect is %s\n",
    2691             :                                   sdkp->write_prot ? "on" : "off");
    2692           0 :                         sd_printk(KERN_DEBUG, sdkp, "Mode Sense: %4ph\n", buffer);
    2693             :                 }
    2694             :         }
    2695             : }
    2696             : 
    2697             : /*
    2698             :  * sd_read_cache_type - called only from sd_revalidate_disk()
    2699             :  * called with buffer of length SD_BUF_SIZE
    2700             :  */
    2701             : static void
    2702           0 : sd_read_cache_type(struct scsi_disk *sdkp, unsigned char *buffer)
    2703             : {
    2704           0 :         int len = 0, res;
    2705           0 :         struct scsi_device *sdp = sdkp->device;
    2706             : 
    2707           0 :         int dbd;
    2708           0 :         int modepage;
    2709           0 :         int first_len;
    2710           0 :         struct scsi_mode_data data;
    2711           0 :         struct scsi_sense_hdr sshdr;
    2712           0 :         int old_wce = sdkp->WCE;
    2713           0 :         int old_rcd = sdkp->RCD;
    2714           0 :         int old_dpofua = sdkp->DPOFUA;
    2715             : 
    2716             : 
    2717           0 :         if (sdkp->cache_override)
    2718           0 :                 return;
    2719             : 
    2720           0 :         first_len = 4;
    2721           0 :         if (sdp->skip_ms_page_8) {
    2722           0 :                 if (sdp->type == TYPE_RBC)
    2723           0 :                         goto defaults;
    2724             :                 else {
    2725           0 :                         if (sdp->skip_ms_page_3f)
    2726           0 :                                 goto defaults;
    2727           0 :                         modepage = 0x3F;
    2728           0 :                         if (sdp->use_192_bytes_for_3f)
    2729           0 :                                 first_len = 192;
    2730             :                         dbd = 0;
    2731             :                 }
    2732           0 :         } else if (sdp->type == TYPE_RBC) {
    2733             :                 modepage = 6;
    2734             :                 dbd = 8;
    2735             :         } else {
    2736           0 :                 modepage = 8;
    2737           0 :                 dbd = 0;
    2738             :         }
    2739             : 
    2740             :         /* cautiously ask */
    2741           0 :         res = sd_do_mode_sense(sdkp, dbd, modepage, buffer, first_len,
    2742             :                         &data, &sshdr);
    2743             : 
    2744           0 :         if (!scsi_status_is_good(res))
    2745           0 :                 goto bad_sense;
    2746             : 
    2747           0 :         if (!data.header_length) {
    2748           0 :                 modepage = 6;
    2749           0 :                 first_len = 0;
    2750           0 :                 sd_first_printk(KERN_ERR, sdkp,
    2751             :                                 "Missing header in MODE_SENSE response\n");
    2752             :         }
    2753             : 
    2754             :         /* that went OK, now ask for the proper length */
    2755           0 :         len = data.length;
    2756             : 
    2757             :         /*
    2758             :          * We're only interested in the first three bytes, actually.
    2759             :          * But the data cache page is defined for the first 20.
    2760             :          */
    2761           0 :         if (len < 3)
    2762           0 :                 goto bad_sense;
    2763           0 :         else if (len > SD_BUF_SIZE) {
    2764           0 :                 sd_first_printk(KERN_NOTICE, sdkp, "Truncating mode parameter "
    2765             :                           "data from %d to %d bytes\n", len, SD_BUF_SIZE);
    2766             :                 len = SD_BUF_SIZE;
    2767             :         }
    2768           0 :         if (modepage == 0x3F && sdp->use_192_bytes_for_3f)
    2769           0 :                 len = 192;
    2770             : 
    2771             :         /* Get the data */
    2772           0 :         if (len > first_len)
    2773           0 :                 res = sd_do_mode_sense(sdkp, dbd, modepage, buffer, len,
    2774             :                                 &data, &sshdr);
    2775             : 
    2776           0 :         if (scsi_status_is_good(res)) {
    2777           0 :                 int offset = data.header_length + data.block_descriptor_length;
    2778             : 
    2779           0 :                 while (offset < len) {
    2780           0 :                         u8 page_code = buffer[offset] & 0x3F;
    2781           0 :                         u8 spf       = buffer[offset] & 0x40;
    2782             : 
    2783           0 :                         if (page_code == 8 || page_code == 6) {
    2784             :                                 /* We're interested only in the first 3 bytes.
    2785             :                                  */
    2786           0 :                                 if (len - offset <= 2) {
    2787           0 :                                         sd_first_printk(KERN_ERR, sdkp,
    2788             :                                                 "Incomplete mode parameter "
    2789             :                                                         "data\n");
    2790           0 :                                         goto defaults;
    2791             :                                 } else {
    2792           0 :                                         modepage = page_code;
    2793           0 :                                         goto Page_found;
    2794             :                                 }
    2795             :                         } else {
    2796             :                                 /* Go to the next page */
    2797           0 :                                 if (spf && len - offset > 3)
    2798           0 :                                         offset += 4 + (buffer[offset+2] << 8) +
    2799           0 :                                                 buffer[offset+3];
    2800           0 :                                 else if (!spf && len - offset > 1)
    2801           0 :                                         offset += 2 + buffer[offset+1];
    2802             :                                 else {
    2803           0 :                                         sd_first_printk(KERN_ERR, sdkp,
    2804             :                                                         "Incomplete mode "
    2805             :                                                         "parameter data\n");
    2806           0 :                                         goto defaults;
    2807             :                                 }
    2808             :                         }
    2809             :                 }
    2810             : 
    2811           0 :                 sd_first_printk(KERN_ERR, sdkp, "No Caching mode page found\n");
    2812           0 :                 goto defaults;
    2813             : 
    2814           0 :         Page_found:
    2815           0 :                 if (modepage == 8) {
    2816           0 :                         sdkp->WCE = ((buffer[offset + 2] & 0x04) != 0);
    2817           0 :                         sdkp->RCD = ((buffer[offset + 2] & 0x01) != 0);
    2818             :                 } else {
    2819           0 :                         sdkp->WCE = ((buffer[offset + 2] & 0x01) == 0);
    2820           0 :                         sdkp->RCD = 0;
    2821             :                 }
    2822             : 
    2823           0 :                 sdkp->DPOFUA = (data.device_specific & 0x10) != 0;
    2824           0 :                 if (sdp->broken_fua) {
    2825           0 :                         sd_first_printk(KERN_NOTICE, sdkp, "Disabling FUA\n");
    2826           0 :                         sdkp->DPOFUA = 0;
    2827           0 :                 } else if (sdkp->DPOFUA && !sdkp->device->use_10_for_rw &&
    2828             :                            !sdkp->device->use_16_for_rw) {
    2829           0 :                         sd_first_printk(KERN_NOTICE, sdkp,
    2830             :                                   "Uses READ/WRITE(6), disabling FUA\n");
    2831           0 :                         sdkp->DPOFUA = 0;
    2832             :                 }
    2833             : 
    2834             :                 /* No cache flush allowed for write protected devices */
    2835           0 :                 if (sdkp->WCE && sdkp->write_prot)
    2836           0 :                         sdkp->WCE = 0;
    2837             : 
    2838           0 :                 if (sdkp->first_scan || old_wce != sdkp->WCE ||
    2839           0 :                     old_rcd != sdkp->RCD || old_dpofua != sdkp->DPOFUA)
    2840           0 :                         sd_printk(KERN_NOTICE, sdkp,
    2841             :                                   "Write cache: %s, read cache: %s, %s\n",
    2842             :                                   sdkp->WCE ? "enabled" : "disabled",
    2843             :                                   sdkp->RCD ? "disabled" : "enabled",
    2844             :                                   sdkp->DPOFUA ? "supports DPO and FUA"
    2845             :                                   : "doesn't support DPO or FUA");
    2846             : 
    2847           0 :                 return;
    2848             :         }
    2849             : 
    2850           0 : bad_sense:
    2851           0 :         if (scsi_sense_valid(&sshdr) &&
    2852           0 :             sshdr.sense_key == ILLEGAL_REQUEST &&
    2853           0 :             sshdr.asc == 0x24 && sshdr.ascq == 0x0)
    2854             :                 /* Invalid field in CDB */
    2855           0 :                 sd_first_printk(KERN_NOTICE, sdkp, "Cache data unavailable\n");
    2856             :         else
    2857           0 :                 sd_first_printk(KERN_ERR, sdkp,
    2858             :                                 "Asking for cache data failed\n");
    2859             : 
    2860           0 : defaults:
    2861           0 :         if (sdp->wce_default_on) {
    2862           0 :                 sd_first_printk(KERN_NOTICE, sdkp,
    2863             :                                 "Assuming drive cache: write back\n");
    2864           0 :                 sdkp->WCE = 1;
    2865             :         } else {
    2866           0 :                 sd_first_printk(KERN_ERR, sdkp,
    2867             :                                 "Assuming drive cache: write through\n");
    2868           0 :                 sdkp->WCE = 0;
    2869             :         }
    2870           0 :         sdkp->RCD = 0;
    2871           0 :         sdkp->DPOFUA = 0;
    2872             : }
    2873             : 
    2874             : /*
    2875             :  * The ATO bit indicates whether the DIF application tag is available
    2876             :  * for use by the operating system.
    2877             :  */
    2878           0 : static void sd_read_app_tag_own(struct scsi_disk *sdkp, unsigned char *buffer)
    2879             : {
    2880           0 :         int res, offset;
    2881           0 :         struct scsi_device *sdp = sdkp->device;
    2882           0 :         struct scsi_mode_data data;
    2883           0 :         struct scsi_sense_hdr sshdr;
    2884             : 
    2885           0 :         if (sdp->type != TYPE_DISK && sdp->type != TYPE_ZBC)
    2886             :                 return;
    2887             : 
    2888           0 :         if (sdkp->protection_type == 0)
    2889             :                 return;
    2890             : 
    2891           0 :         res = scsi_mode_sense(sdp, 1, 0x0a, buffer, 36, SD_TIMEOUT,
    2892             :                               sdkp->max_retries, &data, &sshdr);
    2893             : 
    2894           0 :         if (!scsi_status_is_good(res) || !data.header_length ||
    2895           0 :             data.length < 6) {
    2896           0 :                 sd_first_printk(KERN_WARNING, sdkp,
    2897             :                           "getting Control mode page failed, assume no ATO\n");
    2898             : 
    2899           0 :                 if (scsi_sense_valid(&sshdr))
    2900           0 :                         sd_print_sense_hdr(sdkp, &sshdr);
    2901             : 
    2902           0 :                 return;
    2903             :         }
    2904             : 
    2905           0 :         offset = data.header_length + data.block_descriptor_length;
    2906             : 
    2907           0 :         if ((buffer[offset] & 0x3f) != 0x0a) {
    2908           0 :                 sd_first_printk(KERN_ERR, sdkp, "ATO Got wrong page\n");
    2909           0 :                 return;
    2910             :         }
    2911             : 
    2912           0 :         if ((buffer[offset + 5] & 0x80) == 0)
    2913             :                 return;
    2914             : 
    2915           0 :         sdkp->ATO = 1;
    2916             : 
    2917           0 :         return;
    2918             : }
    2919             : 
    2920             : /**
    2921             :  * sd_read_block_limits - Query disk device for preferred I/O sizes.
    2922             :  * @sdkp: disk to query
    2923             :  */
    2924           0 : static void sd_read_block_limits(struct scsi_disk *sdkp)
    2925             : {
    2926           0 :         unsigned int sector_sz = sdkp->device->sector_size;
    2927           0 :         const int vpd_len = 64;
    2928           0 :         unsigned char *buffer = kmalloc(vpd_len, GFP_KERNEL);
    2929             : 
    2930           0 :         if (!buffer ||
    2931             :             /* Block Limits VPD */
    2932           0 :             scsi_get_vpd_page(sdkp->device, 0xb0, buffer, vpd_len))
    2933           0 :                 goto out;
    2934             : 
    2935           0 :         blk_queue_io_min(sdkp->disk->queue,
    2936           0 :                          get_unaligned_be16(&buffer[6]) * sector_sz);
    2937             : 
    2938           0 :         sdkp->max_xfer_blocks = get_unaligned_be32(&buffer[8]);
    2939           0 :         sdkp->opt_xfer_blocks = get_unaligned_be32(&buffer[12]);
    2940             : 
    2941           0 :         if (buffer[3] == 0x3c) {
    2942           0 :                 unsigned int lba_count, desc_count;
    2943             : 
    2944           0 :                 sdkp->max_ws_blocks = (u32)get_unaligned_be64(&buffer[36]);
    2945             : 
    2946           0 :                 if (!sdkp->lbpme)
    2947           0 :                         goto out;
    2948             : 
    2949           0 :                 lba_count = get_unaligned_be32(&buffer[20]);
    2950           0 :                 desc_count = get_unaligned_be32(&buffer[24]);
    2951             : 
    2952           0 :                 if (lba_count && desc_count)
    2953           0 :                         sdkp->max_unmap_blocks = lba_count;
    2954             : 
    2955           0 :                 sdkp->unmap_granularity = get_unaligned_be32(&buffer[28]);
    2956             : 
    2957           0 :                 if (buffer[32] & 0x80)
    2958           0 :                         sdkp->unmap_alignment =
    2959           0 :                                 get_unaligned_be32(&buffer[32]) & ~(1 << 31);
    2960             : 
    2961           0 :                 if (!sdkp->lbpvpd) { /* LBP VPD page not provided */
    2962             : 
    2963           0 :                         if (sdkp->max_unmap_blocks)
    2964           0 :                                 sd_config_discard(sdkp, SD_LBP_UNMAP);
    2965             :                         else
    2966           0 :                                 sd_config_discard(sdkp, SD_LBP_WS16);
    2967             : 
    2968             :                 } else {        /* LBP VPD page tells us what to use */
    2969           0 :                         if (sdkp->lbpu && sdkp->max_unmap_blocks)
    2970           0 :                                 sd_config_discard(sdkp, SD_LBP_UNMAP);
    2971           0 :                         else if (sdkp->lbpws)
    2972           0 :                                 sd_config_discard(sdkp, SD_LBP_WS16);
    2973           0 :                         else if (sdkp->lbpws10)
    2974           0 :                                 sd_config_discard(sdkp, SD_LBP_WS10);
    2975             :                         else
    2976           0 :                                 sd_config_discard(sdkp, SD_LBP_DISABLE);
    2977             :                 }
    2978             :         }
    2979             : 
    2980           0 :  out:
    2981           0 :         kfree(buffer);
    2982           0 : }
    2983             : 
    2984             : /**
    2985             :  * sd_read_block_characteristics - Query block dev. characteristics
    2986             :  * @sdkp: disk to query
    2987             :  */
    2988           0 : static void sd_read_block_characteristics(struct scsi_disk *sdkp)
    2989             : {
    2990           0 :         struct request_queue *q = sdkp->disk->queue;
    2991           0 :         unsigned char *buffer;
    2992           0 :         u16 rot;
    2993           0 :         const int vpd_len = 64;
    2994             : 
    2995           0 :         buffer = kmalloc(vpd_len, GFP_KERNEL);
    2996             : 
    2997           0 :         if (!buffer ||
    2998             :             /* Block Device Characteristics VPD */
    2999           0 :             scsi_get_vpd_page(sdkp->device, 0xb1, buffer, vpd_len))
    3000           0 :                 goto out;
    3001             : 
    3002           0 :         rot = get_unaligned_be16(&buffer[4]);
    3003             : 
    3004           0 :         if (rot == 1) {
    3005           0 :                 blk_queue_flag_set(QUEUE_FLAG_NONROT, q);
    3006           0 :                 blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, q);
    3007             :         }
    3008             : 
    3009           0 :         if (sdkp->device->type == TYPE_ZBC) {
    3010             :                 /* Host-managed */
    3011           0 :                 blk_queue_set_zoned(sdkp->disk, BLK_ZONED_HM);
    3012             :         } else {
    3013           0 :                 sdkp->zoned = (buffer[8] >> 4) & 3;
    3014           0 :                 if (sdkp->zoned == 1) {
    3015             :                         /* Host-aware */
    3016           0 :                         blk_queue_set_zoned(sdkp->disk, BLK_ZONED_HA);
    3017             :                 } else {
    3018             :                         /* Regular disk or drive managed disk */
    3019           0 :                         blk_queue_set_zoned(sdkp->disk, BLK_ZONED_NONE);
    3020             :                 }
    3021             :         }
    3022             : 
    3023           0 :         if (!sdkp->first_scan)
    3024           0 :                 goto out;
    3025             : 
    3026           0 :         if (blk_queue_is_zoned(q)) {
    3027             :                 sd_printk(KERN_NOTICE, sdkp, "Host-%s zoned block device\n",
    3028             :                       q->limits.zoned == BLK_ZONED_HM ? "managed" : "aware");
    3029             :         } else {
    3030           0 :                 if (sdkp->zoned == 1)
    3031           0 :                         sd_printk(KERN_NOTICE, sdkp,
    3032             :                                   "Host-aware SMR disk used as regular disk\n");
    3033           0 :                 else if (sdkp->zoned == 2)
    3034           0 :                         sd_printk(KERN_NOTICE, sdkp,
    3035             :                                   "Drive-managed SMR disk\n");
    3036             :         }
    3037             : 
    3038           0 :  out:
    3039           0 :         kfree(buffer);
    3040           0 : }
    3041             : 
    3042             : /**
    3043             :  * sd_read_block_provisioning - Query provisioning VPD page
    3044             :  * @sdkp: disk to query
    3045             :  */
    3046           0 : static void sd_read_block_provisioning(struct scsi_disk *sdkp)
    3047             : {
    3048           0 :         unsigned char *buffer;
    3049           0 :         const int vpd_len = 8;
    3050             : 
    3051           0 :         if (sdkp->lbpme == 0)
    3052             :                 return;
    3053             : 
    3054           0 :         buffer = kmalloc(vpd_len, GFP_KERNEL);
    3055             : 
    3056           0 :         if (!buffer || scsi_get_vpd_page(sdkp->device, 0xb2, buffer, vpd_len))
    3057           0 :                 goto out;
    3058             : 
    3059           0 :         sdkp->lbpvpd = 1;
    3060           0 :         sdkp->lbpu   = (buffer[5] >> 7) & 1;       /* UNMAP */
    3061           0 :         sdkp->lbpws  = (buffer[5] >> 6) & 1;       /* WRITE SAME(16) with UNMAP */
    3062           0 :         sdkp->lbpws10        = (buffer[5] >> 5) & 1;       /* WRITE SAME(10) with UNMAP */
    3063             : 
    3064           0 :  out:
    3065           0 :         kfree(buffer);
    3066             : }
    3067             : 
    3068           0 : static void sd_read_write_same(struct scsi_disk *sdkp, unsigned char *buffer)
    3069             : {
    3070           0 :         struct scsi_device *sdev = sdkp->device;
    3071             : 
    3072           0 :         if (sdev->host->no_write_same) {
    3073           0 :                 sdev->no_write_same = 1;
    3074             : 
    3075           0 :                 return;
    3076             :         }
    3077             : 
    3078           0 :         if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, INQUIRY) < 0) {
    3079             :                 /* too large values might cause issues with arcmsr */
    3080           0 :                 int vpd_buf_len = 64;
    3081             : 
    3082           0 :                 sdev->no_report_opcodes = 1;
    3083             : 
    3084             :                 /* Disable WRITE SAME if REPORT SUPPORTED OPERATION
    3085             :                  * CODES is unsupported and the device has an ATA
    3086             :                  * Information VPD page (SAT).
    3087             :                  */
    3088           0 :                 if (!scsi_get_vpd_page(sdev, 0x89, buffer, vpd_buf_len))
    3089           0 :                         sdev->no_write_same = 1;
    3090             :         }
    3091             : 
    3092           0 :         if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, WRITE_SAME_16) == 1)
    3093           0 :                 sdkp->ws16 = 1;
    3094             : 
    3095           0 :         if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, WRITE_SAME) == 1)
    3096           0 :                 sdkp->ws10 = 1;
    3097             : }
    3098             : 
    3099           0 : static void sd_read_security(struct scsi_disk *sdkp, unsigned char *buffer)
    3100             : {
    3101           0 :         struct scsi_device *sdev = sdkp->device;
    3102             : 
    3103           0 :         if (!sdev->security_supported)
    3104             :                 return;
    3105             : 
    3106           0 :         if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE,
    3107           0 :                         SECURITY_PROTOCOL_IN) == 1 &&
    3108           0 :             scsi_report_opcode(sdev, buffer, SD_BUF_SIZE,
    3109             :                         SECURITY_PROTOCOL_OUT) == 1)
    3110           0 :                 sdkp->security = 1;
    3111             : }
    3112             : 
    3113             : /*
    3114             :  * Determine the device's preferred I/O size for reads and writes
    3115             :  * unless the reported value is unreasonably small, large, not a
    3116             :  * multiple of the physical block size, or simply garbage.
    3117             :  */
    3118           0 : static bool sd_validate_opt_xfer_size(struct scsi_disk *sdkp,
    3119             :                                       unsigned int dev_max)
    3120             : {
    3121           0 :         struct scsi_device *sdp = sdkp->device;
    3122           0 :         unsigned int opt_xfer_bytes =
    3123           0 :                 logical_to_bytes(sdp, sdkp->opt_xfer_blocks);
    3124             : 
    3125           0 :         if (sdkp->opt_xfer_blocks == 0)
    3126             :                 return false;
    3127             : 
    3128           0 :         if (sdkp->opt_xfer_blocks > dev_max) {
    3129           0 :                 sd_first_printk(KERN_WARNING, sdkp,
    3130             :                                 "Optimal transfer size %u logical blocks " \
    3131             :                                 "> dev_max (%u logical blocks)\n",
    3132             :                                 sdkp->opt_xfer_blocks, dev_max);
    3133           0 :                 return false;
    3134             :         }
    3135             : 
    3136           0 :         if (sdkp->opt_xfer_blocks > SD_DEF_XFER_BLOCKS) {
    3137           0 :                 sd_first_printk(KERN_WARNING, sdkp,
    3138             :                                 "Optimal transfer size %u logical blocks " \
    3139             :                                 "> sd driver limit (%u logical blocks)\n",
    3140             :                                 sdkp->opt_xfer_blocks, SD_DEF_XFER_BLOCKS);
    3141           0 :                 return false;
    3142             :         }
    3143             : 
    3144           0 :         if (opt_xfer_bytes < PAGE_SIZE) {
    3145           0 :                 sd_first_printk(KERN_WARNING, sdkp,
    3146             :                                 "Optimal transfer size %u bytes < " \
    3147             :                                 "PAGE_SIZE (%u bytes)\n",
    3148             :                                 opt_xfer_bytes, (unsigned int)PAGE_SIZE);
    3149           0 :                 return false;
    3150             :         }
    3151             : 
    3152           0 :         if (opt_xfer_bytes & (sdkp->physical_block_size - 1)) {
    3153           0 :                 sd_first_printk(KERN_WARNING, sdkp,
    3154             :                                 "Optimal transfer size %u bytes not a " \
    3155             :                                 "multiple of physical block size (%u bytes)\n",
    3156             :                                 opt_xfer_bytes, sdkp->physical_block_size);
    3157           0 :                 return false;
    3158             :         }
    3159             : 
    3160           0 :         sd_first_printk(KERN_INFO, sdkp, "Optimal transfer size %u bytes\n",
    3161             :                         opt_xfer_bytes);
    3162             :         return true;
    3163             : }
    3164             : 
    3165             : /**
    3166             :  *      sd_revalidate_disk - called the first time a new disk is seen,
    3167             :  *      performs disk spin up, read_capacity, etc.
    3168             :  *      @disk: struct gendisk we care about
    3169             :  **/
    3170           0 : static int sd_revalidate_disk(struct gendisk *disk)
    3171             : {
    3172           0 :         struct scsi_disk *sdkp = scsi_disk(disk);
    3173           0 :         struct scsi_device *sdp = sdkp->device;
    3174           0 :         struct request_queue *q = sdkp->disk->queue;
    3175           0 :         sector_t old_capacity = sdkp->capacity;
    3176           0 :         unsigned char *buffer;
    3177           0 :         unsigned int dev_max, rw_max;
    3178             : 
    3179           0 :         SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp,
    3180           0 :                                       "sd_revalidate_disk\n"));
    3181             : 
    3182             :         /*
    3183             :          * If the device is offline, don't try and read capacity or any
    3184             :          * of the other niceties.
    3185             :          */
    3186           0 :         if (!scsi_device_online(sdp))
    3187           0 :                 goto out;
    3188             : 
    3189           0 :         buffer = kmalloc(SD_BUF_SIZE, GFP_KERNEL);
    3190           0 :         if (!buffer) {
    3191           0 :                 sd_printk(KERN_WARNING, sdkp, "sd_revalidate_disk: Memory "
    3192             :                           "allocation failure.\n");
    3193           0 :                 goto out;
    3194             :         }
    3195             : 
    3196           0 :         sd_spinup_disk(sdkp);
    3197             : 
    3198             :         /*
    3199             :          * Without media there is no reason to ask; moreover, some devices
    3200             :          * react badly if we do.
    3201             :          */
    3202           0 :         if (sdkp->media_present) {
    3203           0 :                 sd_read_capacity(sdkp, buffer);
    3204             : 
    3205             :                 /*
    3206             :                  * set the default to rotational.  All non-rotational devices
    3207             :                  * support the block characteristics VPD page, which will
    3208             :                  * cause this to be updated correctly and any device which
    3209             :                  * doesn't support it should be treated as rotational.
    3210             :                  */
    3211           0 :                 blk_queue_flag_clear(QUEUE_FLAG_NONROT, q);
    3212           0 :                 blk_queue_flag_set(QUEUE_FLAG_ADD_RANDOM, q);
    3213             : 
    3214           0 :                 if (scsi_device_supports_vpd(sdp)) {
    3215           0 :                         sd_read_block_provisioning(sdkp);
    3216           0 :                         sd_read_block_limits(sdkp);
    3217           0 :                         sd_read_block_characteristics(sdkp);
    3218           0 :                         sd_zbc_read_zones(sdkp, buffer);
    3219             :                 }
    3220             : 
    3221           0 :                 sd_print_capacity(sdkp, old_capacity);
    3222             : 
    3223           0 :                 sd_read_write_protect_flag(sdkp, buffer);
    3224           0 :                 sd_read_cache_type(sdkp, buffer);
    3225           0 :                 sd_read_app_tag_own(sdkp, buffer);
    3226           0 :                 sd_read_write_same(sdkp, buffer);
    3227           0 :                 sd_read_security(sdkp, buffer);
    3228             :         }
    3229             : 
    3230             :         /*
    3231             :          * We now have all cache related info, determine how we deal
    3232             :          * with flush requests.
    3233             :          */
    3234           0 :         sd_set_flush_flag(sdkp);
    3235             : 
    3236             :         /* Initial block count limit based on CDB TRANSFER LENGTH field size. */
    3237           0 :         dev_max = sdp->use_16_for_rw ? SD_MAX_XFER_BLOCKS : SD_DEF_XFER_BLOCKS;
    3238             : 
    3239             :         /* Some devices report a maximum block count for READ/WRITE requests. */
    3240           0 :         dev_max = min_not_zero(dev_max, sdkp->max_xfer_blocks);
    3241           0 :         q->limits.max_dev_sectors = logical_to_sectors(sdp, dev_max);
    3242             : 
    3243           0 :         if (sd_validate_opt_xfer_size(sdkp, dev_max)) {
    3244           0 :                 q->limits.io_opt = logical_to_bytes(sdp, sdkp->opt_xfer_blocks);
    3245           0 :                 rw_max = logical_to_sectors(sdp, sdkp->opt_xfer_blocks);
    3246             :         } else {
    3247           0 :                 q->limits.io_opt = 0;
    3248           0 :                 rw_max = min_not_zero(logical_to_sectors(sdp, dev_max),
    3249             :                                       (sector_t)BLK_DEF_MAX_SECTORS);
    3250             :         }
    3251             : 
    3252             :         /* Do not exceed controller limit */
    3253           0 :         rw_max = min(rw_max, queue_max_hw_sectors(q));
    3254             : 
    3255             :         /*
    3256             :          * Only update max_sectors if previously unset or if the current value
    3257             :          * exceeds the capabilities of the hardware.
    3258             :          */
    3259           0 :         if (sdkp->first_scan ||
    3260           0 :             q->limits.max_sectors > q->limits.max_dev_sectors ||
    3261             :             q->limits.max_sectors > q->limits.max_hw_sectors)
    3262           0 :                 q->limits.max_sectors = rw_max;
    3263             : 
    3264           0 :         sdkp->first_scan = 0;
    3265             : 
    3266           0 :         set_capacity_and_notify(disk, logical_to_sectors(sdp, sdkp->capacity));
    3267           0 :         sd_config_write_same(sdkp);
    3268           0 :         kfree(buffer);
    3269             : 
    3270             :         /*
    3271             :          * For a zoned drive, revalidating the zones can be done only once
    3272             :          * the gendisk capacity is set. So if this fails, set back the gendisk
    3273             :          * capacity to 0.
    3274             :          */
    3275           0 :         if (sd_zbc_revalidate_zones(sdkp))
    3276             :                 set_capacity_and_notify(disk, 0);
    3277             : 
    3278           0 :  out:
    3279           0 :         return 0;
    3280             : }
    3281             : 
    3282             : /**
    3283             :  *      sd_unlock_native_capacity - unlock native capacity
    3284             :  *      @disk: struct gendisk to set capacity for
    3285             :  *
    3286             :  *      Block layer calls this function if it detects that partitions
    3287             :  *      on @disk reach beyond the end of the device.  If the SCSI host
    3288             :  *      implements ->unlock_native_capacity() method, it's invoked to
    3289             :  *      give it a chance to adjust the device capacity.
    3290             :  *
    3291             :  *      CONTEXT:
    3292             :  *      Defined by block layer.  Might sleep.
    3293             :  */
    3294           0 : static void sd_unlock_native_capacity(struct gendisk *disk)
    3295             : {
    3296           0 :         struct scsi_device *sdev = scsi_disk(disk)->device;
    3297             : 
    3298           0 :         if (sdev->host->hostt->unlock_native_capacity)
    3299           0 :                 sdev->host->hostt->unlock_native_capacity(sdev);
    3300           0 : }
    3301             : 
    3302             : /**
    3303             :  *      sd_format_disk_name - format disk name
    3304             :  *      @prefix: name prefix - ie. "sd" for SCSI disks
    3305             :  *      @index: index of the disk to format name for
    3306             :  *      @buf: output buffer
    3307             :  *      @buflen: length of the output buffer
    3308             :  *
    3309             :  *      SCSI disk names starts at sda.  The 26th device is sdz and the
    3310             :  *      27th is sdaa.  The last one for two lettered suffix is sdzz
    3311             :  *      which is followed by sdaaa.
    3312             :  *
    3313             :  *      This is basically 26 base counting with one extra 'nil' entry
    3314             :  *      at the beginning from the second digit on and can be
    3315             :  *      determined using similar method as 26 base conversion with the
    3316             :  *      index shifted -1 after each digit is computed.
    3317             :  *
    3318             :  *      CONTEXT:
    3319             :  *      Don't care.
    3320             :  *
    3321             :  *      RETURNS:
    3322             :  *      0 on success, -errno on failure.
    3323             :  */
    3324           0 : static int sd_format_disk_name(char *prefix, int index, char *buf, int buflen)
    3325             : {
    3326           0 :         const int base = 'z' - 'a' + 1;
    3327           0 :         char *begin = buf + strlen(prefix);
    3328           0 :         char *end = buf + buflen;
    3329           0 :         char *p;
    3330           0 :         int unit;
    3331             : 
    3332           0 :         p = end - 1;
    3333           0 :         *p = '\0';
    3334           0 :         unit = base;
    3335           0 :         do {
    3336           0 :                 if (p == begin)
    3337             :                         return -EINVAL;
    3338           0 :                 *--p = 'a' + (index % unit);
    3339           0 :                 index = (index / unit) - 1;
    3340           0 :         } while (index >= 0);
    3341             : 
    3342           0 :         memmove(begin, p, end - p);
    3343           0 :         memcpy(buf, prefix, strlen(prefix));
    3344             : 
    3345           0 :         return 0;
    3346             : }
    3347             : 
    3348             : /**
    3349             :  *      sd_probe - called during driver initialization and whenever a
    3350             :  *      new scsi device is attached to the system. It is called once
    3351             :  *      for each scsi device (not just disks) present.
    3352             :  *      @dev: pointer to device object
    3353             :  *
    3354             :  *      Returns 0 if successful (or not interested in this scsi device 
    3355             :  *      (e.g. scanner)); 1 when there is an error.
    3356             :  *
    3357             :  *      Note: this function is invoked from the scsi mid-level.
    3358             :  *      This function sets up the mapping between a given 
    3359             :  *      <host,channel,id,lun> (found in sdp) and new device name 
    3360             :  *      (e.g. /dev/sda). More precisely it is the block device major 
    3361             :  *      and minor number that is chosen here.
    3362             :  *
    3363             :  *      Assume sd_probe is not re-entrant (for time being)
    3364             :  *      Also think about sd_probe() and sd_remove() running coincidentally.
    3365             :  **/
    3366           0 : static int sd_probe(struct device *dev)
    3367             : {
    3368           0 :         struct scsi_device *sdp = to_scsi_device(dev);
    3369           0 :         struct scsi_disk *sdkp;
    3370           0 :         struct gendisk *gd;
    3371           0 :         int index;
    3372           0 :         int error;
    3373             : 
    3374           0 :         scsi_autopm_get_device(sdp);
    3375           0 :         error = -ENODEV;
    3376           0 :         if (sdp->type != TYPE_DISK &&
    3377           0 :             sdp->type != TYPE_ZBC &&
    3378           0 :             sdp->type != TYPE_MOD &&
    3379             :             sdp->type != TYPE_RBC)
    3380           0 :                 goto out;
    3381             : 
    3382           0 :         if (!IS_ENABLED(CONFIG_BLK_DEV_ZONED) && sdp->type == TYPE_ZBC) {
    3383           0 :                 sdev_printk(KERN_WARNING, sdp,
    3384             :                             "Unsupported ZBC host-managed device.\n");
    3385           0 :                 goto out;
    3386             :         }
    3387             : 
    3388           0 :         SCSI_LOG_HLQUEUE(3, sdev_printk(KERN_INFO, sdp,
    3389           0 :                                         "sd_probe\n"));
    3390             : 
    3391           0 :         error = -ENOMEM;
    3392           0 :         sdkp = kzalloc(sizeof(*sdkp), GFP_KERNEL);
    3393           0 :         if (!sdkp)
    3394           0 :                 goto out;
    3395             : 
    3396           0 :         gd = alloc_disk(SD_MINORS);
    3397           0 :         if (!gd)
    3398           0 :                 goto out_free;
    3399             : 
    3400           0 :         index = ida_alloc(&sd_index_ida, GFP_KERNEL);
    3401           0 :         if (index < 0) {
    3402           0 :                 sdev_printk(KERN_WARNING, sdp, "sd_probe: memory exhausted.\n");
    3403           0 :                 goto out_put;
    3404             :         }
    3405             : 
    3406           0 :         error = sd_format_disk_name("sd", index, gd->disk_name, DISK_NAME_LEN);
    3407           0 :         if (error) {
    3408           0 :                 sdev_printk(KERN_WARNING, sdp, "SCSI disk (sd) name length exceeded.\n");
    3409           0 :                 goto out_free_index;
    3410             :         }
    3411             : 
    3412           0 :         sdkp->device = sdp;
    3413           0 :         sdkp->driver = &sd_template;
    3414           0 :         sdkp->disk = gd;
    3415           0 :         sdkp->index = index;
    3416           0 :         sdkp->max_retries = SD_MAX_RETRIES;
    3417           0 :         atomic_set(&sdkp->openers, 0);
    3418           0 :         atomic_set(&sdkp->device->ioerr_cnt, 0);
    3419             : 
    3420           0 :         if (!sdp->request_queue->rq_timeout) {
    3421           0 :                 if (sdp->type != TYPE_MOD)
    3422           0 :                         blk_queue_rq_timeout(sdp->request_queue, SD_TIMEOUT);
    3423             :                 else
    3424           0 :                         blk_queue_rq_timeout(sdp->request_queue,
    3425             :                                              SD_MOD_TIMEOUT);
    3426             :         }
    3427             : 
    3428           0 :         device_initialize(&sdkp->dev);
    3429           0 :         sdkp->dev.parent = dev;
    3430           0 :         sdkp->dev.class = &sd_disk_class;
    3431           0 :         dev_set_name(&sdkp->dev, "%s", dev_name(dev));
    3432             : 
    3433           0 :         error = device_add(&sdkp->dev);
    3434           0 :         if (error)
    3435           0 :                 goto out_free_index;
    3436             : 
    3437           0 :         get_device(dev);
    3438           0 :         dev_set_drvdata(dev, sdkp);
    3439             : 
    3440           0 :         gd->major = sd_major((index & 0xf0) >> 4);
    3441           0 :         gd->first_minor = ((index & 0xf) << 4) | (index & 0xfff00);
    3442             : 
    3443           0 :         gd->fops = &sd_fops;
    3444           0 :         gd->private_data = &sdkp->driver;
    3445           0 :         gd->queue = sdkp->device->request_queue;
    3446             : 
    3447             :         /* defaults, until the device tells us otherwise */
    3448           0 :         sdp->sector_size = 512;
    3449           0 :         sdkp->capacity = 0;
    3450           0 :         sdkp->media_present = 1;
    3451           0 :         sdkp->write_prot = 0;
    3452           0 :         sdkp->cache_override = 0;
    3453           0 :         sdkp->WCE = 0;
    3454           0 :         sdkp->RCD = 0;
    3455           0 :         sdkp->ATO = 0;
    3456           0 :         sdkp->first_scan = 1;
    3457           0 :         sdkp->max_medium_access_timeouts = SD_MAX_MEDIUM_TIMEOUTS;
    3458             : 
    3459           0 :         sd_revalidate_disk(gd);
    3460             : 
    3461           0 :         gd->flags = GENHD_FL_EXT_DEVT;
    3462           0 :         if (sdp->removable) {
    3463           0 :                 gd->flags |= GENHD_FL_REMOVABLE;
    3464           0 :                 gd->events |= DISK_EVENT_MEDIA_CHANGE;
    3465           0 :                 gd->event_flags = DISK_EVENT_FLAG_POLL | DISK_EVENT_FLAG_UEVENT;
    3466             :         }
    3467             : 
    3468           0 :         blk_pm_runtime_init(sdp->request_queue, dev);
    3469           0 :         if (sdp->rpm_autosuspend) {
    3470           0 :                 pm_runtime_set_autosuspend_delay(dev,
    3471             :                         sdp->host->hostt->rpm_autosuspend_delay);
    3472             :         }
    3473           0 :         device_add_disk(dev, gd, NULL);
    3474           0 :         if (sdkp->capacity)
    3475           0 :                 sd_dif_config_host(sdkp);
    3476             : 
    3477           0 :         sd_revalidate_disk(gd);
    3478             : 
    3479           0 :         if (sdkp->security) {
    3480           0 :                 sdkp->opal_dev = init_opal_dev(sdkp, &sd_sec_submit);
    3481           0 :                 if (sdkp->opal_dev)
    3482             :                         sd_printk(KERN_NOTICE, sdkp, "supports TCG Opal\n");
    3483             :         }
    3484             : 
    3485           0 :         sd_printk(KERN_NOTICE, sdkp, "Attached SCSI %sdisk\n",
    3486             :                   sdp->removable ? "removable " : "");
    3487           0 :         scsi_autopm_put_device(sdp);
    3488             : 
    3489             :         return 0;
    3490             : 
    3491           0 :  out_free_index:
    3492           0 :         ida_free(&sd_index_ida, index);
    3493           0 :  out_put:
    3494           0 :         put_disk(gd);
    3495           0 :  out_free:
    3496           0 :         sd_zbc_release_disk(sdkp);
    3497           0 :         kfree(sdkp);
    3498             :  out:
    3499           0 :         scsi_autopm_put_device(sdp);
    3500             :         return error;
    3501             : }
    3502             : 
    3503             : /**
    3504             :  *      sd_remove - called whenever a scsi disk (previously recognized by
    3505             :  *      sd_probe) is detached from the system. It is called (potentially
    3506             :  *      multiple times) during sd module unload.
    3507             :  *      @dev: pointer to device object
    3508             :  *
    3509             :  *      Note: this function is invoked from the scsi mid-level.
    3510             :  *      This function potentially frees up a device name (e.g. /dev/sdc)
    3511             :  *      that could be re-used by a subsequent sd_probe().
    3512             :  *      This function is not called when the built-in sd driver is "exit-ed".
    3513             :  **/
    3514           0 : static int sd_remove(struct device *dev)
    3515             : {
    3516           0 :         struct scsi_disk *sdkp;
    3517             : 
    3518           0 :         sdkp = dev_get_drvdata(dev);
    3519           0 :         scsi_autopm_get_device(sdkp->device);
    3520             : 
    3521           0 :         async_synchronize_full_domain(&scsi_sd_pm_domain);
    3522           0 :         device_del(&sdkp->dev);
    3523           0 :         del_gendisk(sdkp->disk);
    3524           0 :         sd_shutdown(dev);
    3525             : 
    3526           0 :         free_opal_dev(sdkp->opal_dev);
    3527             : 
    3528           0 :         mutex_lock(&sd_ref_mutex);
    3529           0 :         dev_set_drvdata(dev, NULL);
    3530           0 :         put_device(&sdkp->dev);
    3531           0 :         mutex_unlock(&sd_ref_mutex);
    3532             : 
    3533           0 :         return 0;
    3534             : }
    3535             : 
    3536             : /**
    3537             :  *      scsi_disk_release - Called to free the scsi_disk structure
    3538             :  *      @dev: pointer to embedded class device
    3539             :  *
    3540             :  *      sd_ref_mutex must be held entering this routine.  Because it is
    3541             :  *      called on last put, you should always use the scsi_disk_get()
    3542             :  *      scsi_disk_put() helpers which manipulate the semaphore directly
    3543             :  *      and never do a direct put_device.
    3544             :  **/
    3545           0 : static void scsi_disk_release(struct device *dev)
    3546             : {
    3547           0 :         struct scsi_disk *sdkp = to_scsi_disk(dev);
    3548           0 :         struct gendisk *disk = sdkp->disk;
    3549           0 :         struct request_queue *q = disk->queue;
    3550             : 
    3551           0 :         ida_free(&sd_index_ida, sdkp->index);
    3552             : 
    3553             :         /*
    3554             :          * Wait until all requests that are in progress have completed.
    3555             :          * This is necessary to avoid that e.g. scsi_end_request() crashes
    3556             :          * due to clearing the disk->private_data pointer. Wait from inside
    3557             :          * scsi_disk_release() instead of from sd_release() to avoid that
    3558             :          * freezing and unfreezing the request queue affects user space I/O
    3559             :          * in case multiple processes open a /dev/sd... node concurrently.
    3560             :          */
    3561           0 :         blk_mq_freeze_queue(q);
    3562           0 :         blk_mq_unfreeze_queue(q);
    3563             : 
    3564           0 :         disk->private_data = NULL;
    3565           0 :         put_disk(disk);
    3566           0 :         put_device(&sdkp->device->sdev_gendev);
    3567             : 
    3568           0 :         sd_zbc_release_disk(sdkp);
    3569             : 
    3570           0 :         kfree(sdkp);
    3571           0 : }
    3572             : 
    3573           0 : static int sd_start_stop_device(struct scsi_disk *sdkp, int start)
    3574             : {
    3575           0 :         unsigned char cmd[6] = { START_STOP };  /* START_VALID */
    3576           0 :         struct scsi_sense_hdr sshdr;
    3577           0 :         struct scsi_device *sdp = sdkp->device;
    3578           0 :         int res;
    3579             : 
    3580           0 :         if (start)
    3581           0 :                 cmd[4] |= 1;    /* START */
    3582             : 
    3583           0 :         if (sdp->start_stop_pwr_cond)
    3584           0 :                 cmd[4] |= start ? 1 << 4 : 3 << 4;  /* Active or Standby */
    3585             : 
    3586           0 :         if (!scsi_device_online(sdp))
    3587             :                 return -ENODEV;
    3588             : 
    3589           0 :         res = scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL, &sshdr,
    3590             :                         SD_TIMEOUT, sdkp->max_retries, 0, RQF_PM, NULL);
    3591           0 :         if (res) {
    3592           0 :                 sd_print_result(sdkp, "Start/Stop Unit failed", res);
    3593           0 :                 if (driver_byte(res) == DRIVER_SENSE)
    3594           0 :                         sd_print_sense_hdr(sdkp, &sshdr);
    3595           0 :                 if (scsi_sense_valid(&sshdr) &&
    3596             :                         /* 0x3a is medium not present */
    3597           0 :                         sshdr.asc == 0x3a)
    3598             :                         res = 0;
    3599             :         }
    3600             : 
    3601             :         /* SCSI error codes must not go to the generic layer */
    3602           0 :         if (res)
    3603           0 :                 return -EIO;
    3604             : 
    3605             :         return 0;
    3606             : }
    3607             : 
    3608             : /*
    3609             :  * Send a SYNCHRONIZE CACHE instruction down to the device through
    3610             :  * the normal SCSI command structure.  Wait for the command to
    3611             :  * complete.
    3612             :  */
    3613           0 : static void sd_shutdown(struct device *dev)
    3614             : {
    3615           0 :         struct scsi_disk *sdkp = dev_get_drvdata(dev);
    3616             : 
    3617           0 :         if (!sdkp)
    3618             :                 return;         /* this can happen */
    3619             : 
    3620           0 :         if (pm_runtime_suspended(dev))
    3621             :                 return;
    3622             : 
    3623           0 :         if (sdkp->WCE && sdkp->media_present) {
    3624           0 :                 sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
    3625           0 :                 sd_sync_cache(sdkp, NULL);
    3626             :         }
    3627             : 
    3628           0 :         if (system_state != SYSTEM_RESTART && sdkp->device->manage_start_stop) {
    3629           0 :                 sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");
    3630           0 :                 sd_start_stop_device(sdkp, 0);
    3631             :         }
    3632             : }
    3633             : 
    3634           0 : static int sd_suspend_common(struct device *dev, bool ignore_stop_errors)
    3635             : {
    3636           0 :         struct scsi_disk *sdkp = dev_get_drvdata(dev);
    3637           0 :         struct scsi_sense_hdr sshdr;
    3638           0 :         int ret = 0;
    3639             : 
    3640           0 :         if (!sdkp)      /* E.g.: runtime suspend following sd_remove() */
    3641             :                 return 0;
    3642             : 
    3643           0 :         if (sdkp->WCE && sdkp->media_present) {
    3644           0 :                 sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
    3645           0 :                 ret = sd_sync_cache(sdkp, &sshdr);
    3646             : 
    3647           0 :                 if (ret) {
    3648             :                         /* ignore OFFLINE device */
    3649           0 :                         if (ret == -ENODEV)
    3650             :                                 return 0;
    3651             : 
    3652           0 :                         if (!scsi_sense_valid(&sshdr) ||
    3653           0 :                             sshdr.sense_key != ILLEGAL_REQUEST)
    3654             :                                 return ret;
    3655             : 
    3656             :                         /*
    3657             :                          * sshdr.sense_key == ILLEGAL_REQUEST means this drive
    3658             :                          * doesn't support sync. There's not much to do and
    3659             :                          * suspend shouldn't fail.
    3660             :                          */
    3661             :                         ret = 0;
    3662             :                 }
    3663             :         }
    3664             : 
    3665           0 :         if (sdkp->device->manage_start_stop) {
    3666           0 :                 sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");
    3667             :                 /* an error is not worth aborting a system sleep */
    3668           0 :                 ret = sd_start_stop_device(sdkp, 0);
    3669           0 :                 if (ignore_stop_errors)
    3670           0 :                         ret = 0;
    3671             :         }
    3672             : 
    3673             :         return ret;
    3674             : }
    3675             : 
    3676           0 : static int sd_suspend_system(struct device *dev)
    3677             : {
    3678           0 :         return sd_suspend_common(dev, true);
    3679             : }
    3680             : 
    3681           0 : static int sd_suspend_runtime(struct device *dev)
    3682             : {
    3683           0 :         return sd_suspend_common(dev, false);
    3684             : }
    3685             : 
    3686           0 : static int sd_resume(struct device *dev)
    3687             : {
    3688           0 :         struct scsi_disk *sdkp = dev_get_drvdata(dev);
    3689           0 :         int ret;
    3690             : 
    3691           0 :         if (!sdkp)      /* E.g.: runtime resume at the start of sd_probe() */
    3692             :                 return 0;
    3693             : 
    3694           0 :         if (!sdkp->device->manage_start_stop)
    3695             :                 return 0;
    3696             : 
    3697           0 :         sd_printk(KERN_NOTICE, sdkp, "Starting disk\n");
    3698           0 :         ret = sd_start_stop_device(sdkp, 1);
    3699           0 :         if (!ret)
    3700           0 :                 opal_unlock_from_suspend(sdkp->opal_dev);
    3701             :         return ret;
    3702             : }
    3703             : 
    3704             : /**
    3705             :  *      init_sd - entry point for this driver (both when built in or when
    3706             :  *      a module).
    3707             :  *
    3708             :  *      Note: this function registers this driver with the scsi mid-level.
    3709             :  **/
    3710           1 : static int __init init_sd(void)
    3711             : {
    3712           1 :         int majors = 0, i, err;
    3713             : 
    3714           1 :         SCSI_LOG_HLQUEUE(3, printk("init_sd: sd driver entry point\n"));
    3715             : 
    3716          17 :         for (i = 0; i < SD_MAJORS; i++) {
    3717          16 :                 if (__register_blkdev(sd_major(i), "sd", sd_default_probe))
    3718           0 :                         continue;
    3719          16 :                 majors++;
    3720             :         }
    3721             : 
    3722           1 :         if (!majors)
    3723             :                 return -ENODEV;
    3724             : 
    3725           1 :         err = class_register(&sd_disk_class);
    3726           1 :         if (err)
    3727           0 :                 goto err_out;
    3728             : 
    3729           1 :         sd_cdb_cache = kmem_cache_create("sd_ext_cdb", SD_EXT_CDB_SIZE,
    3730             :                                          0, 0, NULL);
    3731           1 :         if (!sd_cdb_cache) {
    3732           0 :                 printk(KERN_ERR "sd: can't init extended cdb cache\n");
    3733           0 :                 err = -ENOMEM;
    3734           0 :                 goto err_out_class;
    3735             :         }
    3736             : 
    3737           1 :         sd_cdb_pool = mempool_create_slab_pool(SD_MEMPOOL_SIZE, sd_cdb_cache);
    3738           1 :         if (!sd_cdb_pool) {
    3739           0 :                 printk(KERN_ERR "sd: can't init extended cdb pool\n");
    3740           0 :                 err = -ENOMEM;
    3741           0 :                 goto err_out_cache;
    3742             :         }
    3743             : 
    3744           1 :         sd_page_pool = mempool_create_page_pool(SD_MEMPOOL_SIZE, 0);
    3745           1 :         if (!sd_page_pool) {
    3746           0 :                 printk(KERN_ERR "sd: can't init discard page pool\n");
    3747           0 :                 err = -ENOMEM;
    3748           0 :                 goto err_out_ppool;
    3749             :         }
    3750             : 
    3751           1 :         err = scsi_register_driver(&sd_template.gendrv);
    3752           1 :         if (err)
    3753           0 :                 goto err_out_driver;
    3754             : 
    3755             :         return 0;
    3756             : 
    3757           0 : err_out_driver:
    3758           0 :         mempool_destroy(sd_page_pool);
    3759             : 
    3760           0 : err_out_ppool:
    3761           0 :         mempool_destroy(sd_cdb_pool);
    3762             : 
    3763           0 : err_out_cache:
    3764           0 :         kmem_cache_destroy(sd_cdb_cache);
    3765             : 
    3766           0 : err_out_class:
    3767           0 :         class_unregister(&sd_disk_class);
    3768           0 : err_out:
    3769           0 :         for (i = 0; i < SD_MAJORS; i++)
    3770           0 :                 unregister_blkdev(sd_major(i), "sd");
    3771             :         return err;
    3772             : }
    3773             : 
    3774             : /**
    3775             :  *      exit_sd - exit point for this driver (when it is a module).
    3776             :  *
    3777             :  *      Note: this function unregisters this driver from the scsi mid-level.
    3778             :  **/
    3779           0 : static void __exit exit_sd(void)
    3780             : {
    3781           0 :         int i;
    3782             : 
    3783           0 :         SCSI_LOG_HLQUEUE(3, printk("exit_sd: exiting sd driver\n"));
    3784             : 
    3785           0 :         scsi_unregister_driver(&sd_template.gendrv);
    3786           0 :         mempool_destroy(sd_cdb_pool);
    3787           0 :         mempool_destroy(sd_page_pool);
    3788           0 :         kmem_cache_destroy(sd_cdb_cache);
    3789             : 
    3790           0 :         class_unregister(&sd_disk_class);
    3791             : 
    3792           0 :         for (i = 0; i < SD_MAJORS; i++)
    3793           0 :                 unregister_blkdev(sd_major(i), "sd");
    3794           0 : }
    3795             : 
    3796             : module_init(init_sd);
    3797             : module_exit(exit_sd);
    3798             : 
    3799           0 : void sd_print_sense_hdr(struct scsi_disk *sdkp, struct scsi_sense_hdr *sshdr)
    3800             : {
    3801           0 :         scsi_print_sense_hdr(sdkp->device,
    3802           0 :                              sdkp->disk ? sdkp->disk->disk_name : NULL, sshdr);
    3803           0 : }
    3804             : 
    3805           0 : void sd_print_result(const struct scsi_disk *sdkp, const char *msg, int result)
    3806             : {
    3807           0 :         const char *hb_string = scsi_hostbyte_string(result);
    3808           0 :         const char *db_string = scsi_driverbyte_string(result);
    3809             : 
    3810           0 :         if (hb_string || db_string)
    3811             :                 sd_printk(KERN_INFO, sdkp,
    3812             :                           "%s: Result: hostbyte=%s driverbyte=%s\n", msg,
    3813             :                           hb_string ? hb_string : "invalid",
    3814             :                           db_string ? db_string : "invalid");
    3815             :         else
    3816           0 :                 sd_printk(KERN_INFO, sdkp,
    3817             :                           "%s: Result: hostbyte=0x%02x driverbyte=0x%02x\n",
    3818             :                           msg, host_byte(result), driver_byte(result));
    3819           0 : }

Generated by: LCOV version 1.14