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