0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036 #include <linux/module.h>
0037 #include <linux/fs.h>
0038 #include <linux/kernel.h>
0039 #include <linux/mm.h>
0040 #include <linux/bio.h>
0041 #include <linux/hdreg.h>
0042 #include <linux/errno.h>
0043 #include <linux/idr.h>
0044 #include <linux/interrupt.h>
0045 #include <linux/init.h>
0046 #include <linux/blkdev.h>
0047 #include <linux/blkpg.h>
0048 #include <linux/blk-pm.h>
0049 #include <linux/delay.h>
0050 #include <linux/major.h>
0051 #include <linux/mutex.h>
0052 #include <linux/string_helpers.h>
0053 #include <linux/slab.h>
0054 #include <linux/sed-opal.h>
0055 #include <linux/pm_runtime.h>
0056 #include <linux/pr.h>
0057 #include <linux/t10-pi.h>
0058 #include <linux/uaccess.h>
0059 #include <asm/unaligned.h>
0060
0061 #include <scsi/scsi.h>
0062 #include <scsi/scsi_cmnd.h>
0063 #include <scsi/scsi_dbg.h>
0064 #include <scsi/scsi_device.h>
0065 #include <scsi/scsi_driver.h>
0066 #include <scsi/scsi_eh.h>
0067 #include <scsi/scsi_host.h>
0068 #include <scsi/scsi_ioctl.h>
0069 #include <scsi/scsicam.h>
0070
0071 #include "sd.h"
0072 #include "scsi_priv.h"
0073 #include "scsi_logging.h"
0074
0075 MODULE_AUTHOR("Eric Youngdale");
0076 MODULE_DESCRIPTION("SCSI disk (sd) driver");
0077 MODULE_LICENSE("GPL");
0078
0079 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK0_MAJOR);
0080 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK1_MAJOR);
0081 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK2_MAJOR);
0082 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK3_MAJOR);
0083 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK4_MAJOR);
0084 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK5_MAJOR);
0085 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK6_MAJOR);
0086 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK7_MAJOR);
0087 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK8_MAJOR);
0088 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK9_MAJOR);
0089 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK10_MAJOR);
0090 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK11_MAJOR);
0091 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK12_MAJOR);
0092 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK13_MAJOR);
0093 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK14_MAJOR);
0094 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK15_MAJOR);
0095 MODULE_ALIAS_SCSI_DEVICE(TYPE_DISK);
0096 MODULE_ALIAS_SCSI_DEVICE(TYPE_MOD);
0097 MODULE_ALIAS_SCSI_DEVICE(TYPE_RBC);
0098 MODULE_ALIAS_SCSI_DEVICE(TYPE_ZBC);
0099
0100 #define SD_MINORS 16
0101
0102 static void sd_config_discard(struct scsi_disk *, unsigned int);
0103 static void sd_config_write_same(struct scsi_disk *);
0104 static int sd_revalidate_disk(struct gendisk *);
0105 static void sd_unlock_native_capacity(struct gendisk *disk);
0106 static int sd_probe(struct device *);
0107 static int sd_remove(struct device *);
0108 static void sd_shutdown(struct device *);
0109 static int sd_suspend_system(struct device *);
0110 static int sd_suspend_runtime(struct device *);
0111 static int sd_resume_system(struct device *);
0112 static int sd_resume_runtime(struct device *);
0113 static void sd_rescan(struct device *);
0114 static blk_status_t sd_init_command(struct scsi_cmnd *SCpnt);
0115 static void sd_uninit_command(struct scsi_cmnd *SCpnt);
0116 static int sd_done(struct scsi_cmnd *);
0117 static void sd_eh_reset(struct scsi_cmnd *);
0118 static int sd_eh_action(struct scsi_cmnd *, int);
0119 static void sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer);
0120 static void scsi_disk_release(struct device *cdev);
0121
0122 static DEFINE_IDA(sd_index_ida);
0123
0124 static struct kmem_cache *sd_cdb_cache;
0125 static mempool_t *sd_page_pool;
0126 static struct lock_class_key sd_bio_compl_lkclass;
0127
0128 static const char *sd_cache_types[] = {
0129 "write through", "none", "write back",
0130 "write back, no read (daft)"
0131 };
0132
0133 static void sd_set_flush_flag(struct scsi_disk *sdkp)
0134 {
0135 bool wc = false, fua = false;
0136
0137 if (sdkp->WCE) {
0138 wc = true;
0139 if (sdkp->DPOFUA)
0140 fua = true;
0141 }
0142
0143 blk_queue_write_cache(sdkp->disk->queue, wc, fua);
0144 }
0145
0146 static ssize_t
0147 cache_type_store(struct device *dev, struct device_attribute *attr,
0148 const char *buf, size_t count)
0149 {
0150 int ct, rcd, wce, sp;
0151 struct scsi_disk *sdkp = to_scsi_disk(dev);
0152 struct scsi_device *sdp = sdkp->device;
0153 char buffer[64];
0154 char *buffer_data;
0155 struct scsi_mode_data data;
0156 struct scsi_sense_hdr sshdr;
0157 static const char temp[] = "temporary ";
0158 int len;
0159
0160 if (sdp->type != TYPE_DISK && sdp->type != TYPE_ZBC)
0161
0162
0163
0164 return -EINVAL;
0165
0166 if (strncmp(buf, temp, sizeof(temp) - 1) == 0) {
0167 buf += sizeof(temp) - 1;
0168 sdkp->cache_override = 1;
0169 } else {
0170 sdkp->cache_override = 0;
0171 }
0172
0173 ct = sysfs_match_string(sd_cache_types, buf);
0174 if (ct < 0)
0175 return -EINVAL;
0176
0177 rcd = ct & 0x01 ? 1 : 0;
0178 wce = (ct & 0x02) && !sdkp->write_prot ? 1 : 0;
0179
0180 if (sdkp->cache_override) {
0181 sdkp->WCE = wce;
0182 sdkp->RCD = rcd;
0183 sd_set_flush_flag(sdkp);
0184 return count;
0185 }
0186
0187 if (scsi_mode_sense(sdp, 0x08, 8, buffer, sizeof(buffer), SD_TIMEOUT,
0188 sdkp->max_retries, &data, NULL))
0189 return -EINVAL;
0190 len = min_t(size_t, sizeof(buffer), data.length - data.header_length -
0191 data.block_descriptor_length);
0192 buffer_data = buffer + data.header_length +
0193 data.block_descriptor_length;
0194 buffer_data[2] &= ~0x05;
0195 buffer_data[2] |= wce << 2 | rcd;
0196 sp = buffer_data[0] & 0x80 ? 1 : 0;
0197 buffer_data[0] &= ~0x80;
0198
0199
0200
0201
0202
0203 data.device_specific = 0;
0204
0205 if (scsi_mode_select(sdp, 1, sp, buffer_data, len, SD_TIMEOUT,
0206 sdkp->max_retries, &data, &sshdr)) {
0207 if (scsi_sense_valid(&sshdr))
0208 sd_print_sense_hdr(sdkp, &sshdr);
0209 return -EINVAL;
0210 }
0211 sd_revalidate_disk(sdkp->disk);
0212 return count;
0213 }
0214
0215 static ssize_t
0216 manage_start_stop_show(struct device *dev, struct device_attribute *attr,
0217 char *buf)
0218 {
0219 struct scsi_disk *sdkp = to_scsi_disk(dev);
0220 struct scsi_device *sdp = sdkp->device;
0221
0222 return sprintf(buf, "%u\n", sdp->manage_start_stop);
0223 }
0224
0225 static ssize_t
0226 manage_start_stop_store(struct device *dev, struct device_attribute *attr,
0227 const char *buf, size_t count)
0228 {
0229 struct scsi_disk *sdkp = to_scsi_disk(dev);
0230 struct scsi_device *sdp = sdkp->device;
0231 bool v;
0232
0233 if (!capable(CAP_SYS_ADMIN))
0234 return -EACCES;
0235
0236 if (kstrtobool(buf, &v))
0237 return -EINVAL;
0238
0239 sdp->manage_start_stop = v;
0240
0241 return count;
0242 }
0243 static DEVICE_ATTR_RW(manage_start_stop);
0244
0245 static ssize_t
0246 allow_restart_show(struct device *dev, struct device_attribute *attr, char *buf)
0247 {
0248 struct scsi_disk *sdkp = to_scsi_disk(dev);
0249
0250 return sprintf(buf, "%u\n", sdkp->device->allow_restart);
0251 }
0252
0253 static ssize_t
0254 allow_restart_store(struct device *dev, struct device_attribute *attr,
0255 const char *buf, size_t count)
0256 {
0257 bool v;
0258 struct scsi_disk *sdkp = to_scsi_disk(dev);
0259 struct scsi_device *sdp = sdkp->device;
0260
0261 if (!capable(CAP_SYS_ADMIN))
0262 return -EACCES;
0263
0264 if (sdp->type != TYPE_DISK && sdp->type != TYPE_ZBC)
0265 return -EINVAL;
0266
0267 if (kstrtobool(buf, &v))
0268 return -EINVAL;
0269
0270 sdp->allow_restart = v;
0271
0272 return count;
0273 }
0274 static DEVICE_ATTR_RW(allow_restart);
0275
0276 static ssize_t
0277 cache_type_show(struct device *dev, struct device_attribute *attr, char *buf)
0278 {
0279 struct scsi_disk *sdkp = to_scsi_disk(dev);
0280 int ct = sdkp->RCD + 2*sdkp->WCE;
0281
0282 return sprintf(buf, "%s\n", sd_cache_types[ct]);
0283 }
0284 static DEVICE_ATTR_RW(cache_type);
0285
0286 static ssize_t
0287 FUA_show(struct device *dev, struct device_attribute *attr, char *buf)
0288 {
0289 struct scsi_disk *sdkp = to_scsi_disk(dev);
0290
0291 return sprintf(buf, "%u\n", sdkp->DPOFUA);
0292 }
0293 static DEVICE_ATTR_RO(FUA);
0294
0295 static ssize_t
0296 protection_type_show(struct device *dev, struct device_attribute *attr,
0297 char *buf)
0298 {
0299 struct scsi_disk *sdkp = to_scsi_disk(dev);
0300
0301 return sprintf(buf, "%u\n", sdkp->protection_type);
0302 }
0303
0304 static ssize_t
0305 protection_type_store(struct device *dev, struct device_attribute *attr,
0306 const char *buf, size_t count)
0307 {
0308 struct scsi_disk *sdkp = to_scsi_disk(dev);
0309 unsigned int val;
0310 int err;
0311
0312 if (!capable(CAP_SYS_ADMIN))
0313 return -EACCES;
0314
0315 err = kstrtouint(buf, 10, &val);
0316
0317 if (err)
0318 return err;
0319
0320 if (val <= T10_PI_TYPE3_PROTECTION)
0321 sdkp->protection_type = val;
0322
0323 return count;
0324 }
0325 static DEVICE_ATTR_RW(protection_type);
0326
0327 static ssize_t
0328 protection_mode_show(struct device *dev, struct device_attribute *attr,
0329 char *buf)
0330 {
0331 struct scsi_disk *sdkp = to_scsi_disk(dev);
0332 struct scsi_device *sdp = sdkp->device;
0333 unsigned int dif, dix;
0334
0335 dif = scsi_host_dif_capable(sdp->host, sdkp->protection_type);
0336 dix = scsi_host_dix_capable(sdp->host, sdkp->protection_type);
0337
0338 if (!dix && scsi_host_dix_capable(sdp->host, T10_PI_TYPE0_PROTECTION)) {
0339 dif = 0;
0340 dix = 1;
0341 }
0342
0343 if (!dif && !dix)
0344 return sprintf(buf, "none\n");
0345
0346 return sprintf(buf, "%s%u\n", dix ? "dix" : "dif", dif);
0347 }
0348 static DEVICE_ATTR_RO(protection_mode);
0349
0350 static ssize_t
0351 app_tag_own_show(struct device *dev, struct device_attribute *attr, char *buf)
0352 {
0353 struct scsi_disk *sdkp = to_scsi_disk(dev);
0354
0355 return sprintf(buf, "%u\n", sdkp->ATO);
0356 }
0357 static DEVICE_ATTR_RO(app_tag_own);
0358
0359 static ssize_t
0360 thin_provisioning_show(struct device *dev, struct device_attribute *attr,
0361 char *buf)
0362 {
0363 struct scsi_disk *sdkp = to_scsi_disk(dev);
0364
0365 return sprintf(buf, "%u\n", sdkp->lbpme);
0366 }
0367 static DEVICE_ATTR_RO(thin_provisioning);
0368
0369
0370 static const char *lbp_mode[] = {
0371 [SD_LBP_FULL] = "full",
0372 [SD_LBP_UNMAP] = "unmap",
0373 [SD_LBP_WS16] = "writesame_16",
0374 [SD_LBP_WS10] = "writesame_10",
0375 [SD_LBP_ZERO] = "writesame_zero",
0376 [SD_LBP_DISABLE] = "disabled",
0377 };
0378
0379 static ssize_t
0380 provisioning_mode_show(struct device *dev, struct device_attribute *attr,
0381 char *buf)
0382 {
0383 struct scsi_disk *sdkp = to_scsi_disk(dev);
0384
0385 return sprintf(buf, "%s\n", lbp_mode[sdkp->provisioning_mode]);
0386 }
0387
0388 static ssize_t
0389 provisioning_mode_store(struct device *dev, struct device_attribute *attr,
0390 const char *buf, size_t count)
0391 {
0392 struct scsi_disk *sdkp = to_scsi_disk(dev);
0393 struct scsi_device *sdp = sdkp->device;
0394 int mode;
0395
0396 if (!capable(CAP_SYS_ADMIN))
0397 return -EACCES;
0398
0399 if (sd_is_zoned(sdkp)) {
0400 sd_config_discard(sdkp, SD_LBP_DISABLE);
0401 return count;
0402 }
0403
0404 if (sdp->type != TYPE_DISK)
0405 return -EINVAL;
0406
0407 mode = sysfs_match_string(lbp_mode, buf);
0408 if (mode < 0)
0409 return -EINVAL;
0410
0411 sd_config_discard(sdkp, mode);
0412
0413 return count;
0414 }
0415 static DEVICE_ATTR_RW(provisioning_mode);
0416
0417
0418 static const char *zeroing_mode[] = {
0419 [SD_ZERO_WRITE] = "write",
0420 [SD_ZERO_WS] = "writesame",
0421 [SD_ZERO_WS16_UNMAP] = "writesame_16_unmap",
0422 [SD_ZERO_WS10_UNMAP] = "writesame_10_unmap",
0423 };
0424
0425 static ssize_t
0426 zeroing_mode_show(struct device *dev, struct device_attribute *attr,
0427 char *buf)
0428 {
0429 struct scsi_disk *sdkp = to_scsi_disk(dev);
0430
0431 return sprintf(buf, "%s\n", zeroing_mode[sdkp->zeroing_mode]);
0432 }
0433
0434 static ssize_t
0435 zeroing_mode_store(struct device *dev, struct device_attribute *attr,
0436 const char *buf, size_t count)
0437 {
0438 struct scsi_disk *sdkp = to_scsi_disk(dev);
0439 int mode;
0440
0441 if (!capable(CAP_SYS_ADMIN))
0442 return -EACCES;
0443
0444 mode = sysfs_match_string(zeroing_mode, buf);
0445 if (mode < 0)
0446 return -EINVAL;
0447
0448 sdkp->zeroing_mode = mode;
0449
0450 return count;
0451 }
0452 static DEVICE_ATTR_RW(zeroing_mode);
0453
0454 static ssize_t
0455 max_medium_access_timeouts_show(struct device *dev,
0456 struct device_attribute *attr, char *buf)
0457 {
0458 struct scsi_disk *sdkp = to_scsi_disk(dev);
0459
0460 return sprintf(buf, "%u\n", sdkp->max_medium_access_timeouts);
0461 }
0462
0463 static ssize_t
0464 max_medium_access_timeouts_store(struct device *dev,
0465 struct device_attribute *attr, const char *buf,
0466 size_t count)
0467 {
0468 struct scsi_disk *sdkp = to_scsi_disk(dev);
0469 int err;
0470
0471 if (!capable(CAP_SYS_ADMIN))
0472 return -EACCES;
0473
0474 err = kstrtouint(buf, 10, &sdkp->max_medium_access_timeouts);
0475
0476 return err ? err : count;
0477 }
0478 static DEVICE_ATTR_RW(max_medium_access_timeouts);
0479
0480 static ssize_t
0481 max_write_same_blocks_show(struct device *dev, struct device_attribute *attr,
0482 char *buf)
0483 {
0484 struct scsi_disk *sdkp = to_scsi_disk(dev);
0485
0486 return sprintf(buf, "%u\n", sdkp->max_ws_blocks);
0487 }
0488
0489 static ssize_t
0490 max_write_same_blocks_store(struct device *dev, struct device_attribute *attr,
0491 const char *buf, size_t count)
0492 {
0493 struct scsi_disk *sdkp = to_scsi_disk(dev);
0494 struct scsi_device *sdp = sdkp->device;
0495 unsigned long max;
0496 int err;
0497
0498 if (!capable(CAP_SYS_ADMIN))
0499 return -EACCES;
0500
0501 if (sdp->type != TYPE_DISK && sdp->type != TYPE_ZBC)
0502 return -EINVAL;
0503
0504 err = kstrtoul(buf, 10, &max);
0505
0506 if (err)
0507 return err;
0508
0509 if (max == 0)
0510 sdp->no_write_same = 1;
0511 else if (max <= SD_MAX_WS16_BLOCKS) {
0512 sdp->no_write_same = 0;
0513 sdkp->max_ws_blocks = max;
0514 }
0515
0516 sd_config_write_same(sdkp);
0517
0518 return count;
0519 }
0520 static DEVICE_ATTR_RW(max_write_same_blocks);
0521
0522 static ssize_t
0523 zoned_cap_show(struct device *dev, struct device_attribute *attr, char *buf)
0524 {
0525 struct scsi_disk *sdkp = to_scsi_disk(dev);
0526
0527 if (sdkp->device->type == TYPE_ZBC)
0528 return sprintf(buf, "host-managed\n");
0529 if (sdkp->zoned == 1)
0530 return sprintf(buf, "host-aware\n");
0531 if (sdkp->zoned == 2)
0532 return sprintf(buf, "drive-managed\n");
0533 return sprintf(buf, "none\n");
0534 }
0535 static DEVICE_ATTR_RO(zoned_cap);
0536
0537 static ssize_t
0538 max_retries_store(struct device *dev, struct device_attribute *attr,
0539 const char *buf, size_t count)
0540 {
0541 struct scsi_disk *sdkp = to_scsi_disk(dev);
0542 struct scsi_device *sdev = sdkp->device;
0543 int retries, err;
0544
0545 err = kstrtoint(buf, 10, &retries);
0546 if (err)
0547 return err;
0548
0549 if (retries == SCSI_CMD_RETRIES_NO_LIMIT || retries <= SD_MAX_RETRIES) {
0550 sdkp->max_retries = retries;
0551 return count;
0552 }
0553
0554 sdev_printk(KERN_ERR, sdev, "max_retries must be between -1 and %d\n",
0555 SD_MAX_RETRIES);
0556 return -EINVAL;
0557 }
0558
0559 static ssize_t
0560 max_retries_show(struct device *dev, struct device_attribute *attr,
0561 char *buf)
0562 {
0563 struct scsi_disk *sdkp = to_scsi_disk(dev);
0564
0565 return sprintf(buf, "%d\n", sdkp->max_retries);
0566 }
0567
0568 static DEVICE_ATTR_RW(max_retries);
0569
0570 static struct attribute *sd_disk_attrs[] = {
0571 &dev_attr_cache_type.attr,
0572 &dev_attr_FUA.attr,
0573 &dev_attr_allow_restart.attr,
0574 &dev_attr_manage_start_stop.attr,
0575 &dev_attr_protection_type.attr,
0576 &dev_attr_protection_mode.attr,
0577 &dev_attr_app_tag_own.attr,
0578 &dev_attr_thin_provisioning.attr,
0579 &dev_attr_provisioning_mode.attr,
0580 &dev_attr_zeroing_mode.attr,
0581 &dev_attr_max_write_same_blocks.attr,
0582 &dev_attr_max_medium_access_timeouts.attr,
0583 &dev_attr_zoned_cap.attr,
0584 &dev_attr_max_retries.attr,
0585 NULL,
0586 };
0587 ATTRIBUTE_GROUPS(sd_disk);
0588
0589 static struct class sd_disk_class = {
0590 .name = "scsi_disk",
0591 .owner = THIS_MODULE,
0592 .dev_release = scsi_disk_release,
0593 .dev_groups = sd_disk_groups,
0594 };
0595
0596 static const struct dev_pm_ops sd_pm_ops = {
0597 .suspend = sd_suspend_system,
0598 .resume = sd_resume_system,
0599 .poweroff = sd_suspend_system,
0600 .restore = sd_resume_system,
0601 .runtime_suspend = sd_suspend_runtime,
0602 .runtime_resume = sd_resume_runtime,
0603 };
0604
0605 static struct scsi_driver sd_template = {
0606 .gendrv = {
0607 .name = "sd",
0608 .owner = THIS_MODULE,
0609 .probe = sd_probe,
0610 .probe_type = PROBE_PREFER_ASYNCHRONOUS,
0611 .remove = sd_remove,
0612 .shutdown = sd_shutdown,
0613 .pm = &sd_pm_ops,
0614 },
0615 .rescan = sd_rescan,
0616 .init_command = sd_init_command,
0617 .uninit_command = sd_uninit_command,
0618 .done = sd_done,
0619 .eh_action = sd_eh_action,
0620 .eh_reset = sd_eh_reset,
0621 };
0622
0623
0624
0625
0626
0627 static void sd_default_probe(dev_t devt)
0628 {
0629 }
0630
0631
0632
0633
0634
0635
0636
0637
0638
0639
0640
0641
0642
0643
0644
0645 static int sd_major(int major_idx)
0646 {
0647 switch (major_idx) {
0648 case 0:
0649 return SCSI_DISK0_MAJOR;
0650 case 1 ... 7:
0651 return SCSI_DISK1_MAJOR + major_idx - 1;
0652 case 8 ... 15:
0653 return SCSI_DISK8_MAJOR + major_idx - 8;
0654 default:
0655 BUG();
0656 return 0;
0657 }
0658 }
0659
0660 #ifdef CONFIG_BLK_SED_OPAL
0661 static int sd_sec_submit(void *data, u16 spsp, u8 secp, void *buffer,
0662 size_t len, bool send)
0663 {
0664 struct scsi_disk *sdkp = data;
0665 struct scsi_device *sdev = sdkp->device;
0666 u8 cdb[12] = { 0, };
0667 int ret;
0668
0669 cdb[0] = send ? SECURITY_PROTOCOL_OUT : SECURITY_PROTOCOL_IN;
0670 cdb[1] = secp;
0671 put_unaligned_be16(spsp, &cdb[2]);
0672 put_unaligned_be32(len, &cdb[6]);
0673
0674 ret = scsi_execute(sdev, cdb, send ? DMA_TO_DEVICE : DMA_FROM_DEVICE,
0675 buffer, len, NULL, NULL, SD_TIMEOUT, sdkp->max_retries, 0,
0676 RQF_PM, NULL);
0677 return ret <= 0 ? ret : -EIO;
0678 }
0679 #endif
0680
0681
0682
0683
0684
0685 static unsigned int sd_prot_op(bool write, bool dix, bool dif)
0686 {
0687
0688 static const unsigned int ops[] = {
0689 SCSI_PROT_NORMAL,
0690 SCSI_PROT_READ_STRIP,
0691 SCSI_PROT_READ_INSERT,
0692 SCSI_PROT_READ_PASS,
0693 SCSI_PROT_NORMAL,
0694 SCSI_PROT_WRITE_INSERT,
0695 SCSI_PROT_WRITE_STRIP,
0696 SCSI_PROT_WRITE_PASS,
0697 };
0698
0699 return ops[write << 2 | dix << 1 | dif];
0700 }
0701
0702
0703
0704
0705
0706 static unsigned int sd_prot_flag_mask(unsigned int prot_op)
0707 {
0708 static const unsigned int flag_mask[] = {
0709 [SCSI_PROT_NORMAL] = 0,
0710
0711 [SCSI_PROT_READ_STRIP] = SCSI_PROT_TRANSFER_PI |
0712 SCSI_PROT_GUARD_CHECK |
0713 SCSI_PROT_REF_CHECK |
0714 SCSI_PROT_REF_INCREMENT,
0715
0716 [SCSI_PROT_READ_INSERT] = SCSI_PROT_REF_INCREMENT |
0717 SCSI_PROT_IP_CHECKSUM,
0718
0719 [SCSI_PROT_READ_PASS] = SCSI_PROT_TRANSFER_PI |
0720 SCSI_PROT_GUARD_CHECK |
0721 SCSI_PROT_REF_CHECK |
0722 SCSI_PROT_REF_INCREMENT |
0723 SCSI_PROT_IP_CHECKSUM,
0724
0725 [SCSI_PROT_WRITE_INSERT] = SCSI_PROT_TRANSFER_PI |
0726 SCSI_PROT_REF_INCREMENT,
0727
0728 [SCSI_PROT_WRITE_STRIP] = SCSI_PROT_GUARD_CHECK |
0729 SCSI_PROT_REF_CHECK |
0730 SCSI_PROT_REF_INCREMENT |
0731 SCSI_PROT_IP_CHECKSUM,
0732
0733 [SCSI_PROT_WRITE_PASS] = SCSI_PROT_TRANSFER_PI |
0734 SCSI_PROT_GUARD_CHECK |
0735 SCSI_PROT_REF_CHECK |
0736 SCSI_PROT_REF_INCREMENT |
0737 SCSI_PROT_IP_CHECKSUM,
0738 };
0739
0740 return flag_mask[prot_op];
0741 }
0742
0743 static unsigned char sd_setup_protect_cmnd(struct scsi_cmnd *scmd,
0744 unsigned int dix, unsigned int dif)
0745 {
0746 struct request *rq = scsi_cmd_to_rq(scmd);
0747 struct bio *bio = rq->bio;
0748 unsigned int prot_op = sd_prot_op(rq_data_dir(rq), dix, dif);
0749 unsigned int protect = 0;
0750
0751 if (dix) {
0752 if (bio_integrity_flagged(bio, BIP_IP_CHECKSUM))
0753 scmd->prot_flags |= SCSI_PROT_IP_CHECKSUM;
0754
0755 if (bio_integrity_flagged(bio, BIP_CTRL_NOCHECK) == false)
0756 scmd->prot_flags |= SCSI_PROT_GUARD_CHECK;
0757 }
0758
0759 if (dif != T10_PI_TYPE3_PROTECTION) {
0760 scmd->prot_flags |= SCSI_PROT_REF_INCREMENT;
0761
0762 if (bio_integrity_flagged(bio, BIP_CTRL_NOCHECK) == false)
0763 scmd->prot_flags |= SCSI_PROT_REF_CHECK;
0764 }
0765
0766 if (dif) {
0767 scmd->prot_flags |= SCSI_PROT_TRANSFER_PI;
0768
0769 if (bio_integrity_flagged(bio, BIP_DISK_NOCHECK))
0770 protect = 3 << 5;
0771 else
0772 protect = 1 << 5;
0773 }
0774
0775 scsi_set_prot_op(scmd, prot_op);
0776 scsi_set_prot_type(scmd, dif);
0777 scmd->prot_flags &= sd_prot_flag_mask(prot_op);
0778
0779 return protect;
0780 }
0781
0782 static void sd_config_discard(struct scsi_disk *sdkp, unsigned int mode)
0783 {
0784 struct request_queue *q = sdkp->disk->queue;
0785 unsigned int logical_block_size = sdkp->device->sector_size;
0786 unsigned int max_blocks = 0;
0787
0788 q->limits.discard_alignment =
0789 sdkp->unmap_alignment * logical_block_size;
0790 q->limits.discard_granularity =
0791 max(sdkp->physical_block_size,
0792 sdkp->unmap_granularity * logical_block_size);
0793 sdkp->provisioning_mode = mode;
0794
0795 switch (mode) {
0796
0797 case SD_LBP_FULL:
0798 case SD_LBP_DISABLE:
0799 blk_queue_max_discard_sectors(q, 0);
0800 return;
0801
0802 case SD_LBP_UNMAP:
0803 max_blocks = min_not_zero(sdkp->max_unmap_blocks,
0804 (u32)SD_MAX_WS16_BLOCKS);
0805 break;
0806
0807 case SD_LBP_WS16:
0808 if (sdkp->device->unmap_limit_for_ws)
0809 max_blocks = sdkp->max_unmap_blocks;
0810 else
0811 max_blocks = sdkp->max_ws_blocks;
0812
0813 max_blocks = min_not_zero(max_blocks, (u32)SD_MAX_WS16_BLOCKS);
0814 break;
0815
0816 case SD_LBP_WS10:
0817 if (sdkp->device->unmap_limit_for_ws)
0818 max_blocks = sdkp->max_unmap_blocks;
0819 else
0820 max_blocks = sdkp->max_ws_blocks;
0821
0822 max_blocks = min_not_zero(max_blocks, (u32)SD_MAX_WS10_BLOCKS);
0823 break;
0824
0825 case SD_LBP_ZERO:
0826 max_blocks = min_not_zero(sdkp->max_ws_blocks,
0827 (u32)SD_MAX_WS10_BLOCKS);
0828 break;
0829 }
0830
0831 blk_queue_max_discard_sectors(q, max_blocks * (logical_block_size >> 9));
0832 }
0833
0834 static blk_status_t sd_setup_unmap_cmnd(struct scsi_cmnd *cmd)
0835 {
0836 struct scsi_device *sdp = cmd->device;
0837 struct request *rq = scsi_cmd_to_rq(cmd);
0838 struct scsi_disk *sdkp = scsi_disk(rq->q->disk);
0839 u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));
0840 u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
0841 unsigned int data_len = 24;
0842 char *buf;
0843
0844 rq->special_vec.bv_page = mempool_alloc(sd_page_pool, GFP_ATOMIC);
0845 if (!rq->special_vec.bv_page)
0846 return BLK_STS_RESOURCE;
0847 clear_highpage(rq->special_vec.bv_page);
0848 rq->special_vec.bv_offset = 0;
0849 rq->special_vec.bv_len = data_len;
0850 rq->rq_flags |= RQF_SPECIAL_PAYLOAD;
0851
0852 cmd->cmd_len = 10;
0853 cmd->cmnd[0] = UNMAP;
0854 cmd->cmnd[8] = 24;
0855
0856 buf = bvec_virt(&rq->special_vec);
0857 put_unaligned_be16(6 + 16, &buf[0]);
0858 put_unaligned_be16(16, &buf[2]);
0859 put_unaligned_be64(lba, &buf[8]);
0860 put_unaligned_be32(nr_blocks, &buf[16]);
0861
0862 cmd->allowed = sdkp->max_retries;
0863 cmd->transfersize = data_len;
0864 rq->timeout = SD_TIMEOUT;
0865
0866 return scsi_alloc_sgtables(cmd);
0867 }
0868
0869 static blk_status_t sd_setup_write_same16_cmnd(struct scsi_cmnd *cmd,
0870 bool unmap)
0871 {
0872 struct scsi_device *sdp = cmd->device;
0873 struct request *rq = scsi_cmd_to_rq(cmd);
0874 struct scsi_disk *sdkp = scsi_disk(rq->q->disk);
0875 u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));
0876 u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
0877 u32 data_len = sdp->sector_size;
0878
0879 rq->special_vec.bv_page = mempool_alloc(sd_page_pool, GFP_ATOMIC);
0880 if (!rq->special_vec.bv_page)
0881 return BLK_STS_RESOURCE;
0882 clear_highpage(rq->special_vec.bv_page);
0883 rq->special_vec.bv_offset = 0;
0884 rq->special_vec.bv_len = data_len;
0885 rq->rq_flags |= RQF_SPECIAL_PAYLOAD;
0886
0887 cmd->cmd_len = 16;
0888 cmd->cmnd[0] = WRITE_SAME_16;
0889 if (unmap)
0890 cmd->cmnd[1] = 0x8;
0891 put_unaligned_be64(lba, &cmd->cmnd[2]);
0892 put_unaligned_be32(nr_blocks, &cmd->cmnd[10]);
0893
0894 cmd->allowed = sdkp->max_retries;
0895 cmd->transfersize = data_len;
0896 rq->timeout = unmap ? SD_TIMEOUT : SD_WRITE_SAME_TIMEOUT;
0897
0898 return scsi_alloc_sgtables(cmd);
0899 }
0900
0901 static blk_status_t sd_setup_write_same10_cmnd(struct scsi_cmnd *cmd,
0902 bool unmap)
0903 {
0904 struct scsi_device *sdp = cmd->device;
0905 struct request *rq = scsi_cmd_to_rq(cmd);
0906 struct scsi_disk *sdkp = scsi_disk(rq->q->disk);
0907 u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));
0908 u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
0909 u32 data_len = sdp->sector_size;
0910
0911 rq->special_vec.bv_page = mempool_alloc(sd_page_pool, GFP_ATOMIC);
0912 if (!rq->special_vec.bv_page)
0913 return BLK_STS_RESOURCE;
0914 clear_highpage(rq->special_vec.bv_page);
0915 rq->special_vec.bv_offset = 0;
0916 rq->special_vec.bv_len = data_len;
0917 rq->rq_flags |= RQF_SPECIAL_PAYLOAD;
0918
0919 cmd->cmd_len = 10;
0920 cmd->cmnd[0] = WRITE_SAME;
0921 if (unmap)
0922 cmd->cmnd[1] = 0x8;
0923 put_unaligned_be32(lba, &cmd->cmnd[2]);
0924 put_unaligned_be16(nr_blocks, &cmd->cmnd[7]);
0925
0926 cmd->allowed = sdkp->max_retries;
0927 cmd->transfersize = data_len;
0928 rq->timeout = unmap ? SD_TIMEOUT : SD_WRITE_SAME_TIMEOUT;
0929
0930 return scsi_alloc_sgtables(cmd);
0931 }
0932
0933 static blk_status_t sd_setup_write_zeroes_cmnd(struct scsi_cmnd *cmd)
0934 {
0935 struct request *rq = scsi_cmd_to_rq(cmd);
0936 struct scsi_device *sdp = cmd->device;
0937 struct scsi_disk *sdkp = scsi_disk(rq->q->disk);
0938 u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));
0939 u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
0940
0941 if (!(rq->cmd_flags & REQ_NOUNMAP)) {
0942 switch (sdkp->zeroing_mode) {
0943 case SD_ZERO_WS16_UNMAP:
0944 return sd_setup_write_same16_cmnd(cmd, true);
0945 case SD_ZERO_WS10_UNMAP:
0946 return sd_setup_write_same10_cmnd(cmd, true);
0947 }
0948 }
0949
0950 if (sdp->no_write_same) {
0951 rq->rq_flags |= RQF_QUIET;
0952 return BLK_STS_TARGET;
0953 }
0954
0955 if (sdkp->ws16 || lba > 0xffffffff || nr_blocks > 0xffff)
0956 return sd_setup_write_same16_cmnd(cmd, false);
0957
0958 return sd_setup_write_same10_cmnd(cmd, false);
0959 }
0960
0961 static void sd_config_write_same(struct scsi_disk *sdkp)
0962 {
0963 struct request_queue *q = sdkp->disk->queue;
0964 unsigned int logical_block_size = sdkp->device->sector_size;
0965
0966 if (sdkp->device->no_write_same) {
0967 sdkp->max_ws_blocks = 0;
0968 goto out;
0969 }
0970
0971
0972
0973
0974
0975
0976 if (sdkp->max_ws_blocks > SD_MAX_WS10_BLOCKS)
0977 sdkp->max_ws_blocks = min_not_zero(sdkp->max_ws_blocks,
0978 (u32)SD_MAX_WS16_BLOCKS);
0979 else if (sdkp->ws16 || sdkp->ws10 || sdkp->device->no_report_opcodes)
0980 sdkp->max_ws_blocks = min_not_zero(sdkp->max_ws_blocks,
0981 (u32)SD_MAX_WS10_BLOCKS);
0982 else {
0983 sdkp->device->no_write_same = 1;
0984 sdkp->max_ws_blocks = 0;
0985 }
0986
0987 if (sdkp->lbprz && sdkp->lbpws)
0988 sdkp->zeroing_mode = SD_ZERO_WS16_UNMAP;
0989 else if (sdkp->lbprz && sdkp->lbpws10)
0990 sdkp->zeroing_mode = SD_ZERO_WS10_UNMAP;
0991 else if (sdkp->max_ws_blocks)
0992 sdkp->zeroing_mode = SD_ZERO_WS;
0993 else
0994 sdkp->zeroing_mode = SD_ZERO_WRITE;
0995
0996 if (sdkp->max_ws_blocks &&
0997 sdkp->physical_block_size > logical_block_size) {
0998
0999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010 sdkp->max_ws_blocks =
1011 round_down(sdkp->max_ws_blocks,
1012 bytes_to_logical(sdkp->device,
1013 sdkp->physical_block_size));
1014 }
1015
1016 out:
1017 blk_queue_max_write_zeroes_sectors(q, sdkp->max_ws_blocks *
1018 (logical_block_size >> 9));
1019 }
1020
1021 static blk_status_t sd_setup_flush_cmnd(struct scsi_cmnd *cmd)
1022 {
1023 struct request *rq = scsi_cmd_to_rq(cmd);
1024 struct scsi_disk *sdkp = scsi_disk(rq->q->disk);
1025
1026
1027 memset(&cmd->sdb, 0, sizeof(cmd->sdb));
1028
1029 cmd->cmnd[0] = SYNCHRONIZE_CACHE;
1030 cmd->cmd_len = 10;
1031 cmd->transfersize = 0;
1032 cmd->allowed = sdkp->max_retries;
1033
1034 rq->timeout = rq->q->rq_timeout * SD_FLUSH_TIMEOUT_MULTIPLIER;
1035 return BLK_STS_OK;
1036 }
1037
1038 static blk_status_t sd_setup_rw32_cmnd(struct scsi_cmnd *cmd, bool write,
1039 sector_t lba, unsigned int nr_blocks,
1040 unsigned char flags)
1041 {
1042 cmd->cmd_len = SD_EXT_CDB_SIZE;
1043 cmd->cmnd[0] = VARIABLE_LENGTH_CMD;
1044 cmd->cmnd[7] = 0x18;
1045 cmd->cmnd[9] = write ? WRITE_32 : READ_32;
1046 cmd->cmnd[10] = flags;
1047 put_unaligned_be64(lba, &cmd->cmnd[12]);
1048 put_unaligned_be32(lba, &cmd->cmnd[20]);
1049 put_unaligned_be32(nr_blocks, &cmd->cmnd[28]);
1050
1051 return BLK_STS_OK;
1052 }
1053
1054 static blk_status_t sd_setup_rw16_cmnd(struct scsi_cmnd *cmd, bool write,
1055 sector_t lba, unsigned int nr_blocks,
1056 unsigned char flags)
1057 {
1058 cmd->cmd_len = 16;
1059 cmd->cmnd[0] = write ? WRITE_16 : READ_16;
1060 cmd->cmnd[1] = flags;
1061 cmd->cmnd[14] = 0;
1062 cmd->cmnd[15] = 0;
1063 put_unaligned_be64(lba, &cmd->cmnd[2]);
1064 put_unaligned_be32(nr_blocks, &cmd->cmnd[10]);
1065
1066 return BLK_STS_OK;
1067 }
1068
1069 static blk_status_t sd_setup_rw10_cmnd(struct scsi_cmnd *cmd, bool write,
1070 sector_t lba, unsigned int nr_blocks,
1071 unsigned char flags)
1072 {
1073 cmd->cmd_len = 10;
1074 cmd->cmnd[0] = write ? WRITE_10 : READ_10;
1075 cmd->cmnd[1] = flags;
1076 cmd->cmnd[6] = 0;
1077 cmd->cmnd[9] = 0;
1078 put_unaligned_be32(lba, &cmd->cmnd[2]);
1079 put_unaligned_be16(nr_blocks, &cmd->cmnd[7]);
1080
1081 return BLK_STS_OK;
1082 }
1083
1084 static blk_status_t sd_setup_rw6_cmnd(struct scsi_cmnd *cmd, bool write,
1085 sector_t lba, unsigned int nr_blocks,
1086 unsigned char flags)
1087 {
1088
1089 if (WARN_ON_ONCE(nr_blocks == 0))
1090 return BLK_STS_IOERR;
1091
1092 if (unlikely(flags & 0x8)) {
1093
1094
1095
1096
1097
1098 scmd_printk(KERN_ERR, cmd, "FUA write on READ/WRITE(6) drive\n");
1099 return BLK_STS_IOERR;
1100 }
1101
1102 cmd->cmd_len = 6;
1103 cmd->cmnd[0] = write ? WRITE_6 : READ_6;
1104 cmd->cmnd[1] = (lba >> 16) & 0x1f;
1105 cmd->cmnd[2] = (lba >> 8) & 0xff;
1106 cmd->cmnd[3] = lba & 0xff;
1107 cmd->cmnd[4] = nr_blocks;
1108 cmd->cmnd[5] = 0;
1109
1110 return BLK_STS_OK;
1111 }
1112
1113 static blk_status_t sd_setup_read_write_cmnd(struct scsi_cmnd *cmd)
1114 {
1115 struct request *rq = scsi_cmd_to_rq(cmd);
1116 struct scsi_device *sdp = cmd->device;
1117 struct scsi_disk *sdkp = scsi_disk(rq->q->disk);
1118 sector_t lba = sectors_to_logical(sdp, blk_rq_pos(rq));
1119 sector_t threshold;
1120 unsigned int nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
1121 unsigned int mask = logical_to_sectors(sdp, 1) - 1;
1122 bool write = rq_data_dir(rq) == WRITE;
1123 unsigned char protect, fua;
1124 blk_status_t ret;
1125 unsigned int dif;
1126 bool dix;
1127
1128 ret = scsi_alloc_sgtables(cmd);
1129 if (ret != BLK_STS_OK)
1130 return ret;
1131
1132 ret = BLK_STS_IOERR;
1133 if (!scsi_device_online(sdp) || sdp->changed) {
1134 scmd_printk(KERN_ERR, cmd, "device offline or changed\n");
1135 goto fail;
1136 }
1137
1138 if (blk_rq_pos(rq) + blk_rq_sectors(rq) > get_capacity(rq->q->disk)) {
1139 scmd_printk(KERN_ERR, cmd, "access beyond end of device\n");
1140 goto fail;
1141 }
1142
1143 if ((blk_rq_pos(rq) & mask) || (blk_rq_sectors(rq) & mask)) {
1144 scmd_printk(KERN_ERR, cmd, "request not aligned to the logical block size\n");
1145 goto fail;
1146 }
1147
1148
1149
1150
1151
1152 threshold = sdkp->capacity - SD_LAST_BUGGY_SECTORS;
1153
1154 if (unlikely(sdp->last_sector_bug && lba + nr_blocks > threshold)) {
1155 if (lba < threshold) {
1156
1157 nr_blocks = threshold - lba;
1158 } else {
1159
1160 nr_blocks = 1;
1161 }
1162 }
1163
1164 if (req_op(rq) == REQ_OP_ZONE_APPEND) {
1165 ret = sd_zbc_prepare_zone_append(cmd, &lba, nr_blocks);
1166 if (ret)
1167 goto fail;
1168 }
1169
1170 fua = rq->cmd_flags & REQ_FUA ? 0x8 : 0;
1171 dix = scsi_prot_sg_count(cmd);
1172 dif = scsi_host_dif_capable(cmd->device->host, sdkp->protection_type);
1173
1174 if (dif || dix)
1175 protect = sd_setup_protect_cmnd(cmd, dix, dif);
1176 else
1177 protect = 0;
1178
1179 if (protect && sdkp->protection_type == T10_PI_TYPE2_PROTECTION) {
1180 ret = sd_setup_rw32_cmnd(cmd, write, lba, nr_blocks,
1181 protect | fua);
1182 } else if (sdp->use_16_for_rw || (nr_blocks > 0xffff)) {
1183 ret = sd_setup_rw16_cmnd(cmd, write, lba, nr_blocks,
1184 protect | fua);
1185 } else if ((nr_blocks > 0xff) || (lba > 0x1fffff) ||
1186 sdp->use_10_for_rw || protect) {
1187 ret = sd_setup_rw10_cmnd(cmd, write, lba, nr_blocks,
1188 protect | fua);
1189 } else {
1190 ret = sd_setup_rw6_cmnd(cmd, write, lba, nr_blocks,
1191 protect | fua);
1192 }
1193
1194 if (unlikely(ret != BLK_STS_OK))
1195 goto fail;
1196
1197
1198
1199
1200
1201
1202 cmd->transfersize = sdp->sector_size;
1203 cmd->underflow = nr_blocks << 9;
1204 cmd->allowed = sdkp->max_retries;
1205 cmd->sdb.length = nr_blocks * sdp->sector_size;
1206
1207 SCSI_LOG_HLQUEUE(1,
1208 scmd_printk(KERN_INFO, cmd,
1209 "%s: block=%llu, count=%d\n", __func__,
1210 (unsigned long long)blk_rq_pos(rq),
1211 blk_rq_sectors(rq)));
1212 SCSI_LOG_HLQUEUE(2,
1213 scmd_printk(KERN_INFO, cmd,
1214 "%s %d/%u 512 byte blocks.\n",
1215 write ? "writing" : "reading", nr_blocks,
1216 blk_rq_sectors(rq)));
1217
1218
1219
1220
1221 return BLK_STS_OK;
1222 fail:
1223 scsi_free_sgtables(cmd);
1224 return ret;
1225 }
1226
1227 static blk_status_t sd_init_command(struct scsi_cmnd *cmd)
1228 {
1229 struct request *rq = scsi_cmd_to_rq(cmd);
1230
1231 switch (req_op(rq)) {
1232 case REQ_OP_DISCARD:
1233 switch (scsi_disk(rq->q->disk)->provisioning_mode) {
1234 case SD_LBP_UNMAP:
1235 return sd_setup_unmap_cmnd(cmd);
1236 case SD_LBP_WS16:
1237 return sd_setup_write_same16_cmnd(cmd, true);
1238 case SD_LBP_WS10:
1239 return sd_setup_write_same10_cmnd(cmd, true);
1240 case SD_LBP_ZERO:
1241 return sd_setup_write_same10_cmnd(cmd, false);
1242 default:
1243 return BLK_STS_TARGET;
1244 }
1245 case REQ_OP_WRITE_ZEROES:
1246 return sd_setup_write_zeroes_cmnd(cmd);
1247 case REQ_OP_FLUSH:
1248 return sd_setup_flush_cmnd(cmd);
1249 case REQ_OP_READ:
1250 case REQ_OP_WRITE:
1251 case REQ_OP_ZONE_APPEND:
1252 return sd_setup_read_write_cmnd(cmd);
1253 case REQ_OP_ZONE_RESET:
1254 return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_RESET_WRITE_POINTER,
1255 false);
1256 case REQ_OP_ZONE_RESET_ALL:
1257 return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_RESET_WRITE_POINTER,
1258 true);
1259 case REQ_OP_ZONE_OPEN:
1260 return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_OPEN_ZONE, false);
1261 case REQ_OP_ZONE_CLOSE:
1262 return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_CLOSE_ZONE, false);
1263 case REQ_OP_ZONE_FINISH:
1264 return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_FINISH_ZONE, false);
1265 default:
1266 WARN_ON_ONCE(1);
1267 return BLK_STS_NOTSUPP;
1268 }
1269 }
1270
1271 static void sd_uninit_command(struct scsi_cmnd *SCpnt)
1272 {
1273 struct request *rq = scsi_cmd_to_rq(SCpnt);
1274
1275 if (rq->rq_flags & RQF_SPECIAL_PAYLOAD)
1276 mempool_free(rq->special_vec.bv_page, sd_page_pool);
1277 }
1278
1279 static bool sd_need_revalidate(struct block_device *bdev,
1280 struct scsi_disk *sdkp)
1281 {
1282 if (sdkp->device->removable || sdkp->write_prot) {
1283 if (bdev_check_media_change(bdev))
1284 return true;
1285 }
1286
1287
1288
1289
1290
1291
1292 return test_bit(GD_NEED_PART_SCAN, &bdev->bd_disk->state);
1293 }
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310 static int sd_open(struct block_device *bdev, fmode_t mode)
1311 {
1312 struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);
1313 struct scsi_device *sdev = sdkp->device;
1314 int retval;
1315
1316 if (scsi_device_get(sdev))
1317 return -ENXIO;
1318
1319 SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_open\n"));
1320
1321
1322
1323
1324
1325 retval = -ENXIO;
1326 if (!scsi_block_when_processing_errors(sdev))
1327 goto error_out;
1328
1329 if (sd_need_revalidate(bdev, sdkp))
1330 sd_revalidate_disk(bdev->bd_disk);
1331
1332
1333
1334
1335 retval = -ENOMEDIUM;
1336 if (sdev->removable && !sdkp->media_present && !(mode & FMODE_NDELAY))
1337 goto error_out;
1338
1339
1340
1341
1342
1343 retval = -EROFS;
1344 if (sdkp->write_prot && (mode & FMODE_WRITE))
1345 goto error_out;
1346
1347
1348
1349
1350
1351
1352
1353 retval = -ENXIO;
1354 if (!scsi_device_online(sdev))
1355 goto error_out;
1356
1357 if ((atomic_inc_return(&sdkp->openers) == 1) && sdev->removable) {
1358 if (scsi_block_when_processing_errors(sdev))
1359 scsi_set_medium_removal(sdev, SCSI_REMOVAL_PREVENT);
1360 }
1361
1362 return 0;
1363
1364 error_out:
1365 scsi_device_put(sdev);
1366 return retval;
1367 }
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382 static void sd_release(struct gendisk *disk, fmode_t mode)
1383 {
1384 struct scsi_disk *sdkp = scsi_disk(disk);
1385 struct scsi_device *sdev = sdkp->device;
1386
1387 SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_release\n"));
1388
1389 if (atomic_dec_return(&sdkp->openers) == 0 && sdev->removable) {
1390 if (scsi_block_when_processing_errors(sdev))
1391 scsi_set_medium_removal(sdev, SCSI_REMOVAL_ALLOW);
1392 }
1393
1394 scsi_device_put(sdev);
1395 }
1396
1397 static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
1398 {
1399 struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);
1400 struct scsi_device *sdp = sdkp->device;
1401 struct Scsi_Host *host = sdp->host;
1402 sector_t capacity = logical_to_sectors(sdp, sdkp->capacity);
1403 int diskinfo[4];
1404
1405
1406 diskinfo[0] = 0x40;
1407 diskinfo[1] = 0x20;
1408 diskinfo[2] = capacity >> 11;
1409
1410
1411 if (host->hostt->bios_param)
1412 host->hostt->bios_param(sdp, bdev, capacity, diskinfo);
1413 else
1414 scsicam_bios_param(bdev, capacity, diskinfo);
1415
1416 geo->heads = diskinfo[0];
1417 geo->sectors = diskinfo[1];
1418 geo->cylinders = diskinfo[2];
1419 return 0;
1420 }
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436 static int sd_ioctl(struct block_device *bdev, fmode_t mode,
1437 unsigned int cmd, unsigned long arg)
1438 {
1439 struct gendisk *disk = bdev->bd_disk;
1440 struct scsi_disk *sdkp = scsi_disk(disk);
1441 struct scsi_device *sdp = sdkp->device;
1442 void __user *p = (void __user *)arg;
1443 int error;
1444
1445 SCSI_LOG_IOCTL(1, sd_printk(KERN_INFO, sdkp, "sd_ioctl: disk=%s, "
1446 "cmd=0x%x\n", disk->disk_name, cmd));
1447
1448 if (bdev_is_partition(bdev) && !capable(CAP_SYS_RAWIO))
1449 return -ENOIOCTLCMD;
1450
1451
1452
1453
1454
1455
1456
1457 error = scsi_ioctl_block_when_processing_errors(sdp, cmd,
1458 (mode & FMODE_NDELAY) != 0);
1459 if (error)
1460 return error;
1461
1462 if (is_sed_ioctl(cmd))
1463 return sed_ioctl(sdkp->opal_dev, cmd, p);
1464 return scsi_ioctl(sdp, mode, cmd, p);
1465 }
1466
1467 static void set_media_not_present(struct scsi_disk *sdkp)
1468 {
1469 if (sdkp->media_present)
1470 sdkp->device->changed = 1;
1471
1472 if (sdkp->device->removable) {
1473 sdkp->media_present = 0;
1474 sdkp->capacity = 0;
1475 }
1476 }
1477
1478 static int media_not_present(struct scsi_disk *sdkp,
1479 struct scsi_sense_hdr *sshdr)
1480 {
1481 if (!scsi_sense_valid(sshdr))
1482 return 0;
1483
1484
1485 switch (sshdr->sense_key) {
1486 case UNIT_ATTENTION:
1487 case NOT_READY:
1488
1489 if (sshdr->asc == 0x3A) {
1490 set_media_not_present(sdkp);
1491 return 1;
1492 }
1493 }
1494 return 0;
1495 }
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506 static unsigned int sd_check_events(struct gendisk *disk, unsigned int clearing)
1507 {
1508 struct scsi_disk *sdkp = disk->private_data;
1509 struct scsi_device *sdp;
1510 int retval;
1511 bool disk_changed;
1512
1513 if (!sdkp)
1514 return 0;
1515
1516 sdp = sdkp->device;
1517 SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_check_events\n"));
1518
1519
1520
1521
1522
1523
1524
1525 if (!scsi_device_online(sdp)) {
1526 set_media_not_present(sdkp);
1527 goto out;
1528 }
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539 if (scsi_block_when_processing_errors(sdp)) {
1540 struct scsi_sense_hdr sshdr = { 0, };
1541
1542 retval = scsi_test_unit_ready(sdp, SD_TIMEOUT, sdkp->max_retries,
1543 &sshdr);
1544
1545
1546 if (retval < 0 || host_byte(retval)) {
1547 set_media_not_present(sdkp);
1548 goto out;
1549 }
1550
1551 if (media_not_present(sdkp, &sshdr))
1552 goto out;
1553 }
1554
1555
1556
1557
1558
1559 if (!sdkp->media_present)
1560 sdp->changed = 1;
1561 sdkp->media_present = 1;
1562 out:
1563
1564
1565
1566
1567
1568
1569 disk_changed = sdp->changed;
1570 sdp->changed = 0;
1571 return disk_changed ? DISK_EVENT_MEDIA_CHANGE : 0;
1572 }
1573
1574 static int sd_sync_cache(struct scsi_disk *sdkp, struct scsi_sense_hdr *sshdr)
1575 {
1576 int retries, res;
1577 struct scsi_device *sdp = sdkp->device;
1578 const int timeout = sdp->request_queue->rq_timeout
1579 * SD_FLUSH_TIMEOUT_MULTIPLIER;
1580 struct scsi_sense_hdr my_sshdr;
1581
1582 if (!scsi_device_online(sdp))
1583 return -ENODEV;
1584
1585
1586 if (!sshdr)
1587 sshdr = &my_sshdr;
1588
1589 for (retries = 3; retries > 0; --retries) {
1590 unsigned char cmd[10] = { 0 };
1591
1592 cmd[0] = SYNCHRONIZE_CACHE;
1593
1594
1595
1596
1597 res = scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL, sshdr,
1598 timeout, sdkp->max_retries, 0, RQF_PM, NULL);
1599 if (res == 0)
1600 break;
1601 }
1602
1603 if (res) {
1604 sd_print_result(sdkp, "Synchronize Cache(10) failed", res);
1605
1606 if (res < 0)
1607 return res;
1608
1609 if (scsi_status_is_check_condition(res) &&
1610 scsi_sense_valid(sshdr)) {
1611 sd_print_sense_hdr(sdkp, sshdr);
1612
1613
1614 if (sshdr->asc == 0x3a ||
1615 sshdr->asc == 0x20 ||
1616 (sshdr->asc == 0x74 && sshdr->ascq == 0x71))
1617
1618 return 0;
1619 }
1620
1621 switch (host_byte(res)) {
1622
1623 case DID_BAD_TARGET:
1624 case DID_NO_CONNECT:
1625 return 0;
1626
1627 case DID_BUS_BUSY:
1628 case DID_IMM_RETRY:
1629 case DID_REQUEUE:
1630 case DID_SOFT_ERROR:
1631 return -EBUSY;
1632 default:
1633 return -EIO;
1634 }
1635 }
1636 return 0;
1637 }
1638
1639 static void sd_rescan(struct device *dev)
1640 {
1641 struct scsi_disk *sdkp = dev_get_drvdata(dev);
1642
1643 sd_revalidate_disk(sdkp->disk);
1644 }
1645
1646 static int sd_get_unique_id(struct gendisk *disk, u8 id[16],
1647 enum blk_unique_id type)
1648 {
1649 struct scsi_device *sdev = scsi_disk(disk)->device;
1650 const struct scsi_vpd *vpd;
1651 const unsigned char *d;
1652 int ret = -ENXIO, len;
1653
1654 rcu_read_lock();
1655 vpd = rcu_dereference(sdev->vpd_pg83);
1656 if (!vpd)
1657 goto out_unlock;
1658
1659 ret = -EINVAL;
1660 for (d = vpd->data + 4; d < vpd->data + vpd->len; d += d[3] + 4) {
1661
1662 if (((d[1] >> 4) & 0x3) != 0x00)
1663 continue;
1664 if ((d[1] & 0xf) != type)
1665 continue;
1666
1667
1668
1669
1670
1671 len = d[3];
1672 if (len != 8 && len != 12 && len != 16)
1673 continue;
1674 ret = len;
1675 memcpy(id, d + 4, len);
1676 if (len == 16)
1677 break;
1678 }
1679 out_unlock:
1680 rcu_read_unlock();
1681 return ret;
1682 }
1683
1684 static char sd_pr_type(enum pr_type type)
1685 {
1686 switch (type) {
1687 case PR_WRITE_EXCLUSIVE:
1688 return 0x01;
1689 case PR_EXCLUSIVE_ACCESS:
1690 return 0x03;
1691 case PR_WRITE_EXCLUSIVE_REG_ONLY:
1692 return 0x05;
1693 case PR_EXCLUSIVE_ACCESS_REG_ONLY:
1694 return 0x06;
1695 case PR_WRITE_EXCLUSIVE_ALL_REGS:
1696 return 0x07;
1697 case PR_EXCLUSIVE_ACCESS_ALL_REGS:
1698 return 0x08;
1699 default:
1700 return 0;
1701 }
1702 };
1703
1704 static int sd_pr_command(struct block_device *bdev, u8 sa,
1705 u64 key, u64 sa_key, u8 type, u8 flags)
1706 {
1707 struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);
1708 struct scsi_device *sdev = sdkp->device;
1709 struct scsi_sense_hdr sshdr;
1710 int result;
1711 u8 cmd[16] = { 0, };
1712 u8 data[24] = { 0, };
1713
1714 cmd[0] = PERSISTENT_RESERVE_OUT;
1715 cmd[1] = sa;
1716 cmd[2] = type;
1717 put_unaligned_be32(sizeof(data), &cmd[5]);
1718
1719 put_unaligned_be64(key, &data[0]);
1720 put_unaligned_be64(sa_key, &data[8]);
1721 data[20] = flags;
1722
1723 result = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, &data, sizeof(data),
1724 &sshdr, SD_TIMEOUT, sdkp->max_retries, NULL);
1725
1726 if (scsi_status_is_check_condition(result) &&
1727 scsi_sense_valid(&sshdr)) {
1728 sdev_printk(KERN_INFO, sdev, "PR command failed: %d\n", result);
1729 scsi_print_sense_hdr(sdev, NULL, &sshdr);
1730 }
1731
1732 return result;
1733 }
1734
1735 static int sd_pr_register(struct block_device *bdev, u64 old_key, u64 new_key,
1736 u32 flags)
1737 {
1738 if (flags & ~PR_FL_IGNORE_KEY)
1739 return -EOPNOTSUPP;
1740 return sd_pr_command(bdev, (flags & PR_FL_IGNORE_KEY) ? 0x06 : 0x00,
1741 old_key, new_key, 0,
1742 (1 << 0) );
1743 }
1744
1745 static int sd_pr_reserve(struct block_device *bdev, u64 key, enum pr_type type,
1746 u32 flags)
1747 {
1748 if (flags)
1749 return -EOPNOTSUPP;
1750 return sd_pr_command(bdev, 0x01, key, 0, sd_pr_type(type), 0);
1751 }
1752
1753 static int sd_pr_release(struct block_device *bdev, u64 key, enum pr_type type)
1754 {
1755 return sd_pr_command(bdev, 0x02, key, 0, sd_pr_type(type), 0);
1756 }
1757
1758 static int sd_pr_preempt(struct block_device *bdev, u64 old_key, u64 new_key,
1759 enum pr_type type, bool abort)
1760 {
1761 return sd_pr_command(bdev, abort ? 0x05 : 0x04, old_key, new_key,
1762 sd_pr_type(type), 0);
1763 }
1764
1765 static int sd_pr_clear(struct block_device *bdev, u64 key)
1766 {
1767 return sd_pr_command(bdev, 0x03, key, 0, 0, 0);
1768 }
1769
1770 static const struct pr_ops sd_pr_ops = {
1771 .pr_register = sd_pr_register,
1772 .pr_reserve = sd_pr_reserve,
1773 .pr_release = sd_pr_release,
1774 .pr_preempt = sd_pr_preempt,
1775 .pr_clear = sd_pr_clear,
1776 };
1777
1778 static void scsi_disk_free_disk(struct gendisk *disk)
1779 {
1780 struct scsi_disk *sdkp = scsi_disk(disk);
1781
1782 put_device(&sdkp->disk_dev);
1783 }
1784
1785 static const struct block_device_operations sd_fops = {
1786 .owner = THIS_MODULE,
1787 .open = sd_open,
1788 .release = sd_release,
1789 .ioctl = sd_ioctl,
1790 .getgeo = sd_getgeo,
1791 .compat_ioctl = blkdev_compat_ptr_ioctl,
1792 .check_events = sd_check_events,
1793 .unlock_native_capacity = sd_unlock_native_capacity,
1794 .report_zones = sd_zbc_report_zones,
1795 .get_unique_id = sd_get_unique_id,
1796 .free_disk = scsi_disk_free_disk,
1797 .pr_ops = &sd_pr_ops,
1798 };
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812 static void sd_eh_reset(struct scsi_cmnd *scmd)
1813 {
1814 struct scsi_disk *sdkp = scsi_disk(scsi_cmd_to_rq(scmd)->q->disk);
1815
1816
1817 sdkp->ignore_medium_access_errors = false;
1818 }
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832 static int sd_eh_action(struct scsi_cmnd *scmd, int eh_disp)
1833 {
1834 struct scsi_disk *sdkp = scsi_disk(scsi_cmd_to_rq(scmd)->q->disk);
1835 struct scsi_device *sdev = scmd->device;
1836
1837 if (!scsi_device_online(sdev) ||
1838 !scsi_medium_access_command(scmd) ||
1839 host_byte(scmd->result) != DID_TIME_OUT ||
1840 eh_disp != SUCCESS)
1841 return eh_disp;
1842
1843
1844
1845
1846
1847
1848
1849
1850 if (!sdkp->ignore_medium_access_errors) {
1851 sdkp->medium_access_timed_out++;
1852 sdkp->ignore_medium_access_errors = true;
1853 }
1854
1855
1856
1857
1858
1859
1860 if (sdkp->medium_access_timed_out >= sdkp->max_medium_access_timeouts) {
1861 scmd_printk(KERN_ERR, scmd,
1862 "Medium access timeout failure. Offlining disk!\n");
1863 mutex_lock(&sdev->state_mutex);
1864 scsi_device_set_state(sdev, SDEV_OFFLINE);
1865 mutex_unlock(&sdev->state_mutex);
1866
1867 return SUCCESS;
1868 }
1869
1870 return eh_disp;
1871 }
1872
1873 static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)
1874 {
1875 struct request *req = scsi_cmd_to_rq(scmd);
1876 struct scsi_device *sdev = scmd->device;
1877 unsigned int transferred, good_bytes;
1878 u64 start_lba, end_lba, bad_lba;
1879
1880
1881
1882
1883
1884 if (scsi_bufflen(scmd) <= sdev->sector_size)
1885 return 0;
1886
1887
1888 if (!scsi_get_sense_info_fld(scmd->sense_buffer,
1889 SCSI_SENSE_BUFFERSIZE,
1890 &bad_lba))
1891 return 0;
1892
1893
1894
1895
1896
1897 start_lba = sectors_to_logical(sdev, blk_rq_pos(req));
1898 end_lba = start_lba + bytes_to_logical(sdev, scsi_bufflen(scmd));
1899 if (bad_lba < start_lba || bad_lba >= end_lba)
1900 return 0;
1901
1902
1903
1904
1905
1906 transferred = scsi_bufflen(scmd) - scsi_get_resid(scmd);
1907
1908
1909
1910
1911 good_bytes = logical_to_bytes(sdev, bad_lba - start_lba);
1912
1913 return min(good_bytes, transferred);
1914 }
1915
1916
1917
1918
1919
1920
1921
1922
1923 static int sd_done(struct scsi_cmnd *SCpnt)
1924 {
1925 int result = SCpnt->result;
1926 unsigned int good_bytes = result ? 0 : scsi_bufflen(SCpnt);
1927 unsigned int sector_size = SCpnt->device->sector_size;
1928 unsigned int resid;
1929 struct scsi_sense_hdr sshdr;
1930 struct request *req = scsi_cmd_to_rq(SCpnt);
1931 struct scsi_disk *sdkp = scsi_disk(req->q->disk);
1932 int sense_valid = 0;
1933 int sense_deferred = 0;
1934
1935 switch (req_op(req)) {
1936 case REQ_OP_DISCARD:
1937 case REQ_OP_WRITE_ZEROES:
1938 case REQ_OP_ZONE_RESET:
1939 case REQ_OP_ZONE_RESET_ALL:
1940 case REQ_OP_ZONE_OPEN:
1941 case REQ_OP_ZONE_CLOSE:
1942 case REQ_OP_ZONE_FINISH:
1943 if (!result) {
1944 good_bytes = blk_rq_bytes(req);
1945 scsi_set_resid(SCpnt, 0);
1946 } else {
1947 good_bytes = 0;
1948 scsi_set_resid(SCpnt, blk_rq_bytes(req));
1949 }
1950 break;
1951 default:
1952
1953
1954
1955
1956
1957 resid = scsi_get_resid(SCpnt);
1958 if (resid & (sector_size - 1)) {
1959 sd_printk(KERN_INFO, sdkp,
1960 "Unaligned partial completion (resid=%u, sector_sz=%u)\n",
1961 resid, sector_size);
1962 scsi_print_command(SCpnt);
1963 resid = min(scsi_bufflen(SCpnt),
1964 round_up(resid, sector_size));
1965 scsi_set_resid(SCpnt, resid);
1966 }
1967 }
1968
1969 if (result) {
1970 sense_valid = scsi_command_normalize_sense(SCpnt, &sshdr);
1971 if (sense_valid)
1972 sense_deferred = scsi_sense_is_deferred(&sshdr);
1973 }
1974 sdkp->medium_access_timed_out = 0;
1975
1976 if (!scsi_status_is_check_condition(result) &&
1977 (!sense_valid || sense_deferred))
1978 goto out;
1979
1980 switch (sshdr.sense_key) {
1981 case HARDWARE_ERROR:
1982 case MEDIUM_ERROR:
1983 good_bytes = sd_completed_bytes(SCpnt);
1984 break;
1985 case RECOVERED_ERROR:
1986 good_bytes = scsi_bufflen(SCpnt);
1987 break;
1988 case NO_SENSE:
1989
1990
1991
1992
1993 SCpnt->result = 0;
1994 memset(SCpnt->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
1995 break;
1996 case ABORTED_COMMAND:
1997 if (sshdr.asc == 0x10)
1998 good_bytes = sd_completed_bytes(SCpnt);
1999 break;
2000 case ILLEGAL_REQUEST:
2001 switch (sshdr.asc) {
2002 case 0x10:
2003 good_bytes = sd_completed_bytes(SCpnt);
2004 break;
2005 case 0x20:
2006 case 0x24:
2007 switch (SCpnt->cmnd[0]) {
2008 case UNMAP:
2009 sd_config_discard(sdkp, SD_LBP_DISABLE);
2010 break;
2011 case WRITE_SAME_16:
2012 case WRITE_SAME:
2013 if (SCpnt->cmnd[1] & 8) {
2014 sd_config_discard(sdkp, SD_LBP_DISABLE);
2015 } else {
2016 sdkp->device->no_write_same = 1;
2017 sd_config_write_same(sdkp);
2018 req->rq_flags |= RQF_QUIET;
2019 }
2020 break;
2021 }
2022 }
2023 break;
2024 default:
2025 break;
2026 }
2027
2028 out:
2029 if (sd_is_zoned(sdkp))
2030 good_bytes = sd_zbc_complete(SCpnt, good_bytes, &sshdr);
2031
2032 SCSI_LOG_HLCOMPLETE(1, scmd_printk(KERN_INFO, SCpnt,
2033 "sd_done: completed %d of %d bytes\n",
2034 good_bytes, scsi_bufflen(SCpnt)));
2035
2036 return good_bytes;
2037 }
2038
2039
2040
2041
2042 static void
2043 sd_spinup_disk(struct scsi_disk *sdkp)
2044 {
2045 unsigned char cmd[10];
2046 unsigned long spintime_expire = 0;
2047 int retries, spintime;
2048 unsigned int the_result;
2049 struct scsi_sense_hdr sshdr;
2050 int sense_valid = 0;
2051
2052 spintime = 0;
2053
2054
2055
2056 do {
2057 retries = 0;
2058
2059 do {
2060 bool media_was_present = sdkp->media_present;
2061
2062 cmd[0] = TEST_UNIT_READY;
2063 memset((void *) &cmd[1], 0, 9);
2064
2065 the_result = scsi_execute_req(sdkp->device, cmd,
2066 DMA_NONE, NULL, 0,
2067 &sshdr, SD_TIMEOUT,
2068 sdkp->max_retries, NULL);
2069
2070
2071
2072
2073
2074
2075 if (media_not_present(sdkp, &sshdr)) {
2076 if (media_was_present)
2077 sd_printk(KERN_NOTICE, sdkp, "Media removed, stopped polling\n");
2078 return;
2079 }
2080
2081 if (the_result)
2082 sense_valid = scsi_sense_valid(&sshdr);
2083 retries++;
2084 } while (retries < 3 &&
2085 (!scsi_status_is_good(the_result) ||
2086 (scsi_status_is_check_condition(the_result) &&
2087 sense_valid && sshdr.sense_key == UNIT_ATTENTION)));
2088
2089 if (!scsi_status_is_check_condition(the_result)) {
2090
2091
2092 if(!spintime && !scsi_status_is_good(the_result)) {
2093 sd_print_result(sdkp, "Test Unit Ready failed",
2094 the_result);
2095 }
2096 break;
2097 }
2098
2099
2100
2101
2102 if (sdkp->device->no_start_on_add)
2103 break;
2104
2105 if (sense_valid && sshdr.sense_key == NOT_READY) {
2106 if (sshdr.asc == 4 && sshdr.ascq == 3)
2107 break;
2108 if (sshdr.asc == 4 && sshdr.ascq == 0xb)
2109 break;
2110 if (sshdr.asc == 4 && sshdr.ascq == 0xc)
2111 break;
2112 if (sshdr.asc == 4 && sshdr.ascq == 0x1b)
2113 break;
2114
2115
2116
2117 if (!spintime) {
2118 sd_printk(KERN_NOTICE, sdkp, "Spinning up disk...");
2119 cmd[0] = START_STOP;
2120 cmd[1] = 1;
2121 memset((void *) &cmd[2], 0, 8);
2122 cmd[4] = 1;
2123 if (sdkp->device->start_stop_pwr_cond)
2124 cmd[4] |= 1 << 4;
2125 scsi_execute_req(sdkp->device, cmd, DMA_NONE,
2126 NULL, 0, &sshdr,
2127 SD_TIMEOUT, sdkp->max_retries,
2128 NULL);
2129 spintime_expire = jiffies + 100 * HZ;
2130 spintime = 1;
2131 }
2132
2133 msleep(1000);
2134 printk(KERN_CONT ".");
2135
2136
2137
2138
2139
2140
2141 } else if (sense_valid &&
2142 sshdr.sense_key == UNIT_ATTENTION &&
2143 sshdr.asc == 0x28) {
2144 if (!spintime) {
2145 spintime_expire = jiffies + 5 * HZ;
2146 spintime = 1;
2147 }
2148
2149 msleep(1000);
2150 } else {
2151
2152
2153 if(!spintime) {
2154 sd_printk(KERN_NOTICE, sdkp, "Unit Not Ready\n");
2155 sd_print_sense_hdr(sdkp, &sshdr);
2156 }
2157 break;
2158 }
2159
2160 } while (spintime && time_before_eq(jiffies, spintime_expire));
2161
2162 if (spintime) {
2163 if (scsi_status_is_good(the_result))
2164 printk(KERN_CONT "ready\n");
2165 else
2166 printk(KERN_CONT "not responding...\n");
2167 }
2168 }
2169
2170
2171
2172
2173 static int sd_read_protection_type(struct scsi_disk *sdkp, unsigned char *buffer)
2174 {
2175 struct scsi_device *sdp = sdkp->device;
2176 u8 type;
2177
2178 if (scsi_device_protection(sdp) == 0 || (buffer[12] & 1) == 0) {
2179 sdkp->protection_type = 0;
2180 return 0;
2181 }
2182
2183 type = ((buffer[12] >> 1) & 7) + 1;
2184
2185 if (type > T10_PI_TYPE3_PROTECTION) {
2186 sd_printk(KERN_ERR, sdkp, "formatted with unsupported" \
2187 " protection type %u. Disabling disk!\n",
2188 type);
2189 sdkp->protection_type = 0;
2190 return -ENODEV;
2191 }
2192
2193 sdkp->protection_type = type;
2194
2195 return 0;
2196 }
2197
2198 static void sd_config_protection(struct scsi_disk *sdkp)
2199 {
2200 struct scsi_device *sdp = sdkp->device;
2201
2202 if (!sdkp->first_scan)
2203 return;
2204
2205 sd_dif_config_host(sdkp);
2206
2207 if (!sdkp->protection_type)
2208 return;
2209
2210 if (!scsi_host_dif_capable(sdp->host, sdkp->protection_type)) {
2211 sd_printk(KERN_NOTICE, sdkp,
2212 "Disabling DIF Type %u protection\n",
2213 sdkp->protection_type);
2214 sdkp->protection_type = 0;
2215 }
2216
2217 sd_printk(KERN_NOTICE, sdkp, "Enabling DIF Type %u protection\n",
2218 sdkp->protection_type);
2219 }
2220
2221 static void read_capacity_error(struct scsi_disk *sdkp, struct scsi_device *sdp,
2222 struct scsi_sense_hdr *sshdr, int sense_valid,
2223 int the_result)
2224 {
2225 if (sense_valid)
2226 sd_print_sense_hdr(sdkp, sshdr);
2227 else
2228 sd_printk(KERN_NOTICE, sdkp, "Sense not available.\n");
2229
2230
2231
2232
2233
2234 if (sdp->removable &&
2235 sense_valid && sshdr->sense_key == NOT_READY)
2236 set_media_not_present(sdkp);
2237
2238
2239
2240
2241
2242
2243 sdkp->capacity = 0;
2244 }
2245
2246 #define RC16_LEN 32
2247 #if RC16_LEN > SD_BUF_SIZE
2248 #error RC16_LEN must not be more than SD_BUF_SIZE
2249 #endif
2250
2251 #define READ_CAPACITY_RETRIES_ON_RESET 10
2252
2253 static int read_capacity_16(struct scsi_disk *sdkp, struct scsi_device *sdp,
2254 unsigned char *buffer)
2255 {
2256 unsigned char cmd[16];
2257 struct scsi_sense_hdr sshdr;
2258 int sense_valid = 0;
2259 int the_result;
2260 int retries = 3, reset_retries = READ_CAPACITY_RETRIES_ON_RESET;
2261 unsigned int alignment;
2262 unsigned long long lba;
2263 unsigned sector_size;
2264
2265 if (sdp->no_read_capacity_16)
2266 return -EINVAL;
2267
2268 do {
2269 memset(cmd, 0, 16);
2270 cmd[0] = SERVICE_ACTION_IN_16;
2271 cmd[1] = SAI_READ_CAPACITY_16;
2272 cmd[13] = RC16_LEN;
2273 memset(buffer, 0, RC16_LEN);
2274
2275 the_result = scsi_execute_req(sdp, cmd, DMA_FROM_DEVICE,
2276 buffer, RC16_LEN, &sshdr,
2277 SD_TIMEOUT, sdkp->max_retries, NULL);
2278
2279 if (media_not_present(sdkp, &sshdr))
2280 return -ENODEV;
2281
2282 if (the_result > 0) {
2283 sense_valid = scsi_sense_valid(&sshdr);
2284 if (sense_valid &&
2285 sshdr.sense_key == ILLEGAL_REQUEST &&
2286 (sshdr.asc == 0x20 || sshdr.asc == 0x24) &&
2287 sshdr.ascq == 0x00)
2288
2289
2290
2291 return -EINVAL;
2292 if (sense_valid &&
2293 sshdr.sense_key == UNIT_ATTENTION &&
2294 sshdr.asc == 0x29 && sshdr.ascq == 0x00)
2295
2296
2297 if (--reset_retries > 0)
2298 continue;
2299 }
2300 retries--;
2301
2302 } while (the_result && retries);
2303
2304 if (the_result) {
2305 sd_print_result(sdkp, "Read Capacity(16) failed", the_result);
2306 read_capacity_error(sdkp, sdp, &sshdr, sense_valid, the_result);
2307 return -EINVAL;
2308 }
2309
2310 sector_size = get_unaligned_be32(&buffer[8]);
2311 lba = get_unaligned_be64(&buffer[0]);
2312
2313 if (sd_read_protection_type(sdkp, buffer) < 0) {
2314 sdkp->capacity = 0;
2315 return -ENODEV;
2316 }
2317
2318
2319 sdkp->physical_block_size = (1 << (buffer[13] & 0xf)) * sector_size;
2320
2321
2322 sdkp->rc_basis = (buffer[12] >> 4) & 0x3;
2323
2324
2325 alignment = ((buffer[14] & 0x3f) << 8 | buffer[15]) * sector_size;
2326 blk_queue_alignment_offset(sdp->request_queue, alignment);
2327 if (alignment && sdkp->first_scan)
2328 sd_printk(KERN_NOTICE, sdkp,
2329 "physical block alignment offset: %u\n", alignment);
2330
2331 if (buffer[14] & 0x80) {
2332 sdkp->lbpme = 1;
2333
2334 if (buffer[14] & 0x40)
2335 sdkp->lbprz = 1;
2336
2337 sd_config_discard(sdkp, SD_LBP_WS16);
2338 }
2339
2340 sdkp->capacity = lba + 1;
2341 return sector_size;
2342 }
2343
2344 static int read_capacity_10(struct scsi_disk *sdkp, struct scsi_device *sdp,
2345 unsigned char *buffer)
2346 {
2347 unsigned char cmd[16];
2348 struct scsi_sense_hdr sshdr;
2349 int sense_valid = 0;
2350 int the_result;
2351 int retries = 3, reset_retries = READ_CAPACITY_RETRIES_ON_RESET;
2352 sector_t lba;
2353 unsigned sector_size;
2354
2355 do {
2356 cmd[0] = READ_CAPACITY;
2357 memset(&cmd[1], 0, 9);
2358 memset(buffer, 0, 8);
2359
2360 the_result = scsi_execute_req(sdp, cmd, DMA_FROM_DEVICE,
2361 buffer, 8, &sshdr,
2362 SD_TIMEOUT, sdkp->max_retries, NULL);
2363
2364 if (media_not_present(sdkp, &sshdr))
2365 return -ENODEV;
2366
2367 if (the_result > 0) {
2368 sense_valid = scsi_sense_valid(&sshdr);
2369 if (sense_valid &&
2370 sshdr.sense_key == UNIT_ATTENTION &&
2371 sshdr.asc == 0x29 && sshdr.ascq == 0x00)
2372
2373
2374 if (--reset_retries > 0)
2375 continue;
2376 }
2377 retries--;
2378
2379 } while (the_result && retries);
2380
2381 if (the_result) {
2382 sd_print_result(sdkp, "Read Capacity(10) failed", the_result);
2383 read_capacity_error(sdkp, sdp, &sshdr, sense_valid, the_result);
2384 return -EINVAL;
2385 }
2386
2387 sector_size = get_unaligned_be32(&buffer[4]);
2388 lba = get_unaligned_be32(&buffer[0]);
2389
2390 if (sdp->no_read_capacity_16 && (lba == 0xffffffff)) {
2391
2392
2393
2394 sdkp->capacity = 0;
2395 sdkp->physical_block_size = sector_size;
2396 return sector_size;
2397 }
2398
2399 sdkp->capacity = lba + 1;
2400 sdkp->physical_block_size = sector_size;
2401 return sector_size;
2402 }
2403
2404 static int sd_try_rc16_first(struct scsi_device *sdp)
2405 {
2406 if (sdp->host->max_cmd_len < 16)
2407 return 0;
2408 if (sdp->try_rc_10_first)
2409 return 0;
2410 if (sdp->scsi_level > SCSI_SPC_2)
2411 return 1;
2412 if (scsi_device_protection(sdp))
2413 return 1;
2414 return 0;
2415 }
2416
2417
2418
2419
2420 static void
2421 sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer)
2422 {
2423 int sector_size;
2424 struct scsi_device *sdp = sdkp->device;
2425
2426 if (sd_try_rc16_first(sdp)) {
2427 sector_size = read_capacity_16(sdkp, sdp, buffer);
2428 if (sector_size == -EOVERFLOW)
2429 goto got_data;
2430 if (sector_size == -ENODEV)
2431 return;
2432 if (sector_size < 0)
2433 sector_size = read_capacity_10(sdkp, sdp, buffer);
2434 if (sector_size < 0)
2435 return;
2436 } else {
2437 sector_size = read_capacity_10(sdkp, sdp, buffer);
2438 if (sector_size == -EOVERFLOW)
2439 goto got_data;
2440 if (sector_size < 0)
2441 return;
2442 if ((sizeof(sdkp->capacity) > 4) &&
2443 (sdkp->capacity > 0xffffffffULL)) {
2444 int old_sector_size = sector_size;
2445 sd_printk(KERN_NOTICE, sdkp, "Very big device. "
2446 "Trying to use READ CAPACITY(16).\n");
2447 sector_size = read_capacity_16(sdkp, sdp, buffer);
2448 if (sector_size < 0) {
2449 sd_printk(KERN_NOTICE, sdkp,
2450 "Using 0xffffffff as device size\n");
2451 sdkp->capacity = 1 + (sector_t) 0xffffffff;
2452 sector_size = old_sector_size;
2453 goto got_data;
2454 }
2455
2456 sdp->try_rc_10_first = 0;
2457 }
2458 }
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470 if (sdp->fix_capacity ||
2471 (sdp->guess_capacity && (sdkp->capacity & 0x01))) {
2472 sd_printk(KERN_INFO, sdkp, "Adjusting the sector count "
2473 "from its reported value: %llu\n",
2474 (unsigned long long) sdkp->capacity);
2475 --sdkp->capacity;
2476 }
2477
2478 got_data:
2479 if (sector_size == 0) {
2480 sector_size = 512;
2481 sd_printk(KERN_NOTICE, sdkp, "Sector size 0 reported, "
2482 "assuming 512.\n");
2483 }
2484
2485 if (sector_size != 512 &&
2486 sector_size != 1024 &&
2487 sector_size != 2048 &&
2488 sector_size != 4096) {
2489 sd_printk(KERN_NOTICE, sdkp, "Unsupported sector size %d.\n",
2490 sector_size);
2491
2492
2493
2494
2495
2496
2497 sdkp->capacity = 0;
2498
2499
2500
2501
2502
2503
2504 sector_size = 512;
2505 }
2506 blk_queue_logical_block_size(sdp->request_queue, sector_size);
2507 blk_queue_physical_block_size(sdp->request_queue,
2508 sdkp->physical_block_size);
2509 sdkp->device->sector_size = sector_size;
2510
2511 if (sdkp->capacity > 0xffffffff)
2512 sdp->use_16_for_rw = 1;
2513
2514 }
2515
2516
2517
2518
2519 static void
2520 sd_print_capacity(struct scsi_disk *sdkp,
2521 sector_t old_capacity)
2522 {
2523 int sector_size = sdkp->device->sector_size;
2524 char cap_str_2[10], cap_str_10[10];
2525
2526 if (!sdkp->first_scan && old_capacity == sdkp->capacity)
2527 return;
2528
2529 string_get_size(sdkp->capacity, sector_size,
2530 STRING_UNITS_2, cap_str_2, sizeof(cap_str_2));
2531 string_get_size(sdkp->capacity, sector_size,
2532 STRING_UNITS_10, cap_str_10, sizeof(cap_str_10));
2533
2534 sd_printk(KERN_NOTICE, sdkp,
2535 "%llu %d-byte logical blocks: (%s/%s)\n",
2536 (unsigned long long)sdkp->capacity,
2537 sector_size, cap_str_10, cap_str_2);
2538
2539 if (sdkp->physical_block_size != sector_size)
2540 sd_printk(KERN_NOTICE, sdkp,
2541 "%u-byte physical blocks\n",
2542 sdkp->physical_block_size);
2543 }
2544
2545
2546 static inline int
2547 sd_do_mode_sense(struct scsi_disk *sdkp, int dbd, int modepage,
2548 unsigned char *buffer, int len, struct scsi_mode_data *data,
2549 struct scsi_sense_hdr *sshdr)
2550 {
2551
2552
2553
2554
2555 if (sdkp->device->use_10_for_ms && len < 8)
2556 len = 8;
2557
2558 return scsi_mode_sense(sdkp->device, dbd, modepage, buffer, len,
2559 SD_TIMEOUT, sdkp->max_retries, data,
2560 sshdr);
2561 }
2562
2563
2564
2565
2566
2567 static void
2568 sd_read_write_protect_flag(struct scsi_disk *sdkp, unsigned char *buffer)
2569 {
2570 int res;
2571 struct scsi_device *sdp = sdkp->device;
2572 struct scsi_mode_data data;
2573 int old_wp = sdkp->write_prot;
2574
2575 set_disk_ro(sdkp->disk, 0);
2576 if (sdp->skip_ms_page_3f) {
2577 sd_first_printk(KERN_NOTICE, sdkp, "Assuming Write Enabled\n");
2578 return;
2579 }
2580
2581 if (sdp->use_192_bytes_for_3f) {
2582 res = sd_do_mode_sense(sdkp, 0, 0x3F, buffer, 192, &data, NULL);
2583 } else {
2584
2585
2586
2587
2588
2589 res = sd_do_mode_sense(sdkp, 0, 0x3F, buffer, 4, &data, NULL);
2590
2591
2592
2593
2594
2595
2596
2597 if (res < 0)
2598 res = sd_do_mode_sense(sdkp, 0, 0, buffer, 4, &data, NULL);
2599
2600
2601
2602
2603 if (res < 0)
2604 res = sd_do_mode_sense(sdkp, 0, 0x3F, buffer, 255,
2605 &data, NULL);
2606 }
2607
2608 if (res < 0) {
2609 sd_first_printk(KERN_WARNING, sdkp,
2610 "Test WP failed, assume Write Enabled\n");
2611 } else {
2612 sdkp->write_prot = ((data.device_specific & 0x80) != 0);
2613 set_disk_ro(sdkp->disk, sdkp->write_prot);
2614 if (sdkp->first_scan || old_wp != sdkp->write_prot) {
2615 sd_printk(KERN_NOTICE, sdkp, "Write Protect is %s\n",
2616 sdkp->write_prot ? "on" : "off");
2617 sd_printk(KERN_DEBUG, sdkp, "Mode Sense: %4ph\n", buffer);
2618 }
2619 }
2620 }
2621
2622
2623
2624
2625
2626 static void
2627 sd_read_cache_type(struct scsi_disk *sdkp, unsigned char *buffer)
2628 {
2629 int len = 0, res;
2630 struct scsi_device *sdp = sdkp->device;
2631
2632 int dbd;
2633 int modepage;
2634 int first_len;
2635 struct scsi_mode_data data;
2636 struct scsi_sense_hdr sshdr;
2637 int old_wce = sdkp->WCE;
2638 int old_rcd = sdkp->RCD;
2639 int old_dpofua = sdkp->DPOFUA;
2640
2641
2642 if (sdkp->cache_override)
2643 return;
2644
2645 first_len = 4;
2646 if (sdp->skip_ms_page_8) {
2647 if (sdp->type == TYPE_RBC)
2648 goto defaults;
2649 else {
2650 if (sdp->skip_ms_page_3f)
2651 goto defaults;
2652 modepage = 0x3F;
2653 if (sdp->use_192_bytes_for_3f)
2654 first_len = 192;
2655 dbd = 0;
2656 }
2657 } else if (sdp->type == TYPE_RBC) {
2658 modepage = 6;
2659 dbd = 8;
2660 } else {
2661 modepage = 8;
2662 dbd = 0;
2663 }
2664
2665
2666 res = sd_do_mode_sense(sdkp, dbd, modepage, buffer, first_len,
2667 &data, &sshdr);
2668
2669 if (res < 0)
2670 goto bad_sense;
2671
2672 if (!data.header_length) {
2673 modepage = 6;
2674 first_len = 0;
2675 sd_first_printk(KERN_ERR, sdkp,
2676 "Missing header in MODE_SENSE response\n");
2677 }
2678
2679
2680 len = data.length;
2681
2682
2683
2684
2685
2686 if (len < 3)
2687 goto bad_sense;
2688 else if (len > SD_BUF_SIZE) {
2689 sd_first_printk(KERN_NOTICE, sdkp, "Truncating mode parameter "
2690 "data from %d to %d bytes\n", len, SD_BUF_SIZE);
2691 len = SD_BUF_SIZE;
2692 }
2693 if (modepage == 0x3F && sdp->use_192_bytes_for_3f)
2694 len = 192;
2695
2696
2697 if (len > first_len)
2698 res = sd_do_mode_sense(sdkp, dbd, modepage, buffer, len,
2699 &data, &sshdr);
2700
2701 if (!res) {
2702 int offset = data.header_length + data.block_descriptor_length;
2703
2704 while (offset < len) {
2705 u8 page_code = buffer[offset] & 0x3F;
2706 u8 spf = buffer[offset] & 0x40;
2707
2708 if (page_code == 8 || page_code == 6) {
2709
2710
2711 if (len - offset <= 2) {
2712 sd_first_printk(KERN_ERR, sdkp,
2713 "Incomplete mode parameter "
2714 "data\n");
2715 goto defaults;
2716 } else {
2717 modepage = page_code;
2718 goto Page_found;
2719 }
2720 } else {
2721
2722 if (spf && len - offset > 3)
2723 offset += 4 + (buffer[offset+2] << 8) +
2724 buffer[offset+3];
2725 else if (!spf && len - offset > 1)
2726 offset += 2 + buffer[offset+1];
2727 else {
2728 sd_first_printk(KERN_ERR, sdkp,
2729 "Incomplete mode "
2730 "parameter data\n");
2731 goto defaults;
2732 }
2733 }
2734 }
2735
2736 sd_first_printk(KERN_WARNING, sdkp,
2737 "No Caching mode page found\n");
2738 goto defaults;
2739
2740 Page_found:
2741 if (modepage == 8) {
2742 sdkp->WCE = ((buffer[offset + 2] & 0x04) != 0);
2743 sdkp->RCD = ((buffer[offset + 2] & 0x01) != 0);
2744 } else {
2745 sdkp->WCE = ((buffer[offset + 2] & 0x01) == 0);
2746 sdkp->RCD = 0;
2747 }
2748
2749 sdkp->DPOFUA = (data.device_specific & 0x10) != 0;
2750 if (sdp->broken_fua) {
2751 sd_first_printk(KERN_NOTICE, sdkp, "Disabling FUA\n");
2752 sdkp->DPOFUA = 0;
2753 } else if (sdkp->DPOFUA && !sdkp->device->use_10_for_rw &&
2754 !sdkp->device->use_16_for_rw) {
2755 sd_first_printk(KERN_NOTICE, sdkp,
2756 "Uses READ/WRITE(6), disabling FUA\n");
2757 sdkp->DPOFUA = 0;
2758 }
2759
2760
2761 if (sdkp->WCE && sdkp->write_prot)
2762 sdkp->WCE = 0;
2763
2764 if (sdkp->first_scan || old_wce != sdkp->WCE ||
2765 old_rcd != sdkp->RCD || old_dpofua != sdkp->DPOFUA)
2766 sd_printk(KERN_NOTICE, sdkp,
2767 "Write cache: %s, read cache: %s, %s\n",
2768 sdkp->WCE ? "enabled" : "disabled",
2769 sdkp->RCD ? "disabled" : "enabled",
2770 sdkp->DPOFUA ? "supports DPO and FUA"
2771 : "doesn't support DPO or FUA");
2772
2773 return;
2774 }
2775
2776 bad_sense:
2777 if (scsi_sense_valid(&sshdr) &&
2778 sshdr.sense_key == ILLEGAL_REQUEST &&
2779 sshdr.asc == 0x24 && sshdr.ascq == 0x0)
2780
2781 sd_first_printk(KERN_NOTICE, sdkp, "Cache data unavailable\n");
2782 else
2783 sd_first_printk(KERN_ERR, sdkp,
2784 "Asking for cache data failed\n");
2785
2786 defaults:
2787 if (sdp->wce_default_on) {
2788 sd_first_printk(KERN_NOTICE, sdkp,
2789 "Assuming drive cache: write back\n");
2790 sdkp->WCE = 1;
2791 } else {
2792 sd_first_printk(KERN_WARNING, sdkp,
2793 "Assuming drive cache: write through\n");
2794 sdkp->WCE = 0;
2795 }
2796 sdkp->RCD = 0;
2797 sdkp->DPOFUA = 0;
2798 }
2799
2800
2801
2802
2803
2804 static void sd_read_app_tag_own(struct scsi_disk *sdkp, unsigned char *buffer)
2805 {
2806 int res, offset;
2807 struct scsi_device *sdp = sdkp->device;
2808 struct scsi_mode_data data;
2809 struct scsi_sense_hdr sshdr;
2810
2811 if (sdp->type != TYPE_DISK && sdp->type != TYPE_ZBC)
2812 return;
2813
2814 if (sdkp->protection_type == 0)
2815 return;
2816
2817 res = scsi_mode_sense(sdp, 1, 0x0a, buffer, 36, SD_TIMEOUT,
2818 sdkp->max_retries, &data, &sshdr);
2819
2820 if (res < 0 || !data.header_length ||
2821 data.length < 6) {
2822 sd_first_printk(KERN_WARNING, sdkp,
2823 "getting Control mode page failed, assume no ATO\n");
2824
2825 if (scsi_sense_valid(&sshdr))
2826 sd_print_sense_hdr(sdkp, &sshdr);
2827
2828 return;
2829 }
2830
2831 offset = data.header_length + data.block_descriptor_length;
2832
2833 if ((buffer[offset] & 0x3f) != 0x0a) {
2834 sd_first_printk(KERN_ERR, sdkp, "ATO Got wrong page\n");
2835 return;
2836 }
2837
2838 if ((buffer[offset + 5] & 0x80) == 0)
2839 return;
2840
2841 sdkp->ATO = 1;
2842
2843 return;
2844 }
2845
2846
2847
2848
2849
2850 static void sd_read_block_limits(struct scsi_disk *sdkp)
2851 {
2852 struct scsi_vpd *vpd;
2853
2854 rcu_read_lock();
2855
2856 vpd = rcu_dereference(sdkp->device->vpd_pgb0);
2857 if (!vpd || vpd->len < 16)
2858 goto out;
2859
2860 sdkp->min_xfer_blocks = get_unaligned_be16(&vpd->data[6]);
2861 sdkp->max_xfer_blocks = get_unaligned_be32(&vpd->data[8]);
2862 sdkp->opt_xfer_blocks = get_unaligned_be32(&vpd->data[12]);
2863
2864 if (vpd->len >= 64) {
2865 unsigned int lba_count, desc_count;
2866
2867 sdkp->max_ws_blocks = (u32)get_unaligned_be64(&vpd->data[36]);
2868
2869 if (!sdkp->lbpme)
2870 goto out;
2871
2872 lba_count = get_unaligned_be32(&vpd->data[20]);
2873 desc_count = get_unaligned_be32(&vpd->data[24]);
2874
2875 if (lba_count && desc_count)
2876 sdkp->max_unmap_blocks = lba_count;
2877
2878 sdkp->unmap_granularity = get_unaligned_be32(&vpd->data[28]);
2879
2880 if (vpd->data[32] & 0x80)
2881 sdkp->unmap_alignment =
2882 get_unaligned_be32(&vpd->data[32]) & ~(1 << 31);
2883
2884 if (!sdkp->lbpvpd) {
2885
2886 if (sdkp->max_unmap_blocks)
2887 sd_config_discard(sdkp, SD_LBP_UNMAP);
2888 else
2889 sd_config_discard(sdkp, SD_LBP_WS16);
2890
2891 } else {
2892 if (sdkp->lbpu && sdkp->max_unmap_blocks)
2893 sd_config_discard(sdkp, SD_LBP_UNMAP);
2894 else if (sdkp->lbpws)
2895 sd_config_discard(sdkp, SD_LBP_WS16);
2896 else if (sdkp->lbpws10)
2897 sd_config_discard(sdkp, SD_LBP_WS10);
2898 else
2899 sd_config_discard(sdkp, SD_LBP_DISABLE);
2900 }
2901 }
2902
2903 out:
2904 rcu_read_unlock();
2905 }
2906
2907
2908
2909
2910
2911 static void sd_read_block_characteristics(struct scsi_disk *sdkp)
2912 {
2913 struct request_queue *q = sdkp->disk->queue;
2914 struct scsi_vpd *vpd;
2915 u16 rot;
2916 u8 zoned;
2917
2918 rcu_read_lock();
2919 vpd = rcu_dereference(sdkp->device->vpd_pgb1);
2920
2921 if (!vpd || vpd->len < 8) {
2922 rcu_read_unlock();
2923 return;
2924 }
2925
2926 rot = get_unaligned_be16(&vpd->data[4]);
2927 zoned = (vpd->data[8] >> 4) & 3;
2928 rcu_read_unlock();
2929
2930 if (rot == 1) {
2931 blk_queue_flag_set(QUEUE_FLAG_NONROT, q);
2932 blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, q);
2933 }
2934
2935 if (sdkp->device->type == TYPE_ZBC) {
2936
2937 disk_set_zoned(sdkp->disk, BLK_ZONED_HM);
2938 } else {
2939 sdkp->zoned = zoned;
2940 if (sdkp->zoned == 1) {
2941
2942 disk_set_zoned(sdkp->disk, BLK_ZONED_HA);
2943 } else {
2944
2945 disk_set_zoned(sdkp->disk, BLK_ZONED_NONE);
2946 }
2947 }
2948
2949 if (!sdkp->first_scan)
2950 return;
2951
2952 if (blk_queue_is_zoned(q)) {
2953 sd_printk(KERN_NOTICE, sdkp, "Host-%s zoned block device\n",
2954 q->limits.zoned == BLK_ZONED_HM ? "managed" : "aware");
2955 } else {
2956 if (sdkp->zoned == 1)
2957 sd_printk(KERN_NOTICE, sdkp,
2958 "Host-aware SMR disk used as regular disk\n");
2959 else if (sdkp->zoned == 2)
2960 sd_printk(KERN_NOTICE, sdkp,
2961 "Drive-managed SMR disk\n");
2962 }
2963 }
2964
2965
2966
2967
2968
2969 static void sd_read_block_provisioning(struct scsi_disk *sdkp)
2970 {
2971 struct scsi_vpd *vpd;
2972
2973 if (sdkp->lbpme == 0)
2974 return;
2975
2976 rcu_read_lock();
2977 vpd = rcu_dereference(sdkp->device->vpd_pgb2);
2978
2979 if (!vpd || vpd->len < 8) {
2980 rcu_read_unlock();
2981 return;
2982 }
2983
2984 sdkp->lbpvpd = 1;
2985 sdkp->lbpu = (vpd->data[5] >> 7) & 1;
2986 sdkp->lbpws = (vpd->data[5] >> 6) & 1;
2987 sdkp->lbpws10 = (vpd->data[5] >> 5) & 1;
2988 rcu_read_unlock();
2989 }
2990
2991 static void sd_read_write_same(struct scsi_disk *sdkp, unsigned char *buffer)
2992 {
2993 struct scsi_device *sdev = sdkp->device;
2994
2995 if (sdev->host->no_write_same) {
2996 sdev->no_write_same = 1;
2997
2998 return;
2999 }
3000
3001 if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, INQUIRY) < 0) {
3002 struct scsi_vpd *vpd;
3003
3004 sdev->no_report_opcodes = 1;
3005
3006
3007
3008
3009
3010 rcu_read_lock();
3011 vpd = rcu_dereference(sdev->vpd_pg89);
3012 if (vpd)
3013 sdev->no_write_same = 1;
3014 rcu_read_unlock();
3015 }
3016
3017 if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, WRITE_SAME_16) == 1)
3018 sdkp->ws16 = 1;
3019
3020 if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, WRITE_SAME) == 1)
3021 sdkp->ws10 = 1;
3022 }
3023
3024 static void sd_read_security(struct scsi_disk *sdkp, unsigned char *buffer)
3025 {
3026 struct scsi_device *sdev = sdkp->device;
3027
3028 if (!sdev->security_supported)
3029 return;
3030
3031 if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE,
3032 SECURITY_PROTOCOL_IN) == 1 &&
3033 scsi_report_opcode(sdev, buffer, SD_BUF_SIZE,
3034 SECURITY_PROTOCOL_OUT) == 1)
3035 sdkp->security = 1;
3036 }
3037
3038 static inline sector_t sd64_to_sectors(struct scsi_disk *sdkp, u8 *buf)
3039 {
3040 return logical_to_sectors(sdkp->device, get_unaligned_be64(buf));
3041 }
3042
3043
3044
3045
3046
3047 static void sd_read_cpr(struct scsi_disk *sdkp)
3048 {
3049 struct blk_independent_access_ranges *iars = NULL;
3050 unsigned char *buffer = NULL;
3051 unsigned int nr_cpr = 0;
3052 int i, vpd_len, buf_len = SD_BUF_SIZE;
3053 u8 *desc;
3054
3055
3056
3057
3058
3059 if (sdkp->first_scan)
3060 return;
3061
3062 if (!sdkp->capacity)
3063 goto out;
3064
3065
3066
3067
3068
3069 buf_len = 64 + 256*32;
3070 buffer = kmalloc(buf_len, GFP_KERNEL);
3071 if (!buffer || scsi_get_vpd_page(sdkp->device, 0xb9, buffer, buf_len))
3072 goto out;
3073
3074
3075 vpd_len = get_unaligned_be16(&buffer[2]) + 4;
3076 if (vpd_len > buf_len || vpd_len < 64 + 32 || (vpd_len & 31)) {
3077 sd_printk(KERN_ERR, sdkp,
3078 "Invalid Concurrent Positioning Ranges VPD page\n");
3079 goto out;
3080 }
3081
3082 nr_cpr = (vpd_len - 64) / 32;
3083 if (nr_cpr == 1) {
3084 nr_cpr = 0;
3085 goto out;
3086 }
3087
3088 iars = disk_alloc_independent_access_ranges(sdkp->disk, nr_cpr);
3089 if (!iars) {
3090 nr_cpr = 0;
3091 goto out;
3092 }
3093
3094 desc = &buffer[64];
3095 for (i = 0; i < nr_cpr; i++, desc += 32) {
3096 if (desc[0] != i) {
3097 sd_printk(KERN_ERR, sdkp,
3098 "Invalid Concurrent Positioning Range number\n");
3099 nr_cpr = 0;
3100 break;
3101 }
3102
3103 iars->ia_range[i].sector = sd64_to_sectors(sdkp, desc + 8);
3104 iars->ia_range[i].nr_sectors = sd64_to_sectors(sdkp, desc + 16);
3105 }
3106
3107 out:
3108 disk_set_independent_access_ranges(sdkp->disk, iars);
3109 if (nr_cpr && sdkp->nr_actuators != nr_cpr) {
3110 sd_printk(KERN_NOTICE, sdkp,
3111 "%u concurrent positioning ranges\n", nr_cpr);
3112 sdkp->nr_actuators = nr_cpr;
3113 }
3114
3115 kfree(buffer);
3116 }
3117
3118 static bool sd_validate_min_xfer_size(struct scsi_disk *sdkp)
3119 {
3120 struct scsi_device *sdp = sdkp->device;
3121 unsigned int min_xfer_bytes =
3122 logical_to_bytes(sdp, sdkp->min_xfer_blocks);
3123
3124 if (sdkp->min_xfer_blocks == 0)
3125 return false;
3126
3127 if (min_xfer_bytes & (sdkp->physical_block_size - 1)) {
3128 sd_first_printk(KERN_WARNING, sdkp,
3129 "Preferred minimum I/O size %u bytes not a " \
3130 "multiple of physical block size (%u bytes)\n",
3131 min_xfer_bytes, sdkp->physical_block_size);
3132 sdkp->min_xfer_blocks = 0;
3133 return false;
3134 }
3135
3136 sd_first_printk(KERN_INFO, sdkp, "Preferred minimum I/O size %u bytes\n",
3137 min_xfer_bytes);
3138 return true;
3139 }
3140
3141
3142
3143
3144
3145
3146 static bool sd_validate_opt_xfer_size(struct scsi_disk *sdkp,
3147 unsigned int dev_max)
3148 {
3149 struct scsi_device *sdp = sdkp->device;
3150 unsigned int opt_xfer_bytes =
3151 logical_to_bytes(sdp, sdkp->opt_xfer_blocks);
3152 unsigned int min_xfer_bytes =
3153 logical_to_bytes(sdp, sdkp->min_xfer_blocks);
3154
3155 if (sdkp->opt_xfer_blocks == 0)
3156 return false;
3157
3158 if (sdkp->opt_xfer_blocks > dev_max) {
3159 sd_first_printk(KERN_WARNING, sdkp,
3160 "Optimal transfer size %u logical blocks " \
3161 "> dev_max (%u logical blocks)\n",
3162 sdkp->opt_xfer_blocks, dev_max);
3163 return false;
3164 }
3165
3166 if (sdkp->opt_xfer_blocks > SD_DEF_XFER_BLOCKS) {
3167 sd_first_printk(KERN_WARNING, sdkp,
3168 "Optimal transfer size %u logical blocks " \
3169 "> sd driver limit (%u logical blocks)\n",
3170 sdkp->opt_xfer_blocks, SD_DEF_XFER_BLOCKS);
3171 return false;
3172 }
3173
3174 if (opt_xfer_bytes < PAGE_SIZE) {
3175 sd_first_printk(KERN_WARNING, sdkp,
3176 "Optimal transfer size %u bytes < " \
3177 "PAGE_SIZE (%u bytes)\n",
3178 opt_xfer_bytes, (unsigned int)PAGE_SIZE);
3179 return false;
3180 }
3181
3182 if (min_xfer_bytes && opt_xfer_bytes % min_xfer_bytes) {
3183 sd_first_printk(KERN_WARNING, sdkp,
3184 "Optimal transfer size %u bytes not a " \
3185 "multiple of preferred minimum block " \
3186 "size (%u bytes)\n",
3187 opt_xfer_bytes, min_xfer_bytes);
3188 return false;
3189 }
3190
3191 if (opt_xfer_bytes & (sdkp->physical_block_size - 1)) {
3192 sd_first_printk(KERN_WARNING, sdkp,
3193 "Optimal transfer size %u bytes not a " \
3194 "multiple of physical block size (%u bytes)\n",
3195 opt_xfer_bytes, sdkp->physical_block_size);
3196 return false;
3197 }
3198
3199 sd_first_printk(KERN_INFO, sdkp, "Optimal transfer size %u bytes\n",
3200 opt_xfer_bytes);
3201 return true;
3202 }
3203
3204
3205
3206
3207
3208
3209 static int sd_revalidate_disk(struct gendisk *disk)
3210 {
3211 struct scsi_disk *sdkp = scsi_disk(disk);
3212 struct scsi_device *sdp = sdkp->device;
3213 struct request_queue *q = sdkp->disk->queue;
3214 sector_t old_capacity = sdkp->capacity;
3215 unsigned char *buffer;
3216 unsigned int dev_max, rw_max;
3217
3218 SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp,
3219 "sd_revalidate_disk\n"));
3220
3221
3222
3223
3224
3225 if (!scsi_device_online(sdp))
3226 goto out;
3227
3228 buffer = kmalloc(SD_BUF_SIZE, GFP_KERNEL);
3229 if (!buffer) {
3230 sd_printk(KERN_WARNING, sdkp, "sd_revalidate_disk: Memory "
3231 "allocation failure.\n");
3232 goto out;
3233 }
3234
3235 sd_spinup_disk(sdkp);
3236
3237
3238
3239
3240
3241 if (sdkp->media_present) {
3242 sd_read_capacity(sdkp, buffer);
3243
3244
3245
3246
3247
3248
3249
3250 blk_queue_flag_clear(QUEUE_FLAG_NONROT, q);
3251 blk_queue_flag_set(QUEUE_FLAG_ADD_RANDOM, q);
3252
3253 if (scsi_device_supports_vpd(sdp)) {
3254 sd_read_block_provisioning(sdkp);
3255 sd_read_block_limits(sdkp);
3256 sd_read_block_characteristics(sdkp);
3257 sd_zbc_read_zones(sdkp, buffer);
3258 sd_read_cpr(sdkp);
3259 }
3260
3261 sd_print_capacity(sdkp, old_capacity);
3262
3263 sd_read_write_protect_flag(sdkp, buffer);
3264 sd_read_cache_type(sdkp, buffer);
3265 sd_read_app_tag_own(sdkp, buffer);
3266 sd_read_write_same(sdkp, buffer);
3267 sd_read_security(sdkp, buffer);
3268 sd_config_protection(sdkp);
3269 }
3270
3271
3272
3273
3274
3275 sd_set_flush_flag(sdkp);
3276
3277
3278 dev_max = sdp->use_16_for_rw ? SD_MAX_XFER_BLOCKS : SD_DEF_XFER_BLOCKS;
3279
3280
3281 dev_max = min_not_zero(dev_max, sdkp->max_xfer_blocks);
3282 q->limits.max_dev_sectors = logical_to_sectors(sdp, dev_max);
3283
3284 if (sd_validate_min_xfer_size(sdkp))
3285 blk_queue_io_min(sdkp->disk->queue,
3286 logical_to_bytes(sdp, sdkp->min_xfer_blocks));
3287 else
3288 blk_queue_io_min(sdkp->disk->queue, 0);
3289
3290 if (sd_validate_opt_xfer_size(sdkp, dev_max)) {
3291 q->limits.io_opt = logical_to_bytes(sdp, sdkp->opt_xfer_blocks);
3292 rw_max = logical_to_sectors(sdp, sdkp->opt_xfer_blocks);
3293 } else {
3294 q->limits.io_opt = 0;
3295 rw_max = min_not_zero(logical_to_sectors(sdp, dev_max),
3296 (sector_t)BLK_DEF_MAX_SECTORS);
3297 }
3298
3299
3300
3301
3302
3303
3304 rw_max = min_not_zero(rw_max, sdp->host->opt_sectors);
3305
3306
3307 rw_max = min(rw_max, queue_max_hw_sectors(q));
3308
3309
3310
3311
3312
3313 if (sdkp->first_scan ||
3314 q->limits.max_sectors > q->limits.max_dev_sectors ||
3315 q->limits.max_sectors > q->limits.max_hw_sectors)
3316 q->limits.max_sectors = rw_max;
3317
3318 sdkp->first_scan = 0;
3319
3320 set_capacity_and_notify(disk, logical_to_sectors(sdp, sdkp->capacity));
3321 sd_config_write_same(sdkp);
3322 kfree(buffer);
3323
3324
3325
3326
3327
3328
3329 if (sd_zbc_revalidate_zones(sdkp))
3330 set_capacity_and_notify(disk, 0);
3331
3332 out:
3333 return 0;
3334 }
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348 static void sd_unlock_native_capacity(struct gendisk *disk)
3349 {
3350 struct scsi_device *sdev = scsi_disk(disk)->device;
3351
3352 if (sdev->host->hostt->unlock_native_capacity)
3353 sdev->host->hostt->unlock_native_capacity(sdev);
3354 }
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378 static int sd_format_disk_name(char *prefix, int index, char *buf, int buflen)
3379 {
3380 const int base = 'z' - 'a' + 1;
3381 char *begin = buf + strlen(prefix);
3382 char *end = buf + buflen;
3383 char *p;
3384 int unit;
3385
3386 p = end - 1;
3387 *p = '\0';
3388 unit = base;
3389 do {
3390 if (p == begin)
3391 return -EINVAL;
3392 *--p = 'a' + (index % unit);
3393 index = (index / unit) - 1;
3394 } while (index >= 0);
3395
3396 memmove(begin, p, end - p);
3397 memcpy(buf, prefix, strlen(prefix));
3398
3399 return 0;
3400 }
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420 static int sd_probe(struct device *dev)
3421 {
3422 struct scsi_device *sdp = to_scsi_device(dev);
3423 struct scsi_disk *sdkp;
3424 struct gendisk *gd;
3425 int index;
3426 int error;
3427
3428 scsi_autopm_get_device(sdp);
3429 error = -ENODEV;
3430 if (sdp->type != TYPE_DISK &&
3431 sdp->type != TYPE_ZBC &&
3432 sdp->type != TYPE_MOD &&
3433 sdp->type != TYPE_RBC)
3434 goto out;
3435
3436 if (!IS_ENABLED(CONFIG_BLK_DEV_ZONED) && sdp->type == TYPE_ZBC) {
3437 sdev_printk(KERN_WARNING, sdp,
3438 "Unsupported ZBC host-managed device.\n");
3439 goto out;
3440 }
3441
3442 SCSI_LOG_HLQUEUE(3, sdev_printk(KERN_INFO, sdp,
3443 "sd_probe\n"));
3444
3445 error = -ENOMEM;
3446 sdkp = kzalloc(sizeof(*sdkp), GFP_KERNEL);
3447 if (!sdkp)
3448 goto out;
3449
3450 gd = blk_mq_alloc_disk_for_queue(sdp->request_queue,
3451 &sd_bio_compl_lkclass);
3452 if (!gd)
3453 goto out_free;
3454
3455 index = ida_alloc(&sd_index_ida, GFP_KERNEL);
3456 if (index < 0) {
3457 sdev_printk(KERN_WARNING, sdp, "sd_probe: memory exhausted.\n");
3458 goto out_put;
3459 }
3460
3461 error = sd_format_disk_name("sd", index, gd->disk_name, DISK_NAME_LEN);
3462 if (error) {
3463 sdev_printk(KERN_WARNING, sdp, "SCSI disk (sd) name length exceeded.\n");
3464 goto out_free_index;
3465 }
3466
3467 sdkp->device = sdp;
3468 sdkp->disk = gd;
3469 sdkp->index = index;
3470 sdkp->max_retries = SD_MAX_RETRIES;
3471 atomic_set(&sdkp->openers, 0);
3472 atomic_set(&sdkp->device->ioerr_cnt, 0);
3473
3474 if (!sdp->request_queue->rq_timeout) {
3475 if (sdp->type != TYPE_MOD)
3476 blk_queue_rq_timeout(sdp->request_queue, SD_TIMEOUT);
3477 else
3478 blk_queue_rq_timeout(sdp->request_queue,
3479 SD_MOD_TIMEOUT);
3480 }
3481
3482 device_initialize(&sdkp->disk_dev);
3483 sdkp->disk_dev.parent = get_device(dev);
3484 sdkp->disk_dev.class = &sd_disk_class;
3485 dev_set_name(&sdkp->disk_dev, "%s", dev_name(dev));
3486
3487 error = device_add(&sdkp->disk_dev);
3488 if (error) {
3489 put_device(&sdkp->disk_dev);
3490 goto out;
3491 }
3492
3493 dev_set_drvdata(dev, sdkp);
3494
3495 gd->major = sd_major((index & 0xf0) >> 4);
3496 gd->first_minor = ((index & 0xf) << 4) | (index & 0xfff00);
3497 gd->minors = SD_MINORS;
3498
3499 gd->fops = &sd_fops;
3500 gd->private_data = sdkp;
3501
3502
3503 sdp->sector_size = 512;
3504 sdkp->capacity = 0;
3505 sdkp->media_present = 1;
3506 sdkp->write_prot = 0;
3507 sdkp->cache_override = 0;
3508 sdkp->WCE = 0;
3509 sdkp->RCD = 0;
3510 sdkp->ATO = 0;
3511 sdkp->first_scan = 1;
3512 sdkp->max_medium_access_timeouts = SD_MAX_MEDIUM_TIMEOUTS;
3513
3514 sd_revalidate_disk(gd);
3515
3516 if (sdp->removable) {
3517 gd->flags |= GENHD_FL_REMOVABLE;
3518 gd->events |= DISK_EVENT_MEDIA_CHANGE;
3519 gd->event_flags = DISK_EVENT_FLAG_POLL | DISK_EVENT_FLAG_UEVENT;
3520 }
3521
3522 blk_pm_runtime_init(sdp->request_queue, dev);
3523 if (sdp->rpm_autosuspend) {
3524 pm_runtime_set_autosuspend_delay(dev,
3525 sdp->host->hostt->rpm_autosuspend_delay);
3526 }
3527
3528 error = device_add_disk(dev, gd, NULL);
3529 if (error) {
3530 put_device(&sdkp->disk_dev);
3531 put_disk(gd);
3532 goto out;
3533 }
3534
3535 if (sdkp->security) {
3536 sdkp->opal_dev = init_opal_dev(sdkp, &sd_sec_submit);
3537 if (sdkp->opal_dev)
3538 sd_printk(KERN_NOTICE, sdkp, "supports TCG Opal\n");
3539 }
3540
3541 sd_printk(KERN_NOTICE, sdkp, "Attached SCSI %sdisk\n",
3542 sdp->removable ? "removable " : "");
3543 scsi_autopm_put_device(sdp);
3544
3545 return 0;
3546
3547 out_free_index:
3548 ida_free(&sd_index_ida, index);
3549 out_put:
3550 put_disk(gd);
3551 out_free:
3552 kfree(sdkp);
3553 out:
3554 scsi_autopm_put_device(sdp);
3555 return error;
3556 }
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569 static int sd_remove(struct device *dev)
3570 {
3571 struct scsi_disk *sdkp = dev_get_drvdata(dev);
3572
3573 scsi_autopm_get_device(sdkp->device);
3574
3575 device_del(&sdkp->disk_dev);
3576 del_gendisk(sdkp->disk);
3577 sd_shutdown(dev);
3578
3579 put_disk(sdkp->disk);
3580 return 0;
3581 }
3582
3583 static void scsi_disk_release(struct device *dev)
3584 {
3585 struct scsi_disk *sdkp = to_scsi_disk(dev);
3586
3587 ida_free(&sd_index_ida, sdkp->index);
3588 sd_zbc_free_zone_info(sdkp);
3589 put_device(&sdkp->device->sdev_gendev);
3590 free_opal_dev(sdkp->opal_dev);
3591
3592 kfree(sdkp);
3593 }
3594
3595 static int sd_start_stop_device(struct scsi_disk *sdkp, int start)
3596 {
3597 unsigned char cmd[6] = { START_STOP };
3598 struct scsi_sense_hdr sshdr;
3599 struct scsi_device *sdp = sdkp->device;
3600 int res;
3601
3602 if (start)
3603 cmd[4] |= 1;
3604
3605 if (sdp->start_stop_pwr_cond)
3606 cmd[4] |= start ? 1 << 4 : 3 << 4;
3607
3608 if (!scsi_device_online(sdp))
3609 return -ENODEV;
3610
3611 res = scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL, &sshdr,
3612 SD_TIMEOUT, sdkp->max_retries, 0, RQF_PM, NULL);
3613 if (res) {
3614 sd_print_result(sdkp, "Start/Stop Unit failed", res);
3615 if (res > 0 && scsi_sense_valid(&sshdr)) {
3616 sd_print_sense_hdr(sdkp, &sshdr);
3617
3618 if (sshdr.asc == 0x3a)
3619 res = 0;
3620 }
3621 }
3622
3623
3624 if (res)
3625 return -EIO;
3626
3627 return 0;
3628 }
3629
3630
3631
3632
3633
3634
3635 static void sd_shutdown(struct device *dev)
3636 {
3637 struct scsi_disk *sdkp = dev_get_drvdata(dev);
3638
3639 if (!sdkp)
3640 return;
3641
3642 if (pm_runtime_suspended(dev))
3643 return;
3644
3645 if (sdkp->WCE && sdkp->media_present) {
3646 sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
3647 sd_sync_cache(sdkp, NULL);
3648 }
3649
3650 if (system_state != SYSTEM_RESTART && sdkp->device->manage_start_stop) {
3651 sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");
3652 sd_start_stop_device(sdkp, 0);
3653 }
3654 }
3655
3656 static int sd_suspend_common(struct device *dev, bool ignore_stop_errors)
3657 {
3658 struct scsi_disk *sdkp = dev_get_drvdata(dev);
3659 struct scsi_sense_hdr sshdr;
3660 int ret = 0;
3661
3662 if (!sdkp)
3663 return 0;
3664
3665 if (sdkp->WCE && sdkp->media_present) {
3666 if (!sdkp->device->silence_suspend)
3667 sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
3668 ret = sd_sync_cache(sdkp, &sshdr);
3669
3670 if (ret) {
3671
3672 if (ret == -ENODEV)
3673 return 0;
3674
3675 if (!scsi_sense_valid(&sshdr) ||
3676 sshdr.sense_key != ILLEGAL_REQUEST)
3677 return ret;
3678
3679
3680
3681
3682
3683
3684 ret = 0;
3685 }
3686 }
3687
3688 if (sdkp->device->manage_start_stop) {
3689 if (!sdkp->device->silence_suspend)
3690 sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");
3691
3692 ret = sd_start_stop_device(sdkp, 0);
3693 if (ignore_stop_errors)
3694 ret = 0;
3695 }
3696
3697 return ret;
3698 }
3699
3700 static int sd_suspend_system(struct device *dev)
3701 {
3702 if (pm_runtime_suspended(dev))
3703 return 0;
3704
3705 return sd_suspend_common(dev, true);
3706 }
3707
3708 static int sd_suspend_runtime(struct device *dev)
3709 {
3710 return sd_suspend_common(dev, false);
3711 }
3712
3713 static int sd_resume(struct device *dev)
3714 {
3715 struct scsi_disk *sdkp = dev_get_drvdata(dev);
3716 int ret;
3717
3718 if (!sdkp)
3719 return 0;
3720
3721 if (!sdkp->device->manage_start_stop)
3722 return 0;
3723
3724 sd_printk(KERN_NOTICE, sdkp, "Starting disk\n");
3725 ret = sd_start_stop_device(sdkp, 1);
3726 if (!ret)
3727 opal_unlock_from_suspend(sdkp->opal_dev);
3728 return ret;
3729 }
3730
3731 static int sd_resume_system(struct device *dev)
3732 {
3733 if (pm_runtime_suspended(dev))
3734 return 0;
3735
3736 return sd_resume(dev);
3737 }
3738
3739 static int sd_resume_runtime(struct device *dev)
3740 {
3741 struct scsi_disk *sdkp = dev_get_drvdata(dev);
3742 struct scsi_device *sdp;
3743
3744 if (!sdkp)
3745 return 0;
3746
3747 sdp = sdkp->device;
3748
3749 if (sdp->ignore_media_change) {
3750
3751 static const u8 cmd[10] = { REQUEST_SENSE };
3752
3753 if (scsi_execute(sdp, cmd, DMA_NONE, NULL, 0, NULL,
3754 NULL, sdp->request_queue->rq_timeout, 1, 0,
3755 RQF_PM, NULL))
3756 sd_printk(KERN_NOTICE, sdkp,
3757 "Failed to clear sense data\n");
3758 }
3759
3760 return sd_resume(dev);
3761 }
3762
3763
3764
3765
3766
3767
3768
3769 static int __init init_sd(void)
3770 {
3771 int majors = 0, i, err;
3772
3773 SCSI_LOG_HLQUEUE(3, printk("init_sd: sd driver entry point\n"));
3774
3775 for (i = 0; i < SD_MAJORS; i++) {
3776 if (__register_blkdev(sd_major(i), "sd", sd_default_probe))
3777 continue;
3778 majors++;
3779 }
3780
3781 if (!majors)
3782 return -ENODEV;
3783
3784 err = class_register(&sd_disk_class);
3785 if (err)
3786 goto err_out;
3787
3788 sd_cdb_cache = kmem_cache_create("sd_ext_cdb", SD_EXT_CDB_SIZE,
3789 0, 0, NULL);
3790 if (!sd_cdb_cache) {
3791 printk(KERN_ERR "sd: can't init extended cdb cache\n");
3792 err = -ENOMEM;
3793 goto err_out_class;
3794 }
3795
3796 sd_page_pool = mempool_create_page_pool(SD_MEMPOOL_SIZE, 0);
3797 if (!sd_page_pool) {
3798 printk(KERN_ERR "sd: can't init discard page pool\n");
3799 err = -ENOMEM;
3800 goto err_out_cache;
3801 }
3802
3803 err = scsi_register_driver(&sd_template.gendrv);
3804 if (err)
3805 goto err_out_driver;
3806
3807 return 0;
3808
3809 err_out_driver:
3810 mempool_destroy(sd_page_pool);
3811
3812 err_out_cache:
3813 kmem_cache_destroy(sd_cdb_cache);
3814
3815 err_out_class:
3816 class_unregister(&sd_disk_class);
3817 err_out:
3818 for (i = 0; i < SD_MAJORS; i++)
3819 unregister_blkdev(sd_major(i), "sd");
3820 return err;
3821 }
3822
3823
3824
3825
3826
3827
3828 static void __exit exit_sd(void)
3829 {
3830 int i;
3831
3832 SCSI_LOG_HLQUEUE(3, printk("exit_sd: exiting sd driver\n"));
3833
3834 scsi_unregister_driver(&sd_template.gendrv);
3835 mempool_destroy(sd_page_pool);
3836 kmem_cache_destroy(sd_cdb_cache);
3837
3838 class_unregister(&sd_disk_class);
3839
3840 for (i = 0; i < SD_MAJORS; i++)
3841 unregister_blkdev(sd_major(i), "sd");
3842 }
3843
3844 module_init(init_sd);
3845 module_exit(exit_sd);
3846
3847 void sd_print_sense_hdr(struct scsi_disk *sdkp, struct scsi_sense_hdr *sshdr)
3848 {
3849 scsi_print_sense_hdr(sdkp->device,
3850 sdkp->disk ? sdkp->disk->disk_name : NULL, sshdr);
3851 }
3852
3853 void sd_print_result(const struct scsi_disk *sdkp, const char *msg, int result)
3854 {
3855 const char *hb_string = scsi_hostbyte_string(result);
3856
3857 if (hb_string)
3858 sd_printk(KERN_INFO, sdkp,
3859 "%s: Result: hostbyte=%s driverbyte=%s\n", msg,
3860 hb_string ? hb_string : "invalid",
3861 "DRIVER_OK");
3862 else
3863 sd_printk(KERN_INFO, sdkp,
3864 "%s: Result: hostbyte=0x%02x driverbyte=%s\n",
3865 msg, host_byte(result), "DRIVER_OK");
3866 }