brintos

brintos / linux-shallow public Read only

0
0
Text · 115.8 KiB · ca4bc0a Raw
4439 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 *      sd.c Copyright (C) 1992 Drew Eckhardt4 *           Copyright (C) 1993, 1994, 1995, 1999 Eric Youngdale5 *6 *      Linux scsi disk driver7 *              Initial versions: Drew Eckhardt8 *              Subsequent revisions: Eric Youngdale9 *	Modification history:10 *       - Drew Eckhardt <drew@colorado.edu> original11 *       - Eric Youngdale <eric@andante.org> add scatter-gather, multiple 12 *         outstanding request, and other enhancements.13 *         Support loadable low-level scsi drivers.14 *       - Jirka Hanika <geo@ff.cuni.cz> support more scsi disks using 15 *         eight major numbers.16 *       - Richard Gooch <rgooch@atnf.csiro.au> support devfs.17 *	 - Torben Mathiasen <tmm@image.dk> Resource allocation fixes in 18 *	   sd_init and cleanups.19 *	 - Alex Davis <letmein@erols.com> Fix problem where partition info20 *	   not being read in sd_open. Fix problem where removable media 21 *	   could be ejected after sd_open.22 *	 - Douglas Gilbert <dgilbert@interlog.com> cleanup for lk 2.5.x23 *	 - Badari Pulavarty <pbadari@us.ibm.com>, Matthew Wilcox 24 *	   <willy@debian.org>, Kurt Garloff <garloff@suse.de>: 25 *	   Support 32k/1M disks.26 *27 *	Logging policy (needs CONFIG_SCSI_LOGGING defined):28 *	 - setting up transfer: SCSI_LOG_HLQUEUE levels 1 and 229 *	 - end of transfer (bh + scsi_lib): SCSI_LOG_HLCOMPLETE level 130 *	 - entering sd_ioctl: SCSI_LOG_IOCTL level 131 *	 - entering other commands: SCSI_LOG_HLQUEUE level 332 *	Note: when the logging level is set by the user, it must be greater33 *	than the level indicated above to trigger output.	34 */35 36#include <linux/bio-integrity.h>37#include <linux/module.h>38#include <linux/fs.h>39#include <linux/kernel.h>40#include <linux/mm.h>41#include <linux/hdreg.h>42#include <linux/errno.h>43#include <linux/idr.h>44#include <linux/interrupt.h>45#include <linux/init.h>46#include <linux/blkdev.h>47#include <linux/blkpg.h>48#include <linux/blk-pm.h>49#include <linux/delay.h>50#include <linux/rw_hint.h>51#include <linux/major.h>52#include <linux/mutex.h>53#include <linux/string_helpers.h>54#include <linux/slab.h>55#include <linux/sed-opal.h>56#include <linux/pm_runtime.h>57#include <linux/pr.h>58#include <linux/t10-pi.h>59#include <linux/uaccess.h>60#include <linux/unaligned.h>61 62#include <scsi/scsi.h>63#include <scsi/scsi_cmnd.h>64#include <scsi/scsi_dbg.h>65#include <scsi/scsi_device.h>66#include <scsi/scsi_devinfo.h>67#include <scsi/scsi_driver.h>68#include <scsi/scsi_eh.h>69#include <scsi/scsi_host.h>70#include <scsi/scsi_ioctl.h>71#include <scsi/scsicam.h>72#include <scsi/scsi_common.h>73 74#include "sd.h"75#include "scsi_priv.h"76#include "scsi_logging.h"77 78MODULE_AUTHOR("Eric Youngdale");79MODULE_DESCRIPTION("SCSI disk (sd) driver");80MODULE_LICENSE("GPL");81 82MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK0_MAJOR);83MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK1_MAJOR);84MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK2_MAJOR);85MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK3_MAJOR);86MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK4_MAJOR);87MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK5_MAJOR);88MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK6_MAJOR);89MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK7_MAJOR);90MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK8_MAJOR);91MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK9_MAJOR);92MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK10_MAJOR);93MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK11_MAJOR);94MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK12_MAJOR);95MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK13_MAJOR);96MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK14_MAJOR);97MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK15_MAJOR);98MODULE_ALIAS_SCSI_DEVICE(TYPE_DISK);99MODULE_ALIAS_SCSI_DEVICE(TYPE_MOD);100MODULE_ALIAS_SCSI_DEVICE(TYPE_RBC);101MODULE_ALIAS_SCSI_DEVICE(TYPE_ZBC);102 103#define SD_MINORS	16104 105static void sd_config_discard(struct scsi_disk *sdkp, struct queue_limits *lim,106		unsigned int mode);107static void sd_config_write_same(struct scsi_disk *sdkp,108		struct queue_limits *lim);109static int  sd_revalidate_disk(struct gendisk *);110static void sd_unlock_native_capacity(struct gendisk *disk);111static void sd_shutdown(struct device *);112static void scsi_disk_release(struct device *cdev);113 114static DEFINE_IDA(sd_index_ida);115 116static mempool_t *sd_page_pool;117static struct lock_class_key sd_bio_compl_lkclass;118 119static const char *sd_cache_types[] = {120	"write through", "none", "write back",121	"write back, no read (daft)"122};123 124static void sd_set_flush_flag(struct scsi_disk *sdkp,125		struct queue_limits *lim)126{127	if (sdkp->WCE) {128		lim->features |= BLK_FEAT_WRITE_CACHE;129		if (sdkp->DPOFUA)130			lim->features |= BLK_FEAT_FUA;131		else132			lim->features &= ~BLK_FEAT_FUA;133	} else {134		lim->features &= ~(BLK_FEAT_WRITE_CACHE | BLK_FEAT_FUA);135	}136}137 138static ssize_t139cache_type_store(struct device *dev, struct device_attribute *attr,140		 const char *buf, size_t count)141{142	int ct, rcd, wce, sp;143	struct scsi_disk *sdkp = to_scsi_disk(dev);144	struct scsi_device *sdp = sdkp->device;145	char buffer[64];146	char *buffer_data;147	struct scsi_mode_data data;148	struct scsi_sense_hdr sshdr;149	static const char temp[] = "temporary ";150	int len, ret;151 152	if (sdp->type != TYPE_DISK && sdp->type != TYPE_ZBC)153		/* no cache control on RBC devices; theoretically they154		 * can do it, but there's probably so many exceptions155		 * it's not worth the risk */156		return -EINVAL;157 158	if (strncmp(buf, temp, sizeof(temp) - 1) == 0) {159		buf += sizeof(temp) - 1;160		sdkp->cache_override = 1;161	} else {162		sdkp->cache_override = 0;163	}164 165	ct = sysfs_match_string(sd_cache_types, buf);166	if (ct < 0)167		return -EINVAL;168 169	rcd = ct & 0x01 ? 1 : 0;170	wce = (ct & 0x02) && !sdkp->write_prot ? 1 : 0;171 172	if (sdkp->cache_override) {173		struct queue_limits lim;174 175		sdkp->WCE = wce;176		sdkp->RCD = rcd;177 178		lim = queue_limits_start_update(sdkp->disk->queue);179		sd_set_flush_flag(sdkp, &lim);180		blk_mq_freeze_queue(sdkp->disk->queue);181		ret = queue_limits_commit_update(sdkp->disk->queue, &lim);182		blk_mq_unfreeze_queue(sdkp->disk->queue);183		if (ret)184			return ret;185		return count;186	}187 188	if (scsi_mode_sense(sdp, 0x08, 8, 0, buffer, sizeof(buffer), SD_TIMEOUT,189			    sdkp->max_retries, &data, NULL))190		return -EINVAL;191	len = min_t(size_t, sizeof(buffer), data.length - data.header_length -192		  data.block_descriptor_length);193	buffer_data = buffer + data.header_length +194		data.block_descriptor_length;195	buffer_data[2] &= ~0x05;196	buffer_data[2] |= wce << 2 | rcd;197	sp = buffer_data[0] & 0x80 ? 1 : 0;198	buffer_data[0] &= ~0x80;199 200	/*201	 * Ensure WP, DPOFUA, and RESERVED fields are cleared in202	 * received mode parameter buffer before doing MODE SELECT.203	 */204	data.device_specific = 0;205 206	ret = scsi_mode_select(sdp, 1, sp, buffer_data, len, SD_TIMEOUT,207			       sdkp->max_retries, &data, &sshdr);208	if (ret) {209		if (ret > 0 && scsi_sense_valid(&sshdr))210			sd_print_sense_hdr(sdkp, &sshdr);211		return -EINVAL;212	}213	sd_revalidate_disk(sdkp->disk);214	return count;215}216 217static ssize_t218manage_start_stop_show(struct device *dev,219		       struct device_attribute *attr, char *buf)220{221	struct scsi_disk *sdkp = to_scsi_disk(dev);222	struct scsi_device *sdp = sdkp->device;223 224	return sysfs_emit(buf, "%u\n",225			  sdp->manage_system_start_stop &&226			  sdp->manage_runtime_start_stop &&227			  sdp->manage_shutdown);228}229static DEVICE_ATTR_RO(manage_start_stop);230 231static ssize_t232manage_system_start_stop_show(struct device *dev,233			      struct device_attribute *attr, char *buf)234{235	struct scsi_disk *sdkp = to_scsi_disk(dev);236	struct scsi_device *sdp = sdkp->device;237 238	return sysfs_emit(buf, "%u\n", sdp->manage_system_start_stop);239}240 241static ssize_t242manage_system_start_stop_store(struct device *dev,243			       struct device_attribute *attr,244			       const char *buf, size_t count)245{246	struct scsi_disk *sdkp = to_scsi_disk(dev);247	struct scsi_device *sdp = sdkp->device;248	bool v;249 250	if (!capable(CAP_SYS_ADMIN))251		return -EACCES;252 253	if (kstrtobool(buf, &v))254		return -EINVAL;255 256	sdp->manage_system_start_stop = v;257 258	return count;259}260static DEVICE_ATTR_RW(manage_system_start_stop);261 262static ssize_t263manage_runtime_start_stop_show(struct device *dev,264			       struct device_attribute *attr, char *buf)265{266	struct scsi_disk *sdkp = to_scsi_disk(dev);267	struct scsi_device *sdp = sdkp->device;268 269	return sysfs_emit(buf, "%u\n", sdp->manage_runtime_start_stop);270}271 272static ssize_t273manage_runtime_start_stop_store(struct device *dev,274				struct device_attribute *attr,275				const char *buf, size_t count)276{277	struct scsi_disk *sdkp = to_scsi_disk(dev);278	struct scsi_device *sdp = sdkp->device;279	bool v;280 281	if (!capable(CAP_SYS_ADMIN))282		return -EACCES;283 284	if (kstrtobool(buf, &v))285		return -EINVAL;286 287	sdp->manage_runtime_start_stop = v;288 289	return count;290}291static DEVICE_ATTR_RW(manage_runtime_start_stop);292 293static ssize_t manage_shutdown_show(struct device *dev,294				    struct device_attribute *attr, char *buf)295{296	struct scsi_disk *sdkp = to_scsi_disk(dev);297	struct scsi_device *sdp = sdkp->device;298 299	return sysfs_emit(buf, "%u\n", sdp->manage_shutdown);300}301 302static ssize_t manage_shutdown_store(struct device *dev,303				     struct device_attribute *attr,304				     const char *buf, size_t count)305{306	struct scsi_disk *sdkp = to_scsi_disk(dev);307	struct scsi_device *sdp = sdkp->device;308	bool v;309 310	if (!capable(CAP_SYS_ADMIN))311		return -EACCES;312 313	if (kstrtobool(buf, &v))314		return -EINVAL;315 316	sdp->manage_shutdown = v;317 318	return count;319}320static DEVICE_ATTR_RW(manage_shutdown);321 322static ssize_t323allow_restart_show(struct device *dev, struct device_attribute *attr, char *buf)324{325	struct scsi_disk *sdkp = to_scsi_disk(dev);326 327	return sprintf(buf, "%u\n", sdkp->device->allow_restart);328}329 330static ssize_t331allow_restart_store(struct device *dev, struct device_attribute *attr,332		    const char *buf, size_t count)333{334	bool v;335	struct scsi_disk *sdkp = to_scsi_disk(dev);336	struct scsi_device *sdp = sdkp->device;337 338	if (!capable(CAP_SYS_ADMIN))339		return -EACCES;340 341	if (sdp->type != TYPE_DISK && sdp->type != TYPE_ZBC)342		return -EINVAL;343 344	if (kstrtobool(buf, &v))345		return -EINVAL;346 347	sdp->allow_restart = v;348 349	return count;350}351static DEVICE_ATTR_RW(allow_restart);352 353static ssize_t354cache_type_show(struct device *dev, struct device_attribute *attr, char *buf)355{356	struct scsi_disk *sdkp = to_scsi_disk(dev);357	int ct = sdkp->RCD + 2*sdkp->WCE;358 359	return sprintf(buf, "%s\n", sd_cache_types[ct]);360}361static DEVICE_ATTR_RW(cache_type);362 363static ssize_t364FUA_show(struct device *dev, struct device_attribute *attr, char *buf)365{366	struct scsi_disk *sdkp = to_scsi_disk(dev);367 368	return sprintf(buf, "%u\n", sdkp->DPOFUA);369}370static DEVICE_ATTR_RO(FUA);371 372static ssize_t373protection_type_show(struct device *dev, struct device_attribute *attr,374		     char *buf)375{376	struct scsi_disk *sdkp = to_scsi_disk(dev);377 378	return sprintf(buf, "%u\n", sdkp->protection_type);379}380 381static ssize_t382protection_type_store(struct device *dev, struct device_attribute *attr,383		      const char *buf, size_t count)384{385	struct scsi_disk *sdkp = to_scsi_disk(dev);386	unsigned int val;387	int err;388 389	if (!capable(CAP_SYS_ADMIN))390		return -EACCES;391 392	err = kstrtouint(buf, 10, &val);393 394	if (err)395		return err;396 397	if (val <= T10_PI_TYPE3_PROTECTION)398		sdkp->protection_type = val;399 400	return count;401}402static DEVICE_ATTR_RW(protection_type);403 404static ssize_t405protection_mode_show(struct device *dev, struct device_attribute *attr,406		     char *buf)407{408	struct scsi_disk *sdkp = to_scsi_disk(dev);409	struct scsi_device *sdp = sdkp->device;410	unsigned int dif, dix;411 412	dif = scsi_host_dif_capable(sdp->host, sdkp->protection_type);413	dix = scsi_host_dix_capable(sdp->host, sdkp->protection_type);414 415	if (!dix && scsi_host_dix_capable(sdp->host, T10_PI_TYPE0_PROTECTION)) {416		dif = 0;417		dix = 1;418	}419 420	if (!dif && !dix)421		return sprintf(buf, "none\n");422 423	return sprintf(buf, "%s%u\n", dix ? "dix" : "dif", dif);424}425static DEVICE_ATTR_RO(protection_mode);426 427static ssize_t428app_tag_own_show(struct device *dev, struct device_attribute *attr, char *buf)429{430	struct scsi_disk *sdkp = to_scsi_disk(dev);431 432	return sprintf(buf, "%u\n", sdkp->ATO);433}434static DEVICE_ATTR_RO(app_tag_own);435 436static ssize_t437thin_provisioning_show(struct device *dev, struct device_attribute *attr,438		       char *buf)439{440	struct scsi_disk *sdkp = to_scsi_disk(dev);441 442	return sprintf(buf, "%u\n", sdkp->lbpme);443}444static DEVICE_ATTR_RO(thin_provisioning);445 446/* sysfs_match_string() requires dense arrays */447static const char *lbp_mode[] = {448	[SD_LBP_FULL]		= "full",449	[SD_LBP_UNMAP]		= "unmap",450	[SD_LBP_WS16]		= "writesame_16",451	[SD_LBP_WS10]		= "writesame_10",452	[SD_LBP_ZERO]		= "writesame_zero",453	[SD_LBP_DISABLE]	= "disabled",454};455 456static ssize_t457provisioning_mode_show(struct device *dev, struct device_attribute *attr,458		       char *buf)459{460	struct scsi_disk *sdkp = to_scsi_disk(dev);461 462	return sprintf(buf, "%s\n", lbp_mode[sdkp->provisioning_mode]);463}464 465static ssize_t466provisioning_mode_store(struct device *dev, struct device_attribute *attr,467			const char *buf, size_t count)468{469	struct scsi_disk *sdkp = to_scsi_disk(dev);470	struct scsi_device *sdp = sdkp->device;471	struct queue_limits lim;472	int mode, err;473 474	if (!capable(CAP_SYS_ADMIN))475		return -EACCES;476 477	if (sdp->type != TYPE_DISK)478		return -EINVAL;479 480	mode = sysfs_match_string(lbp_mode, buf);481	if (mode < 0)482		return -EINVAL;483 484	lim = queue_limits_start_update(sdkp->disk->queue);485	sd_config_discard(sdkp, &lim, mode);486	blk_mq_freeze_queue(sdkp->disk->queue);487	err = queue_limits_commit_update(sdkp->disk->queue, &lim);488	blk_mq_unfreeze_queue(sdkp->disk->queue);489	if (err)490		return err;491	return count;492}493static DEVICE_ATTR_RW(provisioning_mode);494 495/* sysfs_match_string() requires dense arrays */496static const char *zeroing_mode[] = {497	[SD_ZERO_WRITE]		= "write",498	[SD_ZERO_WS]		= "writesame",499	[SD_ZERO_WS16_UNMAP]	= "writesame_16_unmap",500	[SD_ZERO_WS10_UNMAP]	= "writesame_10_unmap",501};502 503static ssize_t504zeroing_mode_show(struct device *dev, struct device_attribute *attr,505		  char *buf)506{507	struct scsi_disk *sdkp = to_scsi_disk(dev);508 509	return sprintf(buf, "%s\n", zeroing_mode[sdkp->zeroing_mode]);510}511 512static ssize_t513zeroing_mode_store(struct device *dev, struct device_attribute *attr,514		   const char *buf, size_t count)515{516	struct scsi_disk *sdkp = to_scsi_disk(dev);517	int mode;518 519	if (!capable(CAP_SYS_ADMIN))520		return -EACCES;521 522	mode = sysfs_match_string(zeroing_mode, buf);523	if (mode < 0)524		return -EINVAL;525 526	sdkp->zeroing_mode = mode;527 528	return count;529}530static DEVICE_ATTR_RW(zeroing_mode);531 532static ssize_t533max_medium_access_timeouts_show(struct device *dev,534				struct device_attribute *attr, char *buf)535{536	struct scsi_disk *sdkp = to_scsi_disk(dev);537 538	return sprintf(buf, "%u\n", sdkp->max_medium_access_timeouts);539}540 541static ssize_t542max_medium_access_timeouts_store(struct device *dev,543				 struct device_attribute *attr, const char *buf,544				 size_t count)545{546	struct scsi_disk *sdkp = to_scsi_disk(dev);547	int err;548 549	if (!capable(CAP_SYS_ADMIN))550		return -EACCES;551 552	err = kstrtouint(buf, 10, &sdkp->max_medium_access_timeouts);553 554	return err ? err : count;555}556static DEVICE_ATTR_RW(max_medium_access_timeouts);557 558static ssize_t559max_write_same_blocks_show(struct device *dev, struct device_attribute *attr,560			   char *buf)561{562	struct scsi_disk *sdkp = to_scsi_disk(dev);563 564	return sprintf(buf, "%u\n", sdkp->max_ws_blocks);565}566 567static ssize_t568max_write_same_blocks_store(struct device *dev, struct device_attribute *attr,569			    const char *buf, size_t count)570{571	struct scsi_disk *sdkp = to_scsi_disk(dev);572	struct scsi_device *sdp = sdkp->device;573	struct queue_limits lim;574	unsigned long max;575	int err;576 577	if (!capable(CAP_SYS_ADMIN))578		return -EACCES;579 580	if (sdp->type != TYPE_DISK && sdp->type != TYPE_ZBC)581		return -EINVAL;582 583	err = kstrtoul(buf, 10, &max);584 585	if (err)586		return err;587 588	if (max == 0)589		sdp->no_write_same = 1;590	else if (max <= SD_MAX_WS16_BLOCKS) {591		sdp->no_write_same = 0;592		sdkp->max_ws_blocks = max;593	}594 595	lim = queue_limits_start_update(sdkp->disk->queue);596	sd_config_write_same(sdkp, &lim);597	blk_mq_freeze_queue(sdkp->disk->queue);598	err = queue_limits_commit_update(sdkp->disk->queue, &lim);599	blk_mq_unfreeze_queue(sdkp->disk->queue);600	if (err)601		return err;602	return count;603}604static DEVICE_ATTR_RW(max_write_same_blocks);605 606static ssize_t607zoned_cap_show(struct device *dev, struct device_attribute *attr, char *buf)608{609	struct scsi_disk *sdkp = to_scsi_disk(dev);610 611	if (sdkp->device->type == TYPE_ZBC)612		return sprintf(buf, "host-managed\n");613	if (sdkp->zoned == 1)614		return sprintf(buf, "host-aware\n");615	if (sdkp->zoned == 2)616		return sprintf(buf, "drive-managed\n");617	return sprintf(buf, "none\n");618}619static DEVICE_ATTR_RO(zoned_cap);620 621static ssize_t622max_retries_store(struct device *dev, struct device_attribute *attr,623		  const char *buf, size_t count)624{625	struct scsi_disk *sdkp = to_scsi_disk(dev);626	struct scsi_device *sdev = sdkp->device;627	int retries, err;628 629	err = kstrtoint(buf, 10, &retries);630	if (err)631		return err;632 633	if (retries == SCSI_CMD_RETRIES_NO_LIMIT || retries <= SD_MAX_RETRIES) {634		sdkp->max_retries = retries;635		return count;636	}637 638	sdev_printk(KERN_ERR, sdev, "max_retries must be between -1 and %d\n",639		    SD_MAX_RETRIES);640	return -EINVAL;641}642 643static ssize_t644max_retries_show(struct device *dev, struct device_attribute *attr,645		 char *buf)646{647	struct scsi_disk *sdkp = to_scsi_disk(dev);648 649	return sprintf(buf, "%d\n", sdkp->max_retries);650}651 652static DEVICE_ATTR_RW(max_retries);653 654static struct attribute *sd_disk_attrs[] = {655	&dev_attr_cache_type.attr,656	&dev_attr_FUA.attr,657	&dev_attr_allow_restart.attr,658	&dev_attr_manage_start_stop.attr,659	&dev_attr_manage_system_start_stop.attr,660	&dev_attr_manage_runtime_start_stop.attr,661	&dev_attr_manage_shutdown.attr,662	&dev_attr_protection_type.attr,663	&dev_attr_protection_mode.attr,664	&dev_attr_app_tag_own.attr,665	&dev_attr_thin_provisioning.attr,666	&dev_attr_provisioning_mode.attr,667	&dev_attr_zeroing_mode.attr,668	&dev_attr_max_write_same_blocks.attr,669	&dev_attr_max_medium_access_timeouts.attr,670	&dev_attr_zoned_cap.attr,671	&dev_attr_max_retries.attr,672	NULL,673};674ATTRIBUTE_GROUPS(sd_disk);675 676static struct class sd_disk_class = {677	.name		= "scsi_disk",678	.dev_release	= scsi_disk_release,679	.dev_groups	= sd_disk_groups,680};681 682/*683 * Don't request a new module, as that could deadlock in multipath684 * environment.685 */686static void sd_default_probe(dev_t devt)687{688}689 690/*691 * Device no to disk mapping:692 * 693 *       major         disc2     disc  p1694 *   |............|.............|....|....| <- dev_t695 *    31        20 19          8 7  4 3  0696 * 697 * Inside a major, we have 16k disks, however mapped non-698 * contiguously. The first 16 disks are for major0, the next699 * ones with major1, ... Disk 256 is for major0 again, disk 272 700 * for major1, ... 701 * As we stay compatible with our numbering scheme, we can reuse 702 * the well-know SCSI majors 8, 65--71, 136--143.703 */704static int sd_major(int major_idx)705{706	switch (major_idx) {707	case 0:708		return SCSI_DISK0_MAJOR;709	case 1 ... 7:710		return SCSI_DISK1_MAJOR + major_idx - 1;711	case 8 ... 15:712		return SCSI_DISK8_MAJOR + major_idx - 8;713	default:714		BUG();715		return 0;	/* shut up gcc */716	}717}718 719#ifdef CONFIG_BLK_SED_OPAL720static int sd_sec_submit(void *data, u16 spsp, u8 secp, void *buffer,721		size_t len, bool send)722{723	struct scsi_disk *sdkp = data;724	struct scsi_device *sdev = sdkp->device;725	u8 cdb[12] = { 0, };726	const struct scsi_exec_args exec_args = {727		.req_flags = BLK_MQ_REQ_PM,728	};729	int ret;730 731	cdb[0] = send ? SECURITY_PROTOCOL_OUT : SECURITY_PROTOCOL_IN;732	cdb[1] = secp;733	put_unaligned_be16(spsp, &cdb[2]);734	put_unaligned_be32(len, &cdb[6]);735 736	ret = scsi_execute_cmd(sdev, cdb, send ? REQ_OP_DRV_OUT : REQ_OP_DRV_IN,737			       buffer, len, SD_TIMEOUT, sdkp->max_retries,738			       &exec_args);739	return ret <= 0 ? ret : -EIO;740}741#endif /* CONFIG_BLK_SED_OPAL */742 743/*744 * Look up the DIX operation based on whether the command is read or745 * write and whether dix and dif are enabled.746 */747static unsigned int sd_prot_op(bool write, bool dix, bool dif)748{749	/* Lookup table: bit 2 (write), bit 1 (dix), bit 0 (dif) */750	static const unsigned int ops[] = {	/* wrt dix dif */751		SCSI_PROT_NORMAL,		/*  0	0   0  */752		SCSI_PROT_READ_STRIP,		/*  0	0   1  */753		SCSI_PROT_READ_INSERT,		/*  0	1   0  */754		SCSI_PROT_READ_PASS,		/*  0	1   1  */755		SCSI_PROT_NORMAL,		/*  1	0   0  */756		SCSI_PROT_WRITE_INSERT,		/*  1	0   1  */757		SCSI_PROT_WRITE_STRIP,		/*  1	1   0  */758		SCSI_PROT_WRITE_PASS,		/*  1	1   1  */759	};760 761	return ops[write << 2 | dix << 1 | dif];762}763 764/*765 * Returns a mask of the protection flags that are valid for a given DIX766 * operation.767 */768static unsigned int sd_prot_flag_mask(unsigned int prot_op)769{770	static const unsigned int flag_mask[] = {771		[SCSI_PROT_NORMAL]		= 0,772 773		[SCSI_PROT_READ_STRIP]		= SCSI_PROT_TRANSFER_PI |774						  SCSI_PROT_GUARD_CHECK |775						  SCSI_PROT_REF_CHECK |776						  SCSI_PROT_REF_INCREMENT,777 778		[SCSI_PROT_READ_INSERT]		= SCSI_PROT_REF_INCREMENT |779						  SCSI_PROT_IP_CHECKSUM,780 781		[SCSI_PROT_READ_PASS]		= SCSI_PROT_TRANSFER_PI |782						  SCSI_PROT_GUARD_CHECK |783						  SCSI_PROT_REF_CHECK |784						  SCSI_PROT_REF_INCREMENT |785						  SCSI_PROT_IP_CHECKSUM,786 787		[SCSI_PROT_WRITE_INSERT]	= SCSI_PROT_TRANSFER_PI |788						  SCSI_PROT_REF_INCREMENT,789 790		[SCSI_PROT_WRITE_STRIP]		= SCSI_PROT_GUARD_CHECK |791						  SCSI_PROT_REF_CHECK |792						  SCSI_PROT_REF_INCREMENT |793						  SCSI_PROT_IP_CHECKSUM,794 795		[SCSI_PROT_WRITE_PASS]		= SCSI_PROT_TRANSFER_PI |796						  SCSI_PROT_GUARD_CHECK |797						  SCSI_PROT_REF_CHECK |798						  SCSI_PROT_REF_INCREMENT |799						  SCSI_PROT_IP_CHECKSUM,800	};801 802	return flag_mask[prot_op];803}804 805static unsigned char sd_setup_protect_cmnd(struct scsi_cmnd *scmd,806					   unsigned int dix, unsigned int dif)807{808	struct request *rq = scsi_cmd_to_rq(scmd);809	struct bio *bio = rq->bio;810	unsigned int prot_op = sd_prot_op(rq_data_dir(rq), dix, dif);811	unsigned int protect = 0;812 813	if (dix) {				/* DIX Type 0, 1, 2, 3 */814		if (bio_integrity_flagged(bio, BIP_IP_CHECKSUM))815			scmd->prot_flags |= SCSI_PROT_IP_CHECKSUM;816 817		if (bio_integrity_flagged(bio, BIP_CTRL_NOCHECK) == false)818			scmd->prot_flags |= SCSI_PROT_GUARD_CHECK;819	}820 821	if (dif != T10_PI_TYPE3_PROTECTION) {	/* DIX/DIF Type 0, 1, 2 */822		scmd->prot_flags |= SCSI_PROT_REF_INCREMENT;823 824		if (bio_integrity_flagged(bio, BIP_CTRL_NOCHECK) == false)825			scmd->prot_flags |= SCSI_PROT_REF_CHECK;826	}827 828	if (dif) {				/* DIX/DIF Type 1, 2, 3 */829		scmd->prot_flags |= SCSI_PROT_TRANSFER_PI;830 831		if (bio_integrity_flagged(bio, BIP_DISK_NOCHECK))832			protect = 3 << 5;	/* Disable target PI checking */833		else834			protect = 1 << 5;	/* Enable target PI checking */835	}836 837	scsi_set_prot_op(scmd, prot_op);838	scsi_set_prot_type(scmd, dif);839	scmd->prot_flags &= sd_prot_flag_mask(prot_op);840 841	return protect;842}843 844static void sd_disable_discard(struct scsi_disk *sdkp)845{846	sdkp->provisioning_mode = SD_LBP_DISABLE;847	blk_queue_disable_discard(sdkp->disk->queue);848}849 850static void sd_config_discard(struct scsi_disk *sdkp, struct queue_limits *lim,851		unsigned int mode)852{853	unsigned int logical_block_size = sdkp->device->sector_size;854	unsigned int max_blocks = 0;855 856	lim->discard_alignment = sdkp->unmap_alignment * logical_block_size;857	lim->discard_granularity = max(sdkp->physical_block_size,858			sdkp->unmap_granularity * logical_block_size);859	sdkp->provisioning_mode = mode;860 861	switch (mode) {862 863	case SD_LBP_FULL:864	case SD_LBP_DISABLE:865		break;866 867	case SD_LBP_UNMAP:868		max_blocks = min_not_zero(sdkp->max_unmap_blocks,869					  (u32)SD_MAX_WS16_BLOCKS);870		break;871 872	case SD_LBP_WS16:873		if (sdkp->device->unmap_limit_for_ws)874			max_blocks = sdkp->max_unmap_blocks;875		else876			max_blocks = sdkp->max_ws_blocks;877 878		max_blocks = min_not_zero(max_blocks, (u32)SD_MAX_WS16_BLOCKS);879		break;880 881	case SD_LBP_WS10:882		if (sdkp->device->unmap_limit_for_ws)883			max_blocks = sdkp->max_unmap_blocks;884		else885			max_blocks = sdkp->max_ws_blocks;886 887		max_blocks = min_not_zero(max_blocks, (u32)SD_MAX_WS10_BLOCKS);888		break;889 890	case SD_LBP_ZERO:891		max_blocks = min_not_zero(sdkp->max_ws_blocks,892					  (u32)SD_MAX_WS10_BLOCKS);893		break;894	}895 896	lim->max_hw_discard_sectors = max_blocks *897		(logical_block_size >> SECTOR_SHIFT);898}899 900static void *sd_set_special_bvec(struct request *rq, unsigned int data_len)901{902	struct page *page;903 904	page = mempool_alloc(sd_page_pool, GFP_ATOMIC);905	if (!page)906		return NULL;907	clear_highpage(page);908	bvec_set_page(&rq->special_vec, page, data_len, 0);909	rq->rq_flags |= RQF_SPECIAL_PAYLOAD;910	return bvec_virt(&rq->special_vec);911}912 913static blk_status_t sd_setup_unmap_cmnd(struct scsi_cmnd *cmd)914{915	struct scsi_device *sdp = cmd->device;916	struct request *rq = scsi_cmd_to_rq(cmd);917	struct scsi_disk *sdkp = scsi_disk(rq->q->disk);918	u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));919	u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));920	unsigned int data_len = 24;921	char *buf;922 923	buf = sd_set_special_bvec(rq, data_len);924	if (!buf)925		return BLK_STS_RESOURCE;926 927	cmd->cmd_len = 10;928	cmd->cmnd[0] = UNMAP;929	cmd->cmnd[8] = 24;930 931	put_unaligned_be16(6 + 16, &buf[0]);932	put_unaligned_be16(16, &buf[2]);933	put_unaligned_be64(lba, &buf[8]);934	put_unaligned_be32(nr_blocks, &buf[16]);935 936	cmd->allowed = sdkp->max_retries;937	cmd->transfersize = data_len;938	rq->timeout = SD_TIMEOUT;939 940	return scsi_alloc_sgtables(cmd);941}942 943static void sd_config_atomic(struct scsi_disk *sdkp, struct queue_limits *lim)944{945	unsigned int logical_block_size = sdkp->device->sector_size,946		physical_block_size_sectors, max_atomic, unit_min, unit_max;947 948	if ((!sdkp->max_atomic && !sdkp->max_atomic_with_boundary) ||949	    sdkp->protection_type == T10_PI_TYPE2_PROTECTION)950		return;951 952	physical_block_size_sectors = sdkp->physical_block_size /953					sdkp->device->sector_size;954 955	unit_min = rounddown_pow_of_two(sdkp->atomic_granularity ?956					sdkp->atomic_granularity :957					physical_block_size_sectors);958 959	/*960	 * Only use atomic boundary when we have the odd scenario of961	 * sdkp->max_atomic == 0, which the spec does permit.962	 */963	if (sdkp->max_atomic) {964		max_atomic = sdkp->max_atomic;965		unit_max = rounddown_pow_of_two(sdkp->max_atomic);966		sdkp->use_atomic_write_boundary = 0;967	} else {968		max_atomic = sdkp->max_atomic_with_boundary;969		unit_max = rounddown_pow_of_two(sdkp->max_atomic_boundary);970		sdkp->use_atomic_write_boundary = 1;971	}972 973	/*974	 * Ensure compliance with granularity and alignment. For now, keep it975	 * simple and just don't support atomic writes for values mismatched976	 * with max_{boundary}atomic, physical block size, and977	 * atomic_granularity itself.978	 *979	 * We're really being distrustful by checking unit_max also...980	 */981	if (sdkp->atomic_granularity > 1) {982		if (unit_min > 1 && unit_min % sdkp->atomic_granularity)983			return;984		if (unit_max > 1 && unit_max % sdkp->atomic_granularity)985			return;986	}987 988	if (sdkp->atomic_alignment > 1) {989		if (unit_min > 1 && unit_min % sdkp->atomic_alignment)990			return;991		if (unit_max > 1 && unit_max % sdkp->atomic_alignment)992			return;993	}994 995	lim->atomic_write_hw_max = max_atomic * logical_block_size;996	lim->atomic_write_hw_boundary = 0;997	lim->atomic_write_hw_unit_min = unit_min * logical_block_size;998	lim->atomic_write_hw_unit_max = unit_max * logical_block_size;999}1000 1001static blk_status_t sd_setup_write_same16_cmnd(struct scsi_cmnd *cmd,1002		bool unmap)1003{1004	struct scsi_device *sdp = cmd->device;1005	struct request *rq = scsi_cmd_to_rq(cmd);1006	struct scsi_disk *sdkp = scsi_disk(rq->q->disk);1007	u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));1008	u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));1009	u32 data_len = sdp->sector_size;1010 1011	if (!sd_set_special_bvec(rq, data_len))1012		return BLK_STS_RESOURCE;1013 1014	cmd->cmd_len = 16;1015	cmd->cmnd[0] = WRITE_SAME_16;1016	if (unmap)1017		cmd->cmnd[1] = 0x8; /* UNMAP */1018	put_unaligned_be64(lba, &cmd->cmnd[2]);1019	put_unaligned_be32(nr_blocks, &cmd->cmnd[10]);1020 1021	cmd->allowed = sdkp->max_retries;1022	cmd->transfersize = data_len;1023	rq->timeout = unmap ? SD_TIMEOUT : SD_WRITE_SAME_TIMEOUT;1024 1025	return scsi_alloc_sgtables(cmd);1026}1027 1028static blk_status_t sd_setup_write_same10_cmnd(struct scsi_cmnd *cmd,1029		bool unmap)1030{1031	struct scsi_device *sdp = cmd->device;1032	struct request *rq = scsi_cmd_to_rq(cmd);1033	struct scsi_disk *sdkp = scsi_disk(rq->q->disk);1034	u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));1035	u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));1036	u32 data_len = sdp->sector_size;1037 1038	if (!sd_set_special_bvec(rq, data_len))1039		return BLK_STS_RESOURCE;1040 1041	cmd->cmd_len = 10;1042	cmd->cmnd[0] = WRITE_SAME;1043	if (unmap)1044		cmd->cmnd[1] = 0x8; /* UNMAP */1045	put_unaligned_be32(lba, &cmd->cmnd[2]);1046	put_unaligned_be16(nr_blocks, &cmd->cmnd[7]);1047 1048	cmd->allowed = sdkp->max_retries;1049	cmd->transfersize = data_len;1050	rq->timeout = unmap ? SD_TIMEOUT : SD_WRITE_SAME_TIMEOUT;1051 1052	return scsi_alloc_sgtables(cmd);1053}1054 1055static blk_status_t sd_setup_write_zeroes_cmnd(struct scsi_cmnd *cmd)1056{1057	struct request *rq = scsi_cmd_to_rq(cmd);1058	struct scsi_device *sdp = cmd->device;1059	struct scsi_disk *sdkp = scsi_disk(rq->q->disk);1060	u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));1061	u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));1062 1063	if (!(rq->cmd_flags & REQ_NOUNMAP)) {1064		switch (sdkp->zeroing_mode) {1065		case SD_ZERO_WS16_UNMAP:1066			return sd_setup_write_same16_cmnd(cmd, true);1067		case SD_ZERO_WS10_UNMAP:1068			return sd_setup_write_same10_cmnd(cmd, true);1069		}1070	}1071 1072	if (sdp->no_write_same) {1073		rq->rq_flags |= RQF_QUIET;1074		return BLK_STS_TARGET;1075	}1076 1077	if (sdkp->ws16 || lba > 0xffffffff || nr_blocks > 0xffff)1078		return sd_setup_write_same16_cmnd(cmd, false);1079 1080	return sd_setup_write_same10_cmnd(cmd, false);1081}1082 1083static void sd_disable_write_same(struct scsi_disk *sdkp)1084{1085	sdkp->device->no_write_same = 1;1086	sdkp->max_ws_blocks = 0;1087	blk_queue_disable_write_zeroes(sdkp->disk->queue);1088}1089 1090static void sd_config_write_same(struct scsi_disk *sdkp,1091		struct queue_limits *lim)1092{1093	unsigned int logical_block_size = sdkp->device->sector_size;1094 1095	if (sdkp->device->no_write_same) {1096		sdkp->max_ws_blocks = 0;1097		goto out;1098	}1099 1100	/* Some devices can not handle block counts above 0xffff despite1101	 * supporting WRITE SAME(16). Consequently we default to 64k1102	 * blocks per I/O unless the device explicitly advertises a1103	 * bigger limit.1104	 */1105	if (sdkp->max_ws_blocks > SD_MAX_WS10_BLOCKS)1106		sdkp->max_ws_blocks = min_not_zero(sdkp->max_ws_blocks,1107						   (u32)SD_MAX_WS16_BLOCKS);1108	else if (sdkp->ws16 || sdkp->ws10 || sdkp->device->no_report_opcodes)1109		sdkp->max_ws_blocks = min_not_zero(sdkp->max_ws_blocks,1110						   (u32)SD_MAX_WS10_BLOCKS);1111	else {1112		sdkp->device->no_write_same = 1;1113		sdkp->max_ws_blocks = 0;1114	}1115 1116	if (sdkp->lbprz && sdkp->lbpws)1117		sdkp->zeroing_mode = SD_ZERO_WS16_UNMAP;1118	else if (sdkp->lbprz && sdkp->lbpws10)1119		sdkp->zeroing_mode = SD_ZERO_WS10_UNMAP;1120	else if (sdkp->max_ws_blocks)1121		sdkp->zeroing_mode = SD_ZERO_WS;1122	else1123		sdkp->zeroing_mode = SD_ZERO_WRITE;1124 1125	if (sdkp->max_ws_blocks &&1126	    sdkp->physical_block_size > logical_block_size) {1127		/*1128		 * Reporting a maximum number of blocks that is not aligned1129		 * on the device physical size would cause a large write same1130		 * request to be split into physically unaligned chunks by1131		 * __blkdev_issue_write_zeroes() even if the caller of this1132		 * functions took care to align the large request. So make sure1133		 * the maximum reported is aligned to the device physical block1134		 * size. This is only an optional optimization for regular1135		 * disks, but this is mandatory to avoid failure of large write1136		 * same requests directed at sequential write required zones of1137		 * host-managed ZBC disks.1138		 */1139		sdkp->max_ws_blocks =1140			round_down(sdkp->max_ws_blocks,1141				   bytes_to_logical(sdkp->device,1142						    sdkp->physical_block_size));1143	}1144 1145out:1146	lim->max_write_zeroes_sectors =1147		sdkp->max_ws_blocks * (logical_block_size >> SECTOR_SHIFT);1148}1149 1150static blk_status_t sd_setup_flush_cmnd(struct scsi_cmnd *cmd)1151{1152	struct request *rq = scsi_cmd_to_rq(cmd);1153	struct scsi_disk *sdkp = scsi_disk(rq->q->disk);1154 1155	/* flush requests don't perform I/O, zero the S/G table */1156	memset(&cmd->sdb, 0, sizeof(cmd->sdb));1157 1158	if (cmd->device->use_16_for_sync) {1159		cmd->cmnd[0] = SYNCHRONIZE_CACHE_16;1160		cmd->cmd_len = 16;1161	} else {1162		cmd->cmnd[0] = SYNCHRONIZE_CACHE;1163		cmd->cmd_len = 10;1164	}1165	cmd->transfersize = 0;1166	cmd->allowed = sdkp->max_retries;1167 1168	rq->timeout = rq->q->rq_timeout * SD_FLUSH_TIMEOUT_MULTIPLIER;1169	return BLK_STS_OK;1170}1171 1172/**1173 * sd_group_number() - Compute the GROUP NUMBER field1174 * @cmd: SCSI command for which to compute the value of the six-bit GROUP NUMBER1175 *	field.1176 *1177 * From SBC-5 r05 (https://www.t10.org/cgi-bin/ac.pl?t=f&f=sbc5r05.pdf):1178 * 0: no relative lifetime.1179 * 1: shortest relative lifetime.1180 * 2: second shortest relative lifetime.1181 * 3 - 0x3d: intermediate relative lifetimes.1182 * 0x3e: second longest relative lifetime.1183 * 0x3f: longest relative lifetime.1184 */1185static u8 sd_group_number(struct scsi_cmnd *cmd)1186{1187	const struct request *rq = scsi_cmd_to_rq(cmd);1188	struct scsi_disk *sdkp = scsi_disk(rq->q->disk);1189 1190	if (!sdkp->rscs)1191		return 0;1192 1193	return min3((u32)rq->write_hint, (u32)sdkp->permanent_stream_count,1194		    0x3fu);1195}1196 1197static blk_status_t sd_setup_rw32_cmnd(struct scsi_cmnd *cmd, bool write,1198				       sector_t lba, unsigned int nr_blocks,1199				       unsigned char flags, unsigned int dld)1200{1201	cmd->cmd_len = SD_EXT_CDB_SIZE;1202	cmd->cmnd[0]  = VARIABLE_LENGTH_CMD;1203	cmd->cmnd[6]  = sd_group_number(cmd);1204	cmd->cmnd[7]  = 0x18; /* Additional CDB len */1205	cmd->cmnd[9]  = write ? WRITE_32 : READ_32;1206	cmd->cmnd[10] = flags;1207	cmd->cmnd[11] = dld & 0x07;1208	put_unaligned_be64(lba, &cmd->cmnd[12]);1209	put_unaligned_be32(lba, &cmd->cmnd[20]); /* Expected Indirect LBA */1210	put_unaligned_be32(nr_blocks, &cmd->cmnd[28]);1211 1212	return BLK_STS_OK;1213}1214 1215static blk_status_t sd_setup_rw16_cmnd(struct scsi_cmnd *cmd, bool write,1216				       sector_t lba, unsigned int nr_blocks,1217				       unsigned char flags, unsigned int dld)1218{1219	cmd->cmd_len  = 16;1220	cmd->cmnd[0]  = write ? WRITE_16 : READ_16;1221	cmd->cmnd[1]  = flags | ((dld >> 2) & 0x01);1222	cmd->cmnd[14] = ((dld & 0x03) << 6) | sd_group_number(cmd);1223	cmd->cmnd[15] = 0;1224	put_unaligned_be64(lba, &cmd->cmnd[2]);1225	put_unaligned_be32(nr_blocks, &cmd->cmnd[10]);1226 1227	return BLK_STS_OK;1228}1229 1230static blk_status_t sd_setup_rw10_cmnd(struct scsi_cmnd *cmd, bool write,1231				       sector_t lba, unsigned int nr_blocks,1232				       unsigned char flags)1233{1234	cmd->cmd_len = 10;1235	cmd->cmnd[0] = write ? WRITE_10 : READ_10;1236	cmd->cmnd[1] = flags;1237	cmd->cmnd[6] = sd_group_number(cmd);1238	cmd->cmnd[9] = 0;1239	put_unaligned_be32(lba, &cmd->cmnd[2]);1240	put_unaligned_be16(nr_blocks, &cmd->cmnd[7]);1241 1242	return BLK_STS_OK;1243}1244 1245static blk_status_t sd_setup_rw6_cmnd(struct scsi_cmnd *cmd, bool write,1246				      sector_t lba, unsigned int nr_blocks,1247				      unsigned char flags)1248{1249	/* Avoid that 0 blocks gets translated into 256 blocks. */1250	if (WARN_ON_ONCE(nr_blocks == 0))1251		return BLK_STS_IOERR;1252 1253	if (unlikely(flags & 0x8)) {1254		/*1255		 * This happens only if this drive failed 10byte rw1256		 * command with ILLEGAL_REQUEST during operation and1257		 * thus turned off use_10_for_rw.1258		 */1259		scmd_printk(KERN_ERR, cmd, "FUA write on READ/WRITE(6) drive\n");1260		return BLK_STS_IOERR;1261	}1262 1263	cmd->cmd_len = 6;1264	cmd->cmnd[0] = write ? WRITE_6 : READ_6;1265	cmd->cmnd[1] = (lba >> 16) & 0x1f;1266	cmd->cmnd[2] = (lba >> 8) & 0xff;1267	cmd->cmnd[3] = lba & 0xff;1268	cmd->cmnd[4] = nr_blocks;1269	cmd->cmnd[5] = 0;1270 1271	return BLK_STS_OK;1272}1273 1274/*1275 * Check if a command has a duration limit set. If it does, and the target1276 * device supports CDL and the feature is enabled, return the limit1277 * descriptor index to use. Return 0 (no limit) otherwise.1278 */1279static int sd_cdl_dld(struct scsi_disk *sdkp, struct scsi_cmnd *scmd)1280{1281	struct scsi_device *sdp = sdkp->device;1282	int hint;1283 1284	if (!sdp->cdl_supported || !sdp->cdl_enable)1285		return 0;1286 1287	/*1288	 * Use "no limit" if the request ioprio does not specify a duration1289	 * limit hint.1290	 */1291	hint = IOPRIO_PRIO_HINT(req_get_ioprio(scsi_cmd_to_rq(scmd)));1292	if (hint < IOPRIO_HINT_DEV_DURATION_LIMIT_1 ||1293	    hint > IOPRIO_HINT_DEV_DURATION_LIMIT_7)1294		return 0;1295 1296	return (hint - IOPRIO_HINT_DEV_DURATION_LIMIT_1) + 1;1297}1298 1299static blk_status_t sd_setup_atomic_cmnd(struct scsi_cmnd *cmd,1300					sector_t lba, unsigned int nr_blocks,1301					bool boundary, unsigned char flags)1302{1303	cmd->cmd_len  = 16;1304	cmd->cmnd[0]  = WRITE_ATOMIC_16;1305	cmd->cmnd[1]  = flags;1306	put_unaligned_be64(lba, &cmd->cmnd[2]);1307	put_unaligned_be16(nr_blocks, &cmd->cmnd[12]);1308	if (boundary)1309		put_unaligned_be16(nr_blocks, &cmd->cmnd[10]);1310	else1311		put_unaligned_be16(0, &cmd->cmnd[10]);1312	put_unaligned_be16(nr_blocks, &cmd->cmnd[12]);1313	cmd->cmnd[14] = 0;1314	cmd->cmnd[15] = 0;1315 1316	return BLK_STS_OK;1317}1318 1319static blk_status_t sd_setup_read_write_cmnd(struct scsi_cmnd *cmd)1320{1321	struct request *rq = scsi_cmd_to_rq(cmd);1322	struct scsi_device *sdp = cmd->device;1323	struct scsi_disk *sdkp = scsi_disk(rq->q->disk);1324	sector_t lba = sectors_to_logical(sdp, blk_rq_pos(rq));1325	sector_t threshold;1326	unsigned int nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));1327	unsigned int mask = logical_to_sectors(sdp, 1) - 1;1328	bool write = rq_data_dir(rq) == WRITE;1329	unsigned char protect, fua;1330	unsigned int dld;1331	blk_status_t ret;1332	unsigned int dif;1333	bool dix;1334 1335	ret = scsi_alloc_sgtables(cmd);1336	if (ret != BLK_STS_OK)1337		return ret;1338 1339	ret = BLK_STS_IOERR;1340	if (!scsi_device_online(sdp) || sdp->changed) {1341		scmd_printk(KERN_ERR, cmd, "device offline or changed\n");1342		goto fail;1343	}1344 1345	if (blk_rq_pos(rq) + blk_rq_sectors(rq) > get_capacity(rq->q->disk)) {1346		scmd_printk(KERN_ERR, cmd, "access beyond end of device\n");1347		goto fail;1348	}1349 1350	if ((blk_rq_pos(rq) & mask) || (blk_rq_sectors(rq) & mask)) {1351		scmd_printk(KERN_ERR, cmd, "request not aligned to the logical block size\n");1352		goto fail;1353	}1354 1355	/*1356	 * Some SD card readers can't handle accesses which touch the1357	 * last one or two logical blocks. Split accesses as needed.1358	 */1359	threshold = sdkp->capacity - SD_LAST_BUGGY_SECTORS;1360 1361	if (unlikely(sdp->last_sector_bug && lba + nr_blocks > threshold)) {1362		if (lba < threshold) {1363			/* Access up to the threshold but not beyond */1364			nr_blocks = threshold - lba;1365		} else {1366			/* Access only a single logical block */1367			nr_blocks = 1;1368		}1369	}1370 1371	fua = rq->cmd_flags & REQ_FUA ? 0x8 : 0;1372	dix = scsi_prot_sg_count(cmd);1373	dif = scsi_host_dif_capable(cmd->device->host, sdkp->protection_type);1374	dld = sd_cdl_dld(sdkp, cmd);1375 1376	if (dif || dix)1377		protect = sd_setup_protect_cmnd(cmd, dix, dif);1378	else1379		protect = 0;1380 1381	if (protect && sdkp->protection_type == T10_PI_TYPE2_PROTECTION) {1382		ret = sd_setup_rw32_cmnd(cmd, write, lba, nr_blocks,1383					 protect | fua, dld);1384	} else if (rq->cmd_flags & REQ_ATOMIC) {1385		ret = sd_setup_atomic_cmnd(cmd, lba, nr_blocks,1386				sdkp->use_atomic_write_boundary,1387				protect | fua);1388	} else if (sdp->use_16_for_rw || (nr_blocks > 0xffff)) {1389		ret = sd_setup_rw16_cmnd(cmd, write, lba, nr_blocks,1390					 protect | fua, dld);1391	} else if ((nr_blocks > 0xff) || (lba > 0x1fffff) ||1392		   sdp->use_10_for_rw || protect || rq->write_hint) {1393		ret = sd_setup_rw10_cmnd(cmd, write, lba, nr_blocks,1394					 protect | fua);1395	} else {1396		ret = sd_setup_rw6_cmnd(cmd, write, lba, nr_blocks,1397					protect | fua);1398	}1399 1400	if (unlikely(ret != BLK_STS_OK))1401		goto fail;1402 1403	/*1404	 * We shouldn't disconnect in the middle of a sector, so with a dumb1405	 * host adapter, it's safe to assume that we can at least transfer1406	 * this many bytes between each connect / disconnect.1407	 */1408	cmd->transfersize = sdp->sector_size;1409	cmd->underflow = nr_blocks << 9;1410	cmd->allowed = sdkp->max_retries;1411	cmd->sdb.length = nr_blocks * sdp->sector_size;1412 1413	SCSI_LOG_HLQUEUE(1,1414			 scmd_printk(KERN_INFO, cmd,1415				     "%s: block=%llu, count=%d\n", __func__,1416				     (unsigned long long)blk_rq_pos(rq),1417				     blk_rq_sectors(rq)));1418	SCSI_LOG_HLQUEUE(2,1419			 scmd_printk(KERN_INFO, cmd,1420				     "%s %d/%u 512 byte blocks.\n",1421				     write ? "writing" : "reading", nr_blocks,1422				     blk_rq_sectors(rq)));1423 1424	/*1425	 * This indicates that the command is ready from our end to be queued.1426	 */1427	return BLK_STS_OK;1428fail:1429	scsi_free_sgtables(cmd);1430	return ret;1431}1432 1433static blk_status_t sd_init_command(struct scsi_cmnd *cmd)1434{1435	struct request *rq = scsi_cmd_to_rq(cmd);1436 1437	switch (req_op(rq)) {1438	case REQ_OP_DISCARD:1439		switch (scsi_disk(rq->q->disk)->provisioning_mode) {1440		case SD_LBP_UNMAP:1441			return sd_setup_unmap_cmnd(cmd);1442		case SD_LBP_WS16:1443			return sd_setup_write_same16_cmnd(cmd, true);1444		case SD_LBP_WS10:1445			return sd_setup_write_same10_cmnd(cmd, true);1446		case SD_LBP_ZERO:1447			return sd_setup_write_same10_cmnd(cmd, false);1448		default:1449			return BLK_STS_TARGET;1450		}1451	case REQ_OP_WRITE_ZEROES:1452		return sd_setup_write_zeroes_cmnd(cmd);1453	case REQ_OP_FLUSH:1454		return sd_setup_flush_cmnd(cmd);1455	case REQ_OP_READ:1456	case REQ_OP_WRITE:1457		return sd_setup_read_write_cmnd(cmd);1458	case REQ_OP_ZONE_RESET:1459		return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_RESET_WRITE_POINTER,1460						   false);1461	case REQ_OP_ZONE_RESET_ALL:1462		return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_RESET_WRITE_POINTER,1463						   true);1464	case REQ_OP_ZONE_OPEN:1465		return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_OPEN_ZONE, false);1466	case REQ_OP_ZONE_CLOSE:1467		return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_CLOSE_ZONE, false);1468	case REQ_OP_ZONE_FINISH:1469		return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_FINISH_ZONE, false);1470	default:1471		WARN_ON_ONCE(1);1472		return BLK_STS_NOTSUPP;1473	}1474}1475 1476static void sd_uninit_command(struct scsi_cmnd *SCpnt)1477{1478	struct request *rq = scsi_cmd_to_rq(SCpnt);1479 1480	if (rq->rq_flags & RQF_SPECIAL_PAYLOAD)1481		mempool_free(rq->special_vec.bv_page, sd_page_pool);1482}1483 1484static bool sd_need_revalidate(struct gendisk *disk, struct scsi_disk *sdkp)1485{1486	if (sdkp->device->removable || sdkp->write_prot) {1487		if (disk_check_media_change(disk))1488			return true;1489	}1490 1491	/*1492	 * Force a full rescan after ioctl(BLKRRPART).  While the disk state has1493	 * nothing to do with partitions, BLKRRPART is used to force a full1494	 * revalidate after things like a format for historical reasons.1495	 */1496	return test_bit(GD_NEED_PART_SCAN, &disk->state);1497}1498 1499/**1500 *	sd_open - open a scsi disk device1501 *	@disk: disk to open1502 *	@mode: open mode1503 *1504 *	Returns 0 if successful. Returns a negated errno value in case 1505 *	of error.1506 *1507 *	Note: This can be called from a user context (e.g. fsck(1) )1508 *	or from within the kernel (e.g. as a result of a mount(1) ).1509 *	In the latter case @inode and @filp carry an abridged amount1510 *	of information as noted above.1511 *1512 *	Locking: called with disk->open_mutex held.1513 **/1514static int sd_open(struct gendisk *disk, blk_mode_t mode)1515{1516	struct scsi_disk *sdkp = scsi_disk(disk);1517	struct scsi_device *sdev = sdkp->device;1518	int retval;1519 1520	if (scsi_device_get(sdev))1521		return -ENXIO;1522 1523	SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_open\n"));1524 1525	/*1526	 * If the device is in error recovery, wait until it is done.1527	 * If the device is offline, then disallow any access to it.1528	 */1529	retval = -ENXIO;1530	if (!scsi_block_when_processing_errors(sdev))1531		goto error_out;1532 1533	if (sd_need_revalidate(disk, sdkp))1534		sd_revalidate_disk(disk);1535 1536	/*1537	 * If the drive is empty, just let the open fail.1538	 */1539	retval = -ENOMEDIUM;1540	if (sdev->removable && !sdkp->media_present &&1541	    !(mode & BLK_OPEN_NDELAY))1542		goto error_out;1543 1544	/*1545	 * If the device has the write protect tab set, have the open fail1546	 * if the user expects to be able to write to the thing.1547	 */1548	retval = -EROFS;1549	if (sdkp->write_prot && (mode & BLK_OPEN_WRITE))1550		goto error_out;1551 1552	/*1553	 * It is possible that the disk changing stuff resulted in1554	 * the device being taken offline.  If this is the case,1555	 * report this to the user, and don't pretend that the1556	 * open actually succeeded.1557	 */1558	retval = -ENXIO;1559	if (!scsi_device_online(sdev))1560		goto error_out;1561 1562	if ((atomic_inc_return(&sdkp->openers) == 1) && sdev->removable) {1563		if (scsi_block_when_processing_errors(sdev))1564			scsi_set_medium_removal(sdev, SCSI_REMOVAL_PREVENT);1565	}1566 1567	return 0;1568 1569error_out:1570	scsi_device_put(sdev);1571	return retval;	1572}1573 1574/**1575 *	sd_release - invoked when the (last) close(2) is called on this1576 *	scsi disk.1577 *	@disk: disk to release1578 *1579 *	Returns 0. 1580 *1581 *	Note: may block (uninterruptible) if error recovery is underway1582 *	on this disk.1583 *1584 *	Locking: called with disk->open_mutex held.1585 **/1586static void sd_release(struct gendisk *disk)1587{1588	struct scsi_disk *sdkp = scsi_disk(disk);1589	struct scsi_device *sdev = sdkp->device;1590 1591	SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_release\n"));1592 1593	if (atomic_dec_return(&sdkp->openers) == 0 && sdev->removable) {1594		if (scsi_block_when_processing_errors(sdev))1595			scsi_set_medium_removal(sdev, SCSI_REMOVAL_ALLOW);1596	}1597 1598	scsi_device_put(sdev);1599}1600 1601static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo)1602{1603	struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);1604	struct scsi_device *sdp = sdkp->device;1605	struct Scsi_Host *host = sdp->host;1606	sector_t capacity = logical_to_sectors(sdp, sdkp->capacity);1607	int diskinfo[4];1608 1609	/* default to most commonly used values */1610	diskinfo[0] = 0x40;	/* 1 << 6 */1611	diskinfo[1] = 0x20;	/* 1 << 5 */1612	diskinfo[2] = capacity >> 11;1613 1614	/* override with calculated, extended default, or driver values */1615	if (host->hostt->bios_param)1616		host->hostt->bios_param(sdp, bdev, capacity, diskinfo);1617	else1618		scsicam_bios_param(bdev, capacity, diskinfo);1619 1620	geo->heads = diskinfo[0];1621	geo->sectors = diskinfo[1];1622	geo->cylinders = diskinfo[2];1623	return 0;1624}1625 1626/**1627 *	sd_ioctl - process an ioctl1628 *	@bdev: target block device1629 *	@mode: open mode1630 *	@cmd: ioctl command number1631 *	@arg: this is third argument given to ioctl(2) system call.1632 *	Often contains a pointer.1633 *1634 *	Returns 0 if successful (some ioctls return positive numbers on1635 *	success as well). Returns a negated errno value in case of error.1636 *1637 *	Note: most ioctls are forward onto the block subsystem or further1638 *	down in the scsi subsystem.1639 **/1640static int sd_ioctl(struct block_device *bdev, blk_mode_t mode,1641		    unsigned int cmd, unsigned long arg)1642{1643	struct gendisk *disk = bdev->bd_disk;1644	struct scsi_disk *sdkp = scsi_disk(disk);1645	struct scsi_device *sdp = sdkp->device;1646	void __user *p = (void __user *)arg;1647	int error;1648    1649	SCSI_LOG_IOCTL(1, sd_printk(KERN_INFO, sdkp, "sd_ioctl: disk=%s, "1650				    "cmd=0x%x\n", disk->disk_name, cmd));1651 1652	if (bdev_is_partition(bdev) && !capable(CAP_SYS_RAWIO))1653		return -ENOIOCTLCMD;1654 1655	/*1656	 * If we are in the middle of error recovery, don't let anyone1657	 * else try and use this device.  Also, if error recovery fails, it1658	 * may try and take the device offline, in which case all further1659	 * access to the device is prohibited.1660	 */1661	error = scsi_ioctl_block_when_processing_errors(sdp, cmd,1662			(mode & BLK_OPEN_NDELAY));1663	if (error)1664		return error;1665 1666	if (is_sed_ioctl(cmd))1667		return sed_ioctl(sdkp->opal_dev, cmd, p);1668	return scsi_ioctl(sdp, mode & BLK_OPEN_WRITE, cmd, p);1669}1670 1671static void set_media_not_present(struct scsi_disk *sdkp)1672{1673	if (sdkp->media_present)1674		sdkp->device->changed = 1;1675 1676	if (sdkp->device->removable) {1677		sdkp->media_present = 0;1678		sdkp->capacity = 0;1679	}1680}1681 1682static int media_not_present(struct scsi_disk *sdkp,1683			     struct scsi_sense_hdr *sshdr)1684{1685	if (!scsi_sense_valid(sshdr))1686		return 0;1687 1688	/* not invoked for commands that could return deferred errors */1689	switch (sshdr->sense_key) {1690	case UNIT_ATTENTION:1691	case NOT_READY:1692		/* medium not present */1693		if (sshdr->asc == 0x3A) {1694			set_media_not_present(sdkp);1695			return 1;1696		}1697	}1698	return 0;1699}1700 1701/**1702 *	sd_check_events - check media events1703 *	@disk: kernel device descriptor1704 *	@clearing: disk events currently being cleared1705 *1706 *	Returns mask of DISK_EVENT_*.1707 *1708 *	Note: this function is invoked from the block subsystem.1709 **/1710static unsigned int sd_check_events(struct gendisk *disk, unsigned int clearing)1711{1712	struct scsi_disk *sdkp = disk->private_data;1713	struct scsi_device *sdp;1714	int retval;1715	bool disk_changed;1716 1717	if (!sdkp)1718		return 0;1719 1720	sdp = sdkp->device;1721	SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_check_events\n"));1722 1723	/*1724	 * If the device is offline, don't send any commands - just pretend as1725	 * if the command failed.  If the device ever comes back online, we1726	 * can deal with it then.  It is only because of unrecoverable errors1727	 * that we would ever take a device offline in the first place.1728	 */1729	if (!scsi_device_online(sdp)) {1730		set_media_not_present(sdkp);1731		goto out;1732	}1733 1734	/*1735	 * Using TEST_UNIT_READY enables differentiation between drive with1736	 * no cartridge loaded - NOT READY, drive with changed cartridge -1737	 * UNIT ATTENTION, or with same cartridge - GOOD STATUS.1738	 *1739	 * Drives that auto spin down. eg iomega jaz 1G, will be started1740	 * by sd_spinup_disk() from sd_revalidate_disk(), which happens whenever1741	 * sd_revalidate() is called.1742	 */1743	if (scsi_block_when_processing_errors(sdp)) {1744		struct scsi_sense_hdr sshdr = { 0, };1745 1746		retval = scsi_test_unit_ready(sdp, SD_TIMEOUT, sdkp->max_retries,1747					      &sshdr);1748 1749		/* failed to execute TUR, assume media not present */1750		if (retval < 0 || host_byte(retval)) {1751			set_media_not_present(sdkp);1752			goto out;1753		}1754 1755		if (media_not_present(sdkp, &sshdr))1756			goto out;1757	}1758 1759	/*1760	 * For removable scsi disk we have to recognise the presence1761	 * of a disk in the drive.1762	 */1763	if (!sdkp->media_present)1764		sdp->changed = 1;1765	sdkp->media_present = 1;1766out:1767	/*1768	 * sdp->changed is set under the following conditions:1769	 *1770	 *	Medium present state has changed in either direction.1771	 *	Device has indicated UNIT_ATTENTION.1772	 */1773	disk_changed = sdp->changed;1774	sdp->changed = 0;1775	return disk_changed ? DISK_EVENT_MEDIA_CHANGE : 0;1776}1777 1778static int sd_sync_cache(struct scsi_disk *sdkp)1779{1780	int res;1781	struct scsi_device *sdp = sdkp->device;1782	const int timeout = sdp->request_queue->rq_timeout1783		* SD_FLUSH_TIMEOUT_MULTIPLIER;1784	/* Leave the rest of the command zero to indicate flush everything. */1785	const unsigned char cmd[16] = { sdp->use_16_for_sync ?1786				SYNCHRONIZE_CACHE_16 : SYNCHRONIZE_CACHE };1787	struct scsi_sense_hdr sshdr;1788	struct scsi_failure failure_defs[] = {1789		{1790			.allowed = 3,1791			.result = SCMD_FAILURE_RESULT_ANY,1792		},1793		{}1794	};1795	struct scsi_failures failures = {1796		.failure_definitions = failure_defs,1797	};1798	const struct scsi_exec_args exec_args = {1799		.req_flags = BLK_MQ_REQ_PM,1800		.sshdr = &sshdr,1801		.failures = &failures,1802	};1803 1804	if (!scsi_device_online(sdp))1805		return -ENODEV;1806 1807	res = scsi_execute_cmd(sdp, cmd, REQ_OP_DRV_IN, NULL, 0, timeout,1808			       sdkp->max_retries, &exec_args);1809	if (res) {1810		sd_print_result(sdkp, "Synchronize Cache(10) failed", res);1811 1812		if (res < 0)1813			return res;1814 1815		if (scsi_status_is_check_condition(res) &&1816		    scsi_sense_valid(&sshdr)) {1817			sd_print_sense_hdr(sdkp, &sshdr);1818 1819			/* we need to evaluate the error return  */1820			if (sshdr.asc == 0x3a ||	/* medium not present */1821			    sshdr.asc == 0x20 ||	/* invalid command */1822			    (sshdr.asc == 0x74 && sshdr.ascq == 0x71))	/* drive is password locked */1823				/* this is no error here */1824				return 0;1825 1826			/*1827			 * If a format is in progress or if the drive does not1828			 * support sync, there is not much we can do because1829			 * this is called during shutdown or suspend so just1830			 * return success so those operations can proceed.1831			 */1832			if ((sshdr.asc == 0x04 && sshdr.ascq == 0x04) ||1833			    sshdr.sense_key == ILLEGAL_REQUEST)1834				return 0;1835		}1836 1837		switch (host_byte(res)) {1838		/* ignore errors due to racing a disconnection */1839		case DID_BAD_TARGET:1840		case DID_NO_CONNECT:1841			return 0;1842		/* signal the upper layer it might try again */1843		case DID_BUS_BUSY:1844		case DID_IMM_RETRY:1845		case DID_REQUEUE:1846		case DID_SOFT_ERROR:1847			return -EBUSY;1848		default:1849			return -EIO;1850		}1851	}1852	return 0;1853}1854 1855static void sd_rescan(struct device *dev)1856{1857	struct scsi_disk *sdkp = dev_get_drvdata(dev);1858 1859	sd_revalidate_disk(sdkp->disk);1860}1861 1862static int sd_get_unique_id(struct gendisk *disk, u8 id[16],1863		enum blk_unique_id type)1864{1865	struct scsi_device *sdev = scsi_disk(disk)->device;1866	const struct scsi_vpd *vpd;1867	const unsigned char *d;1868	int ret = -ENXIO, len;1869 1870	rcu_read_lock();1871	vpd = rcu_dereference(sdev->vpd_pg83);1872	if (!vpd)1873		goto out_unlock;1874 1875	ret = -EINVAL;1876	for (d = vpd->data + 4; d < vpd->data + vpd->len; d += d[3] + 4) {1877		/* we only care about designators with LU association */1878		if (((d[1] >> 4) & 0x3) != 0x00)1879			continue;1880		if ((d[1] & 0xf) != type)1881			continue;1882 1883		/*1884		 * Only exit early if a 16-byte descriptor was found.  Otherwise1885		 * keep looking as one with more entropy might still show up.1886		 */1887		len = d[3];1888		if (len != 8 && len != 12 && len != 16)1889			continue;1890		ret = len;1891		memcpy(id, d + 4, len);1892		if (len == 16)1893			break;1894	}1895out_unlock:1896	rcu_read_unlock();1897	return ret;1898}1899 1900static int sd_scsi_to_pr_err(struct scsi_sense_hdr *sshdr, int result)1901{1902	switch (host_byte(result)) {1903	case DID_TRANSPORT_MARGINAL:1904	case DID_TRANSPORT_DISRUPTED:1905	case DID_BUS_BUSY:1906		return PR_STS_RETRY_PATH_FAILURE;1907	case DID_NO_CONNECT:1908		return PR_STS_PATH_FAILED;1909	case DID_TRANSPORT_FAILFAST:1910		return PR_STS_PATH_FAST_FAILED;1911	}1912 1913	switch (status_byte(result)) {1914	case SAM_STAT_RESERVATION_CONFLICT:1915		return PR_STS_RESERVATION_CONFLICT;1916	case SAM_STAT_CHECK_CONDITION:1917		if (!scsi_sense_valid(sshdr))1918			return PR_STS_IOERR;1919 1920		if (sshdr->sense_key == ILLEGAL_REQUEST &&1921		    (sshdr->asc == 0x26 || sshdr->asc == 0x24))1922			return -EINVAL;1923 1924		fallthrough;1925	default:1926		return PR_STS_IOERR;1927	}1928}1929 1930static int sd_pr_in_command(struct block_device *bdev, u8 sa,1931			    unsigned char *data, int data_len)1932{1933	struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);1934	struct scsi_device *sdev = sdkp->device;1935	struct scsi_sense_hdr sshdr;1936	u8 cmd[10] = { PERSISTENT_RESERVE_IN, sa };1937	struct scsi_failure failure_defs[] = {1938		{1939			.sense = UNIT_ATTENTION,1940			.asc = SCMD_FAILURE_ASC_ANY,1941			.ascq = SCMD_FAILURE_ASCQ_ANY,1942			.allowed = 5,1943			.result = SAM_STAT_CHECK_CONDITION,1944		},1945		{}1946	};1947	struct scsi_failures failures = {1948		.failure_definitions = failure_defs,1949	};1950	const struct scsi_exec_args exec_args = {1951		.sshdr = &sshdr,1952		.failures = &failures,1953	};1954	int result;1955 1956	put_unaligned_be16(data_len, &cmd[7]);1957 1958	result = scsi_execute_cmd(sdev, cmd, REQ_OP_DRV_IN, data, data_len,1959				  SD_TIMEOUT, sdkp->max_retries, &exec_args);1960	if (scsi_status_is_check_condition(result) &&1961	    scsi_sense_valid(&sshdr)) {1962		sdev_printk(KERN_INFO, sdev, "PR command failed: %d\n", result);1963		scsi_print_sense_hdr(sdev, NULL, &sshdr);1964	}1965 1966	if (result <= 0)1967		return result;1968 1969	return sd_scsi_to_pr_err(&sshdr, result);1970}1971 1972static int sd_pr_read_keys(struct block_device *bdev, struct pr_keys *keys_info)1973{1974	int result, i, data_offset, num_copy_keys;1975	u32 num_keys = keys_info->num_keys;1976	int data_len = num_keys * 8 + 8;1977	u8 *data;1978 1979	data = kzalloc(data_len, GFP_KERNEL);1980	if (!data)1981		return -ENOMEM;1982 1983	result = sd_pr_in_command(bdev, READ_KEYS, data, data_len);1984	if (result)1985		goto free_data;1986 1987	keys_info->generation = get_unaligned_be32(&data[0]);1988	keys_info->num_keys = get_unaligned_be32(&data[4]) / 8;1989 1990	data_offset = 8;1991	num_copy_keys = min(num_keys, keys_info->num_keys);1992 1993	for (i = 0; i < num_copy_keys; i++) {1994		keys_info->keys[i] = get_unaligned_be64(&data[data_offset]);1995		data_offset += 8;1996	}1997 1998free_data:1999	kfree(data);2000	return result;2001}2002 2003static int sd_pr_read_reservation(struct block_device *bdev,2004				  struct pr_held_reservation *rsv)2005{2006	struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);2007	struct scsi_device *sdev = sdkp->device;2008	u8 data[24] = { };2009	int result, len;2010 2011	result = sd_pr_in_command(bdev, READ_RESERVATION, data, sizeof(data));2012	if (result)2013		return result;2014 2015	len = get_unaligned_be32(&data[4]);2016	if (!len)2017		return 0;2018 2019	/* Make sure we have at least the key and type */2020	if (len < 14) {2021		sdev_printk(KERN_INFO, sdev,2022			    "READ RESERVATION failed due to short return buffer of %d bytes\n",2023			    len);2024		return -EINVAL;2025	}2026 2027	rsv->generation = get_unaligned_be32(&data[0]);2028	rsv->key = get_unaligned_be64(&data[8]);2029	rsv->type = scsi_pr_type_to_block(data[21] & 0x0f);2030	return 0;2031}2032 2033static int sd_pr_out_command(struct block_device *bdev, u8 sa, u64 key,2034			     u64 sa_key, enum scsi_pr_type type, u8 flags)2035{2036	struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);2037	struct scsi_device *sdev = sdkp->device;2038	struct scsi_sense_hdr sshdr;2039	struct scsi_failure failure_defs[] = {2040		{2041			.sense = UNIT_ATTENTION,2042			.asc = SCMD_FAILURE_ASC_ANY,2043			.ascq = SCMD_FAILURE_ASCQ_ANY,2044			.allowed = 5,2045			.result = SAM_STAT_CHECK_CONDITION,2046		},2047		{}2048	};2049	struct scsi_failures failures = {2050		.failure_definitions = failure_defs,2051	};2052	const struct scsi_exec_args exec_args = {2053		.sshdr = &sshdr,2054		.failures = &failures,2055	};2056	int result;2057	u8 cmd[16] = { 0, };2058	u8 data[24] = { 0, };2059 2060	cmd[0] = PERSISTENT_RESERVE_OUT;2061	cmd[1] = sa;2062	cmd[2] = type;2063	put_unaligned_be32(sizeof(data), &cmd[5]);2064 2065	put_unaligned_be64(key, &data[0]);2066	put_unaligned_be64(sa_key, &data[8]);2067	data[20] = flags;2068 2069	result = scsi_execute_cmd(sdev, cmd, REQ_OP_DRV_OUT, &data,2070				  sizeof(data), SD_TIMEOUT, sdkp->max_retries,2071				  &exec_args);2072 2073	if (scsi_status_is_check_condition(result) &&2074	    scsi_sense_valid(&sshdr)) {2075		sdev_printk(KERN_INFO, sdev, "PR command failed: %d\n", result);2076		scsi_print_sense_hdr(sdev, NULL, &sshdr);2077	}2078 2079	if (result <= 0)2080		return result;2081 2082	return sd_scsi_to_pr_err(&sshdr, result);2083}2084 2085static int sd_pr_register(struct block_device *bdev, u64 old_key, u64 new_key,2086		u32 flags)2087{2088	if (flags & ~PR_FL_IGNORE_KEY)2089		return -EOPNOTSUPP;2090	return sd_pr_out_command(bdev, (flags & PR_FL_IGNORE_KEY) ? 0x06 : 0x00,2091			old_key, new_key, 0,2092			(1 << 0) /* APTPL */);2093}2094 2095static int sd_pr_reserve(struct block_device *bdev, u64 key, enum pr_type type,2096		u32 flags)2097{2098	if (flags)2099		return -EOPNOTSUPP;2100	return sd_pr_out_command(bdev, 0x01, key, 0,2101				 block_pr_type_to_scsi(type), 0);2102}2103 2104static int sd_pr_release(struct block_device *bdev, u64 key, enum pr_type type)2105{2106	return sd_pr_out_command(bdev, 0x02, key, 0,2107				 block_pr_type_to_scsi(type), 0);2108}2109 2110static int sd_pr_preempt(struct block_device *bdev, u64 old_key, u64 new_key,2111		enum pr_type type, bool abort)2112{2113	return sd_pr_out_command(bdev, abort ? 0x05 : 0x04, old_key, new_key,2114				 block_pr_type_to_scsi(type), 0);2115}2116 2117static int sd_pr_clear(struct block_device *bdev, u64 key)2118{2119	return sd_pr_out_command(bdev, 0x03, key, 0, 0, 0);2120}2121 2122static const struct pr_ops sd_pr_ops = {2123	.pr_register	= sd_pr_register,2124	.pr_reserve	= sd_pr_reserve,2125	.pr_release	= sd_pr_release,2126	.pr_preempt	= sd_pr_preempt,2127	.pr_clear	= sd_pr_clear,2128	.pr_read_keys	= sd_pr_read_keys,2129	.pr_read_reservation = sd_pr_read_reservation,2130};2131 2132static void scsi_disk_free_disk(struct gendisk *disk)2133{2134	struct scsi_disk *sdkp = scsi_disk(disk);2135 2136	put_device(&sdkp->disk_dev);2137}2138 2139static const struct block_device_operations sd_fops = {2140	.owner			= THIS_MODULE,2141	.open			= sd_open,2142	.release		= sd_release,2143	.ioctl			= sd_ioctl,2144	.getgeo			= sd_getgeo,2145	.compat_ioctl		= blkdev_compat_ptr_ioctl,2146	.check_events		= sd_check_events,2147	.unlock_native_capacity	= sd_unlock_native_capacity,2148	.report_zones		= sd_zbc_report_zones,2149	.get_unique_id		= sd_get_unique_id,2150	.free_disk		= scsi_disk_free_disk,2151	.pr_ops			= &sd_pr_ops,2152};2153 2154/**2155 *	sd_eh_reset - reset error handling callback2156 *	@scmd:		sd-issued command that has failed2157 *2158 *	This function is called by the SCSI midlayer before starting2159 *	SCSI EH. When counting medium access failures we have to be2160 *	careful to register it only only once per device and SCSI EH run;2161 *	there might be several timed out commands which will cause the2162 *	'max_medium_access_timeouts' counter to trigger after the first2163 *	SCSI EH run already and set the device to offline.2164 *	So this function resets the internal counter before starting SCSI EH.2165 **/2166static void sd_eh_reset(struct scsi_cmnd *scmd)2167{2168	struct scsi_disk *sdkp = scsi_disk(scsi_cmd_to_rq(scmd)->q->disk);2169 2170	/* New SCSI EH run, reset gate variable */2171	sdkp->ignore_medium_access_errors = false;2172}2173 2174/**2175 *	sd_eh_action - error handling callback2176 *	@scmd:		sd-issued command that has failed2177 *	@eh_disp:	The recovery disposition suggested by the midlayer2178 *2179 *	This function is called by the SCSI midlayer upon completion of an2180 *	error test command (currently TEST UNIT READY). The result of sending2181 *	the eh command is passed in eh_disp.  We're looking for devices that2182 *	fail medium access commands but are OK with non access commands like2183 *	test unit ready (so wrongly see the device as having a successful2184 *	recovery)2185 **/2186static int sd_eh_action(struct scsi_cmnd *scmd, int eh_disp)2187{2188	struct scsi_disk *sdkp = scsi_disk(scsi_cmd_to_rq(scmd)->q->disk);2189	struct scsi_device *sdev = scmd->device;2190 2191	if (!scsi_device_online(sdev) ||2192	    !scsi_medium_access_command(scmd) ||2193	    host_byte(scmd->result) != DID_TIME_OUT ||2194	    eh_disp != SUCCESS)2195		return eh_disp;2196 2197	/*2198	 * The device has timed out executing a medium access command.2199	 * However, the TEST UNIT READY command sent during error2200	 * handling completed successfully. Either the device is in the2201	 * process of recovering or has it suffered an internal failure2202	 * that prevents access to the storage medium.2203	 */2204	if (!sdkp->ignore_medium_access_errors) {2205		sdkp->medium_access_timed_out++;2206		sdkp->ignore_medium_access_errors = true;2207	}2208 2209	/*2210	 * If the device keeps failing read/write commands but TEST UNIT2211	 * READY always completes successfully we assume that medium2212	 * access is no longer possible and take the device offline.2213	 */2214	if (sdkp->medium_access_timed_out >= sdkp->max_medium_access_timeouts) {2215		scmd_printk(KERN_ERR, scmd,2216			    "Medium access timeout failure. Offlining disk!\n");2217		mutex_lock(&sdev->state_mutex);2218		scsi_device_set_state(sdev, SDEV_OFFLINE);2219		mutex_unlock(&sdev->state_mutex);2220 2221		return SUCCESS;2222	}2223 2224	return eh_disp;2225}2226 2227static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)2228{2229	struct request *req = scsi_cmd_to_rq(scmd);2230	struct scsi_device *sdev = scmd->device;2231	unsigned int transferred, good_bytes;2232	u64 start_lba, end_lba, bad_lba;2233 2234	/*2235	 * Some commands have a payload smaller than the device logical2236	 * block size (e.g. INQUIRY on a 4K disk).2237	 */2238	if (scsi_bufflen(scmd) <= sdev->sector_size)2239		return 0;2240 2241	/* Check if we have a 'bad_lba' information */2242	if (!scsi_get_sense_info_fld(scmd->sense_buffer,2243				     SCSI_SENSE_BUFFERSIZE,2244				     &bad_lba))2245		return 0;2246 2247	/*2248	 * If the bad lba was reported incorrectly, we have no idea where2249	 * the error is.2250	 */2251	start_lba = sectors_to_logical(sdev, blk_rq_pos(req));2252	end_lba = start_lba + bytes_to_logical(sdev, scsi_bufflen(scmd));2253	if (bad_lba < start_lba || bad_lba >= end_lba)2254		return 0;2255 2256	/*2257	 * resid is optional but mostly filled in.  When it's unused,2258	 * its value is zero, so we assume the whole buffer transferred2259	 */2260	transferred = scsi_bufflen(scmd) - scsi_get_resid(scmd);2261 2262	/* This computation should always be done in terms of the2263	 * resolution of the device's medium.2264	 */2265	good_bytes = logical_to_bytes(sdev, bad_lba - start_lba);2266 2267	return min(good_bytes, transferred);2268}2269 2270/**2271 *	sd_done - bottom half handler: called when the lower level2272 *	driver has completed (successfully or otherwise) a scsi command.2273 *	@SCpnt: mid-level's per command structure.2274 *2275 *	Note: potentially run from within an ISR. Must not block.2276 **/2277static int sd_done(struct scsi_cmnd *SCpnt)2278{2279	int result = SCpnt->result;2280	unsigned int good_bytes = result ? 0 : scsi_bufflen(SCpnt);2281	unsigned int sector_size = SCpnt->device->sector_size;2282	unsigned int resid;2283	struct scsi_sense_hdr sshdr;2284	struct request *req = scsi_cmd_to_rq(SCpnt);2285	struct scsi_disk *sdkp = scsi_disk(req->q->disk);2286	int sense_valid = 0;2287	int sense_deferred = 0;2288 2289	switch (req_op(req)) {2290	case REQ_OP_DISCARD:2291	case REQ_OP_WRITE_ZEROES:2292	case REQ_OP_ZONE_RESET:2293	case REQ_OP_ZONE_RESET_ALL:2294	case REQ_OP_ZONE_OPEN:2295	case REQ_OP_ZONE_CLOSE:2296	case REQ_OP_ZONE_FINISH:2297		if (!result) {2298			good_bytes = blk_rq_bytes(req);2299			scsi_set_resid(SCpnt, 0);2300		} else {2301			good_bytes = 0;2302			scsi_set_resid(SCpnt, blk_rq_bytes(req));2303		}2304		break;2305	default:2306		/*2307		 * In case of bogus fw or device, we could end up having2308		 * an unaligned partial completion. Check this here and force2309		 * alignment.2310		 */2311		resid = scsi_get_resid(SCpnt);2312		if (resid & (sector_size - 1)) {2313			sd_printk(KERN_INFO, sdkp,2314				"Unaligned partial completion (resid=%u, sector_sz=%u)\n",2315				resid, sector_size);2316			scsi_print_command(SCpnt);2317			resid = min(scsi_bufflen(SCpnt),2318				    round_up(resid, sector_size));2319			scsi_set_resid(SCpnt, resid);2320		}2321	}2322 2323	if (result) {2324		sense_valid = scsi_command_normalize_sense(SCpnt, &sshdr);2325		if (sense_valid)2326			sense_deferred = scsi_sense_is_deferred(&sshdr);2327	}2328	sdkp->medium_access_timed_out = 0;2329 2330	if (!scsi_status_is_check_condition(result) &&2331	    (!sense_valid || sense_deferred))2332		goto out;2333 2334	switch (sshdr.sense_key) {2335	case HARDWARE_ERROR:2336	case MEDIUM_ERROR:2337		good_bytes = sd_completed_bytes(SCpnt);2338		break;2339	case RECOVERED_ERROR:2340		good_bytes = scsi_bufflen(SCpnt);2341		break;2342	case NO_SENSE:2343		/* This indicates a false check condition, so ignore it.  An2344		 * unknown amount of data was transferred so treat it as an2345		 * error.2346		 */2347		SCpnt->result = 0;2348		memset(SCpnt->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);2349		break;2350	case ABORTED_COMMAND:2351		if (sshdr.asc == 0x10)  /* DIF: Target detected corruption */2352			good_bytes = sd_completed_bytes(SCpnt);2353		break;2354	case ILLEGAL_REQUEST:2355		switch (sshdr.asc) {2356		case 0x10:	/* DIX: Host detected corruption */2357			good_bytes = sd_completed_bytes(SCpnt);2358			break;2359		case 0x20:	/* INVALID COMMAND OPCODE */2360		case 0x24:	/* INVALID FIELD IN CDB */2361			switch (SCpnt->cmnd[0]) {2362			case UNMAP:2363				sd_disable_discard(sdkp);2364				break;2365			case WRITE_SAME_16:2366			case WRITE_SAME:2367				if (SCpnt->cmnd[1] & 8) { /* UNMAP */2368					sd_disable_discard(sdkp);2369				} else {2370					sd_disable_write_same(sdkp);2371					req->rq_flags |= RQF_QUIET;2372				}2373				break;2374			}2375		}2376		break;2377	default:2378		break;2379	}2380 2381 out:2382	if (sdkp->device->type == TYPE_ZBC)2383		good_bytes = sd_zbc_complete(SCpnt, good_bytes, &sshdr);2384 2385	SCSI_LOG_HLCOMPLETE(1, scmd_printk(KERN_INFO, SCpnt,2386					   "sd_done: completed %d of %d bytes\n",2387					   good_bytes, scsi_bufflen(SCpnt)));2388 2389	return good_bytes;2390}2391 2392/*2393 * spinup disk - called only in sd_revalidate_disk()2394 */2395static void2396sd_spinup_disk(struct scsi_disk *sdkp)2397{2398	static const u8 cmd[10] = { TEST_UNIT_READY };2399	unsigned long spintime_expire = 0;2400	int spintime, sense_valid = 0;2401	unsigned int the_result;2402	struct scsi_sense_hdr sshdr;2403	struct scsi_failure failure_defs[] = {2404		/* Do not retry Medium Not Present */2405		{2406			.sense = UNIT_ATTENTION,2407			.asc = 0x3A,2408			.ascq = SCMD_FAILURE_ASCQ_ANY,2409			.result = SAM_STAT_CHECK_CONDITION,2410		},2411		{2412			.sense = NOT_READY,2413			.asc = 0x3A,2414			.ascq = SCMD_FAILURE_ASCQ_ANY,2415			.result = SAM_STAT_CHECK_CONDITION,2416		},2417		/* Retry when scsi_status_is_good would return false 3 times */2418		{2419			.result = SCMD_FAILURE_STAT_ANY,2420			.allowed = 3,2421		},2422		{}2423	};2424	struct scsi_failures failures = {2425		.failure_definitions = failure_defs,2426	};2427	const struct scsi_exec_args exec_args = {2428		.sshdr = &sshdr,2429		.failures = &failures,2430	};2431 2432	spintime = 0;2433 2434	/* Spin up drives, as required.  Only do this at boot time */2435	/* Spinup needs to be done for module loads too. */2436	do {2437		bool media_was_present = sdkp->media_present;2438 2439		scsi_failures_reset_retries(&failures);2440 2441		the_result = scsi_execute_cmd(sdkp->device, cmd, REQ_OP_DRV_IN,2442					      NULL, 0, SD_TIMEOUT,2443					      sdkp->max_retries, &exec_args);2444 2445 2446		if (the_result > 0) {2447			/*2448			 * If the drive has indicated to us that it doesn't2449			 * have any media in it, don't bother with any more2450			 * polling.2451			 */2452			if (media_not_present(sdkp, &sshdr)) {2453				if (media_was_present)2454					sd_printk(KERN_NOTICE, sdkp,2455						  "Media removed, stopped polling\n");2456				return;2457			}2458			sense_valid = scsi_sense_valid(&sshdr);2459		}2460 2461		if (!scsi_status_is_check_condition(the_result)) {2462			/* no sense, TUR either succeeded or failed2463			 * with a status error */2464			if(!spintime && !scsi_status_is_good(the_result)) {2465				sd_print_result(sdkp, "Test Unit Ready failed",2466						the_result);2467			}2468			break;2469		}2470 2471		/*2472		 * The device does not want the automatic start to be issued.2473		 */2474		if (sdkp->device->no_start_on_add)2475			break;2476 2477		if (sense_valid && sshdr.sense_key == NOT_READY) {2478			if (sshdr.asc == 4 && sshdr.ascq == 3)2479				break;	/* manual intervention required */2480			if (sshdr.asc == 4 && sshdr.ascq == 0xb)2481				break;	/* standby */2482			if (sshdr.asc == 4 && sshdr.ascq == 0xc)2483				break;	/* unavailable */2484			if (sshdr.asc == 4 && sshdr.ascq == 0x1b)2485				break;	/* sanitize in progress */2486			if (sshdr.asc == 4 && sshdr.ascq == 0x24)2487				break;	/* depopulation in progress */2488			if (sshdr.asc == 4 && sshdr.ascq == 0x25)2489				break;	/* depopulation restoration in progress */2490			/*2491			 * Issue command to spin up drive when not ready2492			 */2493			if (!spintime) {2494				/* Return immediately and start spin cycle */2495				const u8 start_cmd[10] = {2496					[0] = START_STOP,2497					[1] = 1,2498					[4] = sdkp->device->start_stop_pwr_cond ?2499						0x11 : 1,2500				};2501 2502				sd_printk(KERN_NOTICE, sdkp, "Spinning up disk...");2503				scsi_execute_cmd(sdkp->device, start_cmd,2504						 REQ_OP_DRV_IN, NULL, 0,2505						 SD_TIMEOUT, sdkp->max_retries,2506						 &exec_args);2507				spintime_expire = jiffies + 100 * HZ;2508				spintime = 1;2509			}2510			/* Wait 1 second for next try */2511			msleep(1000);2512			printk(KERN_CONT ".");2513 2514		/*2515		 * Wait for USB flash devices with slow firmware.2516		 * Yes, this sense key/ASC combination shouldn't2517		 * occur here.  It's characteristic of these devices.2518		 */2519		} else if (sense_valid &&2520				sshdr.sense_key == UNIT_ATTENTION &&2521				sshdr.asc == 0x28) {2522			if (!spintime) {2523				spintime_expire = jiffies + 5 * HZ;2524				spintime = 1;2525			}2526			/* Wait 1 second for next try */2527			msleep(1000);2528		} else {2529			/* we don't understand the sense code, so it's2530			 * probably pointless to loop */2531			if(!spintime) {2532				sd_printk(KERN_NOTICE, sdkp, "Unit Not Ready\n");2533				sd_print_sense_hdr(sdkp, &sshdr);2534			}2535			break;2536		}2537				2538	} while (spintime && time_before_eq(jiffies, spintime_expire));2539 2540	if (spintime) {2541		if (scsi_status_is_good(the_result))2542			printk(KERN_CONT "ready\n");2543		else2544			printk(KERN_CONT "not responding...\n");2545	}2546}2547 2548/*2549 * Determine whether disk supports Data Integrity Field.2550 */2551static int sd_read_protection_type(struct scsi_disk *sdkp, unsigned char *buffer)2552{2553	struct scsi_device *sdp = sdkp->device;2554	u8 type;2555 2556	if (scsi_device_protection(sdp) == 0 || (buffer[12] & 1) == 0) {2557		sdkp->protection_type = 0;2558		return 0;2559	}2560 2561	type = ((buffer[12] >> 1) & 7) + 1; /* P_TYPE 0 = Type 1 */2562 2563	if (type > T10_PI_TYPE3_PROTECTION) {2564		sd_printk(KERN_ERR, sdkp, "formatted with unsupported"	\2565			  " protection type %u. Disabling disk!\n",2566			  type);2567		sdkp->protection_type = 0;2568		return -ENODEV;2569	}2570 2571	sdkp->protection_type = type;2572 2573	return 0;2574}2575 2576static void sd_config_protection(struct scsi_disk *sdkp,2577		struct queue_limits *lim)2578{2579	struct scsi_device *sdp = sdkp->device;2580 2581	if (IS_ENABLED(CONFIG_BLK_DEV_INTEGRITY))2582		sd_dif_config_host(sdkp, lim);2583 2584	if (!sdkp->protection_type)2585		return;2586 2587	if (!scsi_host_dif_capable(sdp->host, sdkp->protection_type)) {2588		sd_first_printk(KERN_NOTICE, sdkp,2589				"Disabling DIF Type %u protection\n",2590				sdkp->protection_type);2591		sdkp->protection_type = 0;2592	}2593 2594	sd_first_printk(KERN_NOTICE, sdkp, "Enabling DIF Type %u protection\n",2595			sdkp->protection_type);2596}2597 2598static void read_capacity_error(struct scsi_disk *sdkp, struct scsi_device *sdp,2599			struct scsi_sense_hdr *sshdr, int sense_valid,2600			int the_result)2601{2602	if (sense_valid)2603		sd_print_sense_hdr(sdkp, sshdr);2604	else2605		sd_printk(KERN_NOTICE, sdkp, "Sense not available.\n");2606 2607	/*2608	 * Set dirty bit for removable devices if not ready -2609	 * sometimes drives will not report this properly.2610	 */2611	if (sdp->removable &&2612	    sense_valid && sshdr->sense_key == NOT_READY)2613		set_media_not_present(sdkp);2614 2615	/*2616	 * We used to set media_present to 0 here to indicate no media2617	 * in the drive, but some drives fail read capacity even with2618	 * media present, so we can't do that.2619	 */2620	sdkp->capacity = 0; /* unknown mapped to zero - as usual */2621}2622 2623#define RC16_LEN 322624#if RC16_LEN > SD_BUF_SIZE2625#error RC16_LEN must not be more than SD_BUF_SIZE2626#endif2627 2628#define READ_CAPACITY_RETRIES_ON_RESET	102629 2630static int read_capacity_16(struct scsi_disk *sdkp, struct scsi_device *sdp,2631		struct queue_limits *lim, unsigned char *buffer)2632{2633	unsigned char cmd[16];2634	struct scsi_sense_hdr sshdr;2635	const struct scsi_exec_args exec_args = {2636		.sshdr = &sshdr,2637	};2638	int sense_valid = 0;2639	int the_result;2640	int retries = 3, reset_retries = READ_CAPACITY_RETRIES_ON_RESET;2641	unsigned int alignment;2642	unsigned long long lba;2643	unsigned sector_size;2644 2645	if (sdp->no_read_capacity_16)2646		return -EINVAL;2647 2648	do {2649		memset(cmd, 0, 16);2650		cmd[0] = SERVICE_ACTION_IN_16;2651		cmd[1] = SAI_READ_CAPACITY_16;2652		cmd[13] = RC16_LEN;2653		memset(buffer, 0, RC16_LEN);2654 2655		the_result = scsi_execute_cmd(sdp, cmd, REQ_OP_DRV_IN,2656					      buffer, RC16_LEN, SD_TIMEOUT,2657					      sdkp->max_retries, &exec_args);2658		if (the_result > 0) {2659			if (media_not_present(sdkp, &sshdr))2660				return -ENODEV;2661 2662			sense_valid = scsi_sense_valid(&sshdr);2663			if (sense_valid &&2664			    sshdr.sense_key == ILLEGAL_REQUEST &&2665			    (sshdr.asc == 0x20 || sshdr.asc == 0x24) &&2666			    sshdr.ascq == 0x00)2667				/* Invalid Command Operation Code or2668				 * Invalid Field in CDB, just retry2669				 * silently with RC10 */2670				return -EINVAL;2671			if (sense_valid &&2672			    sshdr.sense_key == UNIT_ATTENTION &&2673			    sshdr.asc == 0x29 && sshdr.ascq == 0x00)2674				/* Device reset might occur several times,2675				 * give it one more chance */2676				if (--reset_retries > 0)2677					continue;2678		}2679		retries--;2680 2681	} while (the_result && retries);2682 2683	if (the_result) {2684		sd_print_result(sdkp, "Read Capacity(16) failed", the_result);2685		read_capacity_error(sdkp, sdp, &sshdr, sense_valid, the_result);2686		return -EINVAL;2687	}2688 2689	sector_size = get_unaligned_be32(&buffer[8]);2690	lba = get_unaligned_be64(&buffer[0]);2691 2692	if (sd_read_protection_type(sdkp, buffer) < 0) {2693		sdkp->capacity = 0;2694		return -ENODEV;2695	}2696 2697	/* Logical blocks per physical block exponent */2698	sdkp->physical_block_size = (1 << (buffer[13] & 0xf)) * sector_size;2699 2700	/* RC basis */2701	sdkp->rc_basis = (buffer[12] >> 4) & 0x3;2702 2703	/* Lowest aligned logical block */2704	alignment = ((buffer[14] & 0x3f) << 8 | buffer[15]) * sector_size;2705	lim->alignment_offset = alignment;2706	if (alignment && sdkp->first_scan)2707		sd_printk(KERN_NOTICE, sdkp,2708			  "physical block alignment offset: %u\n", alignment);2709 2710	if (buffer[14] & 0x80) { /* LBPME */2711		sdkp->lbpme = 1;2712 2713		if (buffer[14] & 0x40) /* LBPRZ */2714			sdkp->lbprz = 1;2715	}2716 2717	sdkp->capacity = lba + 1;2718	return sector_size;2719}2720 2721static int read_capacity_10(struct scsi_disk *sdkp, struct scsi_device *sdp,2722						unsigned char *buffer)2723{2724	static const u8 cmd[10] = { READ_CAPACITY };2725	struct scsi_sense_hdr sshdr;2726	struct scsi_failure failure_defs[] = {2727		/* Do not retry Medium Not Present */2728		{2729			.sense = UNIT_ATTENTION,2730			.asc = 0x3A,2731			.result = SAM_STAT_CHECK_CONDITION,2732		},2733		{2734			.sense = NOT_READY,2735			.asc = 0x3A,2736			.result = SAM_STAT_CHECK_CONDITION,2737		},2738		 /* Device reset might occur several times so retry a lot */2739		{2740			.sense = UNIT_ATTENTION,2741			.asc = 0x29,2742			.allowed = READ_CAPACITY_RETRIES_ON_RESET,2743			.result = SAM_STAT_CHECK_CONDITION,2744		},2745		/* Any other error not listed above retry 3 times */2746		{2747			.result = SCMD_FAILURE_RESULT_ANY,2748			.allowed = 3,2749		},2750		{}2751	};2752	struct scsi_failures failures = {2753		.failure_definitions = failure_defs,2754	};2755	const struct scsi_exec_args exec_args = {2756		.sshdr = &sshdr,2757		.failures = &failures,2758	};2759	int sense_valid = 0;2760	int the_result;2761	sector_t lba;2762	unsigned sector_size;2763 2764	memset(buffer, 0, 8);2765 2766	the_result = scsi_execute_cmd(sdp, cmd, REQ_OP_DRV_IN, buffer,2767				      8, SD_TIMEOUT, sdkp->max_retries,2768				      &exec_args);2769 2770	if (the_result > 0) {2771		sense_valid = scsi_sense_valid(&sshdr);2772 2773		if (media_not_present(sdkp, &sshdr))2774			return -ENODEV;2775	}2776 2777	if (the_result) {2778		sd_print_result(sdkp, "Read Capacity(10) failed", the_result);2779		read_capacity_error(sdkp, sdp, &sshdr, sense_valid, the_result);2780		return -EINVAL;2781	}2782 2783	sector_size = get_unaligned_be32(&buffer[4]);2784	lba = get_unaligned_be32(&buffer[0]);2785 2786	if (sdp->no_read_capacity_16 && (lba == 0xffffffff)) {2787		/* Some buggy (usb cardreader) devices return an lba of2788		   0xffffffff when the want to report a size of 0 (with2789		   which they really mean no media is present) */2790		sdkp->capacity = 0;2791		sdkp->physical_block_size = sector_size;2792		return sector_size;2793	}2794 2795	sdkp->capacity = lba + 1;2796	sdkp->physical_block_size = sector_size;2797	return sector_size;2798}2799 2800static int sd_try_rc16_first(struct scsi_device *sdp)2801{2802	if (sdp->host->max_cmd_len < 16)2803		return 0;2804	if (sdp->try_rc_10_first)2805		return 0;2806	if (sdp->scsi_level > SCSI_SPC_2)2807		return 1;2808	if (scsi_device_protection(sdp))2809		return 1;2810	return 0;2811}2812 2813/*2814 * read disk capacity2815 */2816static void2817sd_read_capacity(struct scsi_disk *sdkp, struct queue_limits *lim,2818		unsigned char *buffer)2819{2820	int sector_size;2821	struct scsi_device *sdp = sdkp->device;2822 2823	if (sd_try_rc16_first(sdp)) {2824		sector_size = read_capacity_16(sdkp, sdp, lim, buffer);2825		if (sector_size == -EOVERFLOW)2826			goto got_data;2827		if (sector_size == -ENODEV)2828			return;2829		if (sector_size < 0)2830			sector_size = read_capacity_10(sdkp, sdp, buffer);2831		if (sector_size < 0)2832			return;2833	} else {2834		sector_size = read_capacity_10(sdkp, sdp, buffer);2835		if (sector_size == -EOVERFLOW)2836			goto got_data;2837		if (sector_size < 0)2838			return;2839		if ((sizeof(sdkp->capacity) > 4) &&2840		    (sdkp->capacity > 0xffffffffULL)) {2841			int old_sector_size = sector_size;2842			sd_printk(KERN_NOTICE, sdkp, "Very big device. "2843					"Trying to use READ CAPACITY(16).\n");2844			sector_size = read_capacity_16(sdkp, sdp, lim, buffer);2845			if (sector_size < 0) {2846				sd_printk(KERN_NOTICE, sdkp,2847					"Using 0xffffffff as device size\n");2848				sdkp->capacity = 1 + (sector_t) 0xffffffff;2849				sector_size = old_sector_size;2850				goto got_data;2851			}2852			/* Remember that READ CAPACITY(16) succeeded */2853			sdp->try_rc_10_first = 0;2854		}2855	}2856 2857	/* Some devices are known to return the total number of blocks,2858	 * not the highest block number.  Some devices have versions2859	 * which do this and others which do not.  Some devices we might2860	 * suspect of doing this but we don't know for certain.2861	 *2862	 * If we know the reported capacity is wrong, decrement it.  If2863	 * we can only guess, then assume the number of blocks is even2864	 * (usually true but not always) and err on the side of lowering2865	 * the capacity.2866	 */2867	if (sdp->fix_capacity ||2868	    (sdp->guess_capacity && (sdkp->capacity & 0x01))) {2869		sd_printk(KERN_INFO, sdkp, "Adjusting the sector count "2870				"from its reported value: %llu\n",2871				(unsigned long long) sdkp->capacity);2872		--sdkp->capacity;2873	}2874 2875got_data:2876	if (sector_size == 0) {2877		sector_size = 512;2878		sd_printk(KERN_NOTICE, sdkp, "Sector size 0 reported, "2879			  "assuming 512.\n");2880	}2881 2882	if (sector_size != 512 &&2883	    sector_size != 1024 &&2884	    sector_size != 2048 &&2885	    sector_size != 4096) {2886		sd_printk(KERN_NOTICE, sdkp, "Unsupported sector size %d.\n",2887			  sector_size);2888		/*2889		 * The user might want to re-format the drive with2890		 * a supported sectorsize.  Once this happens, it2891		 * would be relatively trivial to set the thing up.2892		 * For this reason, we leave the thing in the table.2893		 */2894		sdkp->capacity = 0;2895		/*2896		 * set a bogus sector size so the normal read/write2897		 * logic in the block layer will eventually refuse any2898		 * request on this device without tripping over power2899		 * of two sector size assumptions2900		 */2901		sector_size = 512;2902	}2903	lim->logical_block_size = sector_size;2904	lim->physical_block_size = sdkp->physical_block_size;2905	sdkp->device->sector_size = sector_size;2906 2907	if (sdkp->capacity > 0xffffffff)2908		sdp->use_16_for_rw = 1;2909 2910}2911 2912/*2913 * Print disk capacity2914 */2915static void2916sd_print_capacity(struct scsi_disk *sdkp,2917		  sector_t old_capacity)2918{2919	int sector_size = sdkp->device->sector_size;2920	char cap_str_2[10], cap_str_10[10];2921 2922	if (!sdkp->first_scan && old_capacity == sdkp->capacity)2923		return;2924 2925	string_get_size(sdkp->capacity, sector_size,2926			STRING_UNITS_2, cap_str_2, sizeof(cap_str_2));2927	string_get_size(sdkp->capacity, sector_size,2928			STRING_UNITS_10, cap_str_10, sizeof(cap_str_10));2929 2930	sd_printk(KERN_NOTICE, sdkp,2931		  "%llu %d-byte logical blocks: (%s/%s)\n",2932		  (unsigned long long)sdkp->capacity,2933		  sector_size, cap_str_10, cap_str_2);2934 2935	if (sdkp->physical_block_size != sector_size)2936		sd_printk(KERN_NOTICE, sdkp,2937			  "%u-byte physical blocks\n",2938			  sdkp->physical_block_size);2939}2940 2941/* called with buffer of length 512 */2942static inline int2943sd_do_mode_sense(struct scsi_disk *sdkp, int dbd, int modepage,2944		 unsigned char *buffer, int len, struct scsi_mode_data *data,2945		 struct scsi_sense_hdr *sshdr)2946{2947	/*2948	 * If we must use MODE SENSE(10), make sure that the buffer length2949	 * is at least 8 bytes so that the mode sense header fits.2950	 */2951	if (sdkp->device->use_10_for_ms && len < 8)2952		len = 8;2953 2954	return scsi_mode_sense(sdkp->device, dbd, modepage, 0, buffer, len,2955			       SD_TIMEOUT, sdkp->max_retries, data, sshdr);2956}2957 2958/*2959 * read write protect setting, if possible - called only in sd_revalidate_disk()2960 * called with buffer of length SD_BUF_SIZE2961 */2962static void2963sd_read_write_protect_flag(struct scsi_disk *sdkp, unsigned char *buffer)2964{2965	int res;2966	struct scsi_device *sdp = sdkp->device;2967	struct scsi_mode_data data;2968	int old_wp = sdkp->write_prot;2969 2970	set_disk_ro(sdkp->disk, 0);2971	if (sdp->skip_ms_page_3f) {2972		sd_first_printk(KERN_NOTICE, sdkp, "Assuming Write Enabled\n");2973		return;2974	}2975 2976	if (sdp->use_192_bytes_for_3f) {2977		res = sd_do_mode_sense(sdkp, 0, 0x3F, buffer, 192, &data, NULL);2978	} else {2979		/*2980		 * First attempt: ask for all pages (0x3F), but only 4 bytes.2981		 * We have to start carefully: some devices hang if we ask2982		 * for more than is available.2983		 */2984		res = sd_do_mode_sense(sdkp, 0, 0x3F, buffer, 4, &data, NULL);2985 2986		/*2987		 * Second attempt: ask for page 0 When only page 0 is2988		 * implemented, a request for page 3F may return Sense Key2989		 * 5: Illegal Request, Sense Code 24: Invalid field in2990		 * CDB.2991		 */2992		if (res < 0)2993			res = sd_do_mode_sense(sdkp, 0, 0, buffer, 4, &data, NULL);2994 2995		/*2996		 * Third attempt: ask 255 bytes, as we did earlier.2997		 */2998		if (res < 0)2999			res = sd_do_mode_sense(sdkp, 0, 0x3F, buffer, 255,3000					       &data, NULL);3001	}3002 3003	if (res < 0) {3004		sd_first_printk(KERN_WARNING, sdkp,3005			  "Test WP failed, assume Write Enabled\n");3006	} else {3007		sdkp->write_prot = ((data.device_specific & 0x80) != 0);3008		set_disk_ro(sdkp->disk, sdkp->write_prot);3009		if (sdkp->first_scan || old_wp != sdkp->write_prot) {3010			sd_printk(KERN_NOTICE, sdkp, "Write Protect is %s\n",3011				  sdkp->write_prot ? "on" : "off");3012			sd_printk(KERN_DEBUG, sdkp, "Mode Sense: %4ph\n", buffer);3013		}3014	}3015}3016 3017/*3018 * sd_read_cache_type - called only from sd_revalidate_disk()3019 * called with buffer of length SD_BUF_SIZE3020 */3021static void3022sd_read_cache_type(struct scsi_disk *sdkp, unsigned char *buffer)3023{3024	int len = 0, res;3025	struct scsi_device *sdp = sdkp->device;3026 3027	int dbd;3028	int modepage;3029	int first_len;3030	struct scsi_mode_data data;3031	struct scsi_sense_hdr sshdr;3032	int old_wce = sdkp->WCE;3033	int old_rcd = sdkp->RCD;3034	int old_dpofua = sdkp->DPOFUA;3035 3036 3037	if (sdkp->cache_override)3038		return;3039 3040	first_len = 4;3041	if (sdp->skip_ms_page_8) {3042		if (sdp->type == TYPE_RBC)3043			goto defaults;3044		else {3045			if (sdp->skip_ms_page_3f)3046				goto defaults;3047			modepage = 0x3F;3048			if (sdp->use_192_bytes_for_3f)3049				first_len = 192;3050			dbd = 0;3051		}3052	} else if (sdp->type == TYPE_RBC) {3053		modepage = 6;3054		dbd = 8;3055	} else {3056		modepage = 8;3057		dbd = 0;3058	}3059 3060	/* cautiously ask */3061	res = sd_do_mode_sense(sdkp, dbd, modepage, buffer, first_len,3062			&data, &sshdr);3063 3064	if (res < 0)3065		goto bad_sense;3066 3067	if (!data.header_length) {3068		modepage = 6;3069		first_len = 0;3070		sd_first_printk(KERN_ERR, sdkp,3071				"Missing header in MODE_SENSE response\n");3072	}3073 3074	/* that went OK, now ask for the proper length */3075	len = data.length;3076 3077	/*3078	 * We're only interested in the first three bytes, actually.3079	 * But the data cache page is defined for the first 20.3080	 */3081	if (len < 3)3082		goto bad_sense;3083	else if (len > SD_BUF_SIZE) {3084		sd_first_printk(KERN_NOTICE, sdkp, "Truncating mode parameter "3085			  "data from %d to %d bytes\n", len, SD_BUF_SIZE);3086		len = SD_BUF_SIZE;3087	}3088	if (modepage == 0x3F && sdp->use_192_bytes_for_3f)3089		len = 192;3090 3091	/* Get the data */3092	if (len > first_len)3093		res = sd_do_mode_sense(sdkp, dbd, modepage, buffer, len,3094				&data, &sshdr);3095 3096	if (!res) {3097		int offset = data.header_length + data.block_descriptor_length;3098 3099		while (offset < len) {3100			u8 page_code = buffer[offset] & 0x3F;3101			u8 spf       = buffer[offset] & 0x40;3102 3103			if (page_code == 8 || page_code == 6) {3104				/* We're interested only in the first 3 bytes.3105				 */3106				if (len - offset <= 2) {3107					sd_first_printk(KERN_ERR, sdkp,3108						"Incomplete mode parameter "3109							"data\n");3110					goto defaults;3111				} else {3112					modepage = page_code;3113					goto Page_found;3114				}3115			} else {3116				/* Go to the next page */3117				if (spf && len - offset > 3)3118					offset += 4 + (buffer[offset+2] << 8) +3119						buffer[offset+3];3120				else if (!spf && len - offset > 1)3121					offset += 2 + buffer[offset+1];3122				else {3123					sd_first_printk(KERN_ERR, sdkp,3124							"Incomplete mode "3125							"parameter data\n");3126					goto defaults;3127				}3128			}3129		}3130 3131		sd_first_printk(KERN_WARNING, sdkp,3132				"No Caching mode page found\n");3133		goto defaults;3134 3135	Page_found:3136		if (modepage == 8) {3137			sdkp->WCE = ((buffer[offset + 2] & 0x04) != 0);3138			sdkp->RCD = ((buffer[offset + 2] & 0x01) != 0);3139		} else {3140			sdkp->WCE = ((buffer[offset + 2] & 0x01) == 0);3141			sdkp->RCD = 0;3142		}3143 3144		sdkp->DPOFUA = (data.device_specific & 0x10) != 0;3145		if (sdp->broken_fua) {3146			sd_first_printk(KERN_NOTICE, sdkp, "Disabling FUA\n");3147			sdkp->DPOFUA = 0;3148		} else if (sdkp->DPOFUA && !sdkp->device->use_10_for_rw &&3149			   !sdkp->device->use_16_for_rw) {3150			sd_first_printk(KERN_NOTICE, sdkp,3151				  "Uses READ/WRITE(6), disabling FUA\n");3152			sdkp->DPOFUA = 0;3153		}3154 3155		/* No cache flush allowed for write protected devices */3156		if (sdkp->WCE && sdkp->write_prot)3157			sdkp->WCE = 0;3158 3159		if (sdkp->first_scan || old_wce != sdkp->WCE ||3160		    old_rcd != sdkp->RCD || old_dpofua != sdkp->DPOFUA)3161			sd_printk(KERN_NOTICE, sdkp,3162				  "Write cache: %s, read cache: %s, %s\n",3163				  sdkp->WCE ? "enabled" : "disabled",3164				  sdkp->RCD ? "disabled" : "enabled",3165				  sdkp->DPOFUA ? "supports DPO and FUA"3166				  : "doesn't support DPO or FUA");3167 3168		return;3169	}3170 3171bad_sense:3172	if (res == -EIO && scsi_sense_valid(&sshdr) &&3173	    sshdr.sense_key == ILLEGAL_REQUEST &&3174	    sshdr.asc == 0x24 && sshdr.ascq == 0x0)3175		/* Invalid field in CDB */3176		sd_first_printk(KERN_NOTICE, sdkp, "Cache data unavailable\n");3177	else3178		sd_first_printk(KERN_ERR, sdkp,3179				"Asking for cache data failed\n");3180 3181defaults:3182	if (sdp->wce_default_on) {3183		sd_first_printk(KERN_NOTICE, sdkp,3184				"Assuming drive cache: write back\n");3185		sdkp->WCE = 1;3186	} else {3187		sd_first_printk(KERN_WARNING, sdkp,3188				"Assuming drive cache: write through\n");3189		sdkp->WCE = 0;3190	}3191	sdkp->RCD = 0;3192	sdkp->DPOFUA = 0;3193}3194 3195static bool sd_is_perm_stream(struct scsi_disk *sdkp, unsigned int stream_id)3196{3197	u8 cdb[16] = { SERVICE_ACTION_IN_16, SAI_GET_STREAM_STATUS };3198	struct {3199		struct scsi_stream_status_header h;3200		struct scsi_stream_status s;3201	} buf;3202	struct scsi_device *sdev = sdkp->device;3203	struct scsi_sense_hdr sshdr;3204	const struct scsi_exec_args exec_args = {3205		.sshdr = &sshdr,3206	};3207	int res;3208 3209	put_unaligned_be16(stream_id, &cdb[4]);3210	put_unaligned_be32(sizeof(buf), &cdb[10]);3211 3212	res = scsi_execute_cmd(sdev, cdb, REQ_OP_DRV_IN, &buf, sizeof(buf),3213			       SD_TIMEOUT, sdkp->max_retries, &exec_args);3214	if (res < 0)3215		return false;3216	if (scsi_status_is_check_condition(res) && scsi_sense_valid(&sshdr))3217		sd_print_sense_hdr(sdkp, &sshdr);3218	if (res)3219		return false;3220	if (get_unaligned_be32(&buf.h.len) < sizeof(struct scsi_stream_status))3221		return false;3222	return buf.h.stream_status[0].perm;3223}3224 3225static void sd_read_io_hints(struct scsi_disk *sdkp, unsigned char *buffer)3226{3227	struct scsi_device *sdp = sdkp->device;3228	const struct scsi_io_group_descriptor *desc, *start, *end;3229	u16 permanent_stream_count_old;3230	struct scsi_sense_hdr sshdr;3231	struct scsi_mode_data data;3232	int res;3233 3234	if (sdp->sdev_bflags & BLIST_SKIP_IO_HINTS)3235		return;3236 3237	res = scsi_mode_sense(sdp, /*dbd=*/0x8, /*modepage=*/0x0a,3238			      /*subpage=*/0x05, buffer, SD_BUF_SIZE, SD_TIMEOUT,3239			      sdkp->max_retries, &data, &sshdr);3240	if (res < 0)3241		return;3242	start = (void *)buffer + data.header_length + 16;3243	end = (void *)buffer + ALIGN_DOWN(data.header_length + data.length,3244					  sizeof(*end));3245	/*3246	 * From "SBC-5 Constrained Streams with Data Lifetimes": Device severs3247	 * should assign the lowest numbered stream identifiers to permanent3248	 * streams.3249	 */3250	for (desc = start; desc < end; desc++)3251		if (!desc->st_enble || !sd_is_perm_stream(sdkp, desc - start))3252			break;3253	permanent_stream_count_old = sdkp->permanent_stream_count;3254	sdkp->permanent_stream_count = desc - start;3255	if (sdkp->rscs && sdkp->permanent_stream_count < 2)3256		sd_printk(KERN_INFO, sdkp,3257			  "Unexpected: RSCS has been set and the permanent stream count is %u\n",3258			  sdkp->permanent_stream_count);3259	else if (sdkp->permanent_stream_count != permanent_stream_count_old)3260		sd_printk(KERN_INFO, sdkp, "permanent stream count = %d\n",3261			  sdkp->permanent_stream_count);3262}3263 3264/*3265 * The ATO bit indicates whether the DIF application tag is available3266 * for use by the operating system.3267 */3268static void sd_read_app_tag_own(struct scsi_disk *sdkp, unsigned char *buffer)3269{3270	int res, offset;3271	struct scsi_device *sdp = sdkp->device;3272	struct scsi_mode_data data;3273	struct scsi_sense_hdr sshdr;3274 3275	if (sdp->type != TYPE_DISK && sdp->type != TYPE_ZBC)3276		return;3277 3278	if (sdkp->protection_type == 0)3279		return;3280 3281	res = scsi_mode_sense(sdp, 1, 0x0a, 0, buffer, 36, SD_TIMEOUT,3282			      sdkp->max_retries, &data, &sshdr);3283 3284	if (res < 0 || !data.header_length ||3285	    data.length < 6) {3286		sd_first_printk(KERN_WARNING, sdkp,3287			  "getting Control mode page failed, assume no ATO\n");3288 3289		if (res == -EIO && scsi_sense_valid(&sshdr))3290			sd_print_sense_hdr(sdkp, &sshdr);3291 3292		return;3293	}3294 3295	offset = data.header_length + data.block_descriptor_length;3296 3297	if ((buffer[offset] & 0x3f) != 0x0a) {3298		sd_first_printk(KERN_ERR, sdkp, "ATO Got wrong page\n");3299		return;3300	}3301 3302	if ((buffer[offset + 5] & 0x80) == 0)3303		return;3304 3305	sdkp->ATO = 1;3306 3307	return;3308}3309 3310static unsigned int sd_discard_mode(struct scsi_disk *sdkp)3311{3312	if (!sdkp->lbpme)3313		return SD_LBP_FULL;3314 3315	if (!sdkp->lbpvpd) {3316		/* LBP VPD page not provided */3317		if (sdkp->max_unmap_blocks)3318			return SD_LBP_UNMAP;3319		return SD_LBP_WS16;3320	}3321 3322	/* LBP VPD page tells us what to use */3323	if (sdkp->lbpu && sdkp->max_unmap_blocks)3324		return SD_LBP_UNMAP;3325	if (sdkp->lbpws)3326		return SD_LBP_WS16;3327	if (sdkp->lbpws10)3328		return SD_LBP_WS10;3329	return SD_LBP_DISABLE;3330}3331 3332/*3333 * Query disk device for preferred I/O sizes.3334 */3335static void sd_read_block_limits(struct scsi_disk *sdkp,3336		struct queue_limits *lim)3337{3338	struct scsi_vpd *vpd;3339 3340	rcu_read_lock();3341 3342	vpd = rcu_dereference(sdkp->device->vpd_pgb0);3343	if (!vpd || vpd->len < 16)3344		goto out;3345 3346	sdkp->min_xfer_blocks = get_unaligned_be16(&vpd->data[6]);3347	sdkp->max_xfer_blocks = get_unaligned_be32(&vpd->data[8]);3348	sdkp->opt_xfer_blocks = get_unaligned_be32(&vpd->data[12]);3349 3350	if (vpd->len >= 64) {3351		unsigned int lba_count, desc_count;3352 3353		sdkp->max_ws_blocks = (u32)get_unaligned_be64(&vpd->data[36]);3354 3355		if (!sdkp->lbpme)3356			goto config_atomic;3357 3358		lba_count = get_unaligned_be32(&vpd->data[20]);3359		desc_count = get_unaligned_be32(&vpd->data[24]);3360 3361		if (lba_count && desc_count)3362			sdkp->max_unmap_blocks = lba_count;3363 3364		sdkp->unmap_granularity = get_unaligned_be32(&vpd->data[28]);3365 3366		if (vpd->data[32] & 0x80)3367			sdkp->unmap_alignment =3368				get_unaligned_be32(&vpd->data[32]) & ~(1 << 31);3369 3370config_atomic:3371		sdkp->max_atomic = get_unaligned_be32(&vpd->data[44]);3372		sdkp->atomic_alignment = get_unaligned_be32(&vpd->data[48]);3373		sdkp->atomic_granularity = get_unaligned_be32(&vpd->data[52]);3374		sdkp->max_atomic_with_boundary = get_unaligned_be32(&vpd->data[56]);3375		sdkp->max_atomic_boundary = get_unaligned_be32(&vpd->data[60]);3376 3377		sd_config_atomic(sdkp, lim);3378	}3379 3380 out:3381	rcu_read_unlock();3382}3383 3384/* Parse the Block Limits Extension VPD page (0xb7) */3385static void sd_read_block_limits_ext(struct scsi_disk *sdkp)3386{3387	struct scsi_vpd *vpd;3388 3389	rcu_read_lock();3390	vpd = rcu_dereference(sdkp->device->vpd_pgb7);3391	if (vpd && vpd->len >= 2)3392		sdkp->rscs = vpd->data[5] & 1;3393	rcu_read_unlock();3394}3395 3396/* Query block device characteristics */3397static void sd_read_block_characteristics(struct scsi_disk *sdkp,3398		struct queue_limits *lim)3399{3400	struct scsi_vpd *vpd;3401	u16 rot;3402 3403	rcu_read_lock();3404	vpd = rcu_dereference(sdkp->device->vpd_pgb1);3405 3406	if (!vpd || vpd->len <= 8) {3407		rcu_read_unlock();3408	        return;3409	}3410 3411	rot = get_unaligned_be16(&vpd->data[4]);3412	sdkp->zoned = (vpd->data[8] >> 4) & 3;3413	rcu_read_unlock();3414 3415	if (rot == 1)3416		lim->features &= ~(BLK_FEAT_ROTATIONAL | BLK_FEAT_ADD_RANDOM);3417 3418	if (!sdkp->first_scan)3419		return;3420 3421	if (sdkp->device->type == TYPE_ZBC)3422		sd_printk(KERN_NOTICE, sdkp, "Host-managed zoned block device\n");3423	else if (sdkp->zoned == 1)3424		sd_printk(KERN_NOTICE, sdkp, "Host-aware SMR disk used as regular disk\n");3425	else if (sdkp->zoned == 2)3426		sd_printk(KERN_NOTICE, sdkp, "Drive-managed SMR disk\n");3427}3428 3429/**3430 * sd_read_block_provisioning - Query provisioning VPD page3431 * @sdkp: disk to query3432 */3433static void sd_read_block_provisioning(struct scsi_disk *sdkp)3434{3435	struct scsi_vpd *vpd;3436 3437	if (sdkp->lbpme == 0)3438		return;3439 3440	rcu_read_lock();3441	vpd = rcu_dereference(sdkp->device->vpd_pgb2);3442 3443	if (!vpd || vpd->len < 8) {3444		rcu_read_unlock();3445		return;3446	}3447 3448	sdkp->lbpvpd	= 1;3449	sdkp->lbpu	= (vpd->data[5] >> 7) & 1; /* UNMAP */3450	sdkp->lbpws	= (vpd->data[5] >> 6) & 1; /* WRITE SAME(16) w/ UNMAP */3451	sdkp->lbpws10	= (vpd->data[5] >> 5) & 1; /* WRITE SAME(10) w/ UNMAP */3452	rcu_read_unlock();3453}3454 3455static void sd_read_write_same(struct scsi_disk *sdkp, unsigned char *buffer)3456{3457	struct scsi_device *sdev = sdkp->device;3458 3459	if (sdev->host->no_write_same) {3460		sdev->no_write_same = 1;3461 3462		return;3463	}3464 3465	if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, INQUIRY, 0) < 0) {3466		struct scsi_vpd *vpd;3467 3468		sdev->no_report_opcodes = 1;3469 3470		/* Disable WRITE SAME if REPORT SUPPORTED OPERATION3471		 * CODES is unsupported and the device has an ATA3472		 * Information VPD page (SAT).3473		 */3474		rcu_read_lock();3475		vpd = rcu_dereference(sdev->vpd_pg89);3476		if (vpd)3477			sdev->no_write_same = 1;3478		rcu_read_unlock();3479	}3480 3481	if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, WRITE_SAME_16, 0) == 1)3482		sdkp->ws16 = 1;3483 3484	if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE, WRITE_SAME, 0) == 1)3485		sdkp->ws10 = 1;3486}3487 3488static void sd_read_security(struct scsi_disk *sdkp, unsigned char *buffer)3489{3490	struct scsi_device *sdev = sdkp->device;3491 3492	if (!sdev->security_supported)3493		return;3494 3495	if (scsi_report_opcode(sdev, buffer, SD_BUF_SIZE,3496			SECURITY_PROTOCOL_IN, 0) == 1 &&3497	    scsi_report_opcode(sdev, buffer, SD_BUF_SIZE,3498			SECURITY_PROTOCOL_OUT, 0) == 1)3499		sdkp->security = 1;3500}3501 3502static inline sector_t sd64_to_sectors(struct scsi_disk *sdkp, u8 *buf)3503{3504	return logical_to_sectors(sdkp->device, get_unaligned_be64(buf));3505}3506 3507/**3508 * sd_read_cpr - Query concurrent positioning ranges3509 * @sdkp:	disk to query3510 */3511static void sd_read_cpr(struct scsi_disk *sdkp)3512{3513	struct blk_independent_access_ranges *iars = NULL;3514	unsigned char *buffer = NULL;3515	unsigned int nr_cpr = 0;3516	int i, vpd_len, buf_len = SD_BUF_SIZE;3517	u8 *desc;3518 3519	/*3520	 * We need to have the capacity set first for the block layer to be3521	 * able to check the ranges.3522	 */3523	if (sdkp->first_scan)3524		return;3525 3526	if (!sdkp->capacity)3527		goto out;3528 3529	/*3530	 * Concurrent Positioning Ranges VPD: there can be at most 256 ranges,3531	 * leading to a maximum page size of 64 + 256*32 bytes.3532	 */3533	buf_len = 64 + 256*32;3534	buffer = kmalloc(buf_len, GFP_KERNEL);3535	if (!buffer || scsi_get_vpd_page(sdkp->device, 0xb9, buffer, buf_len))3536		goto out;3537 3538	/* We must have at least a 64B header and one 32B range descriptor */3539	vpd_len = get_unaligned_be16(&buffer[2]) + 4;3540	if (vpd_len > buf_len || vpd_len < 64 + 32 || (vpd_len & 31)) {3541		sd_printk(KERN_ERR, sdkp,3542			  "Invalid Concurrent Positioning Ranges VPD page\n");3543		goto out;3544	}3545 3546	nr_cpr = (vpd_len - 64) / 32;3547	if (nr_cpr == 1) {3548		nr_cpr = 0;3549		goto out;3550	}3551 3552	iars = disk_alloc_independent_access_ranges(sdkp->disk, nr_cpr);3553	if (!iars) {3554		nr_cpr = 0;3555		goto out;3556	}3557 3558	desc = &buffer[64];3559	for (i = 0; i < nr_cpr; i++, desc += 32) {3560		if (desc[0] != i) {3561			sd_printk(KERN_ERR, sdkp,3562				"Invalid Concurrent Positioning Range number\n");3563			nr_cpr = 0;3564			break;3565		}3566 3567		iars->ia_range[i].sector = sd64_to_sectors(sdkp, desc + 8);3568		iars->ia_range[i].nr_sectors = sd64_to_sectors(sdkp, desc + 16);3569	}3570 3571out:3572	disk_set_independent_access_ranges(sdkp->disk, iars);3573	if (nr_cpr && sdkp->nr_actuators != nr_cpr) {3574		sd_printk(KERN_NOTICE, sdkp,3575			  "%u concurrent positioning ranges\n", nr_cpr);3576		sdkp->nr_actuators = nr_cpr;3577	}3578 3579	kfree(buffer);3580}3581 3582static bool sd_validate_min_xfer_size(struct scsi_disk *sdkp)3583{3584	struct scsi_device *sdp = sdkp->device;3585	unsigned int min_xfer_bytes =3586		logical_to_bytes(sdp, sdkp->min_xfer_blocks);3587 3588	if (sdkp->min_xfer_blocks == 0)3589		return false;3590 3591	if (min_xfer_bytes & (sdkp->physical_block_size - 1)) {3592		sd_first_printk(KERN_WARNING, sdkp,3593				"Preferred minimum I/O size %u bytes not a " \3594				"multiple of physical block size (%u bytes)\n",3595				min_xfer_bytes, sdkp->physical_block_size);3596		sdkp->min_xfer_blocks = 0;3597		return false;3598	}3599 3600	sd_first_printk(KERN_INFO, sdkp, "Preferred minimum I/O size %u bytes\n",3601			min_xfer_bytes);3602	return true;3603}3604 3605/*3606 * Determine the device's preferred I/O size for reads and writes3607 * unless the reported value is unreasonably small, large, not a3608 * multiple of the physical block size, or simply garbage.3609 */3610static bool sd_validate_opt_xfer_size(struct scsi_disk *sdkp,3611				      unsigned int dev_max)3612{3613	struct scsi_device *sdp = sdkp->device;3614	unsigned int opt_xfer_bytes =3615		logical_to_bytes(sdp, sdkp->opt_xfer_blocks);3616	unsigned int min_xfer_bytes =3617		logical_to_bytes(sdp, sdkp->min_xfer_blocks);3618 3619	if (sdkp->opt_xfer_blocks == 0)3620		return false;3621 3622	if (sdkp->opt_xfer_blocks > dev_max) {3623		sd_first_printk(KERN_WARNING, sdkp,3624				"Optimal transfer size %u logical blocks " \3625				"> dev_max (%u logical blocks)\n",3626				sdkp->opt_xfer_blocks, dev_max);3627		return false;3628	}3629 3630	if (sdkp->opt_xfer_blocks > SD_DEF_XFER_BLOCKS) {3631		sd_first_printk(KERN_WARNING, sdkp,3632				"Optimal transfer size %u logical blocks " \3633				"> sd driver limit (%u logical blocks)\n",3634				sdkp->opt_xfer_blocks, SD_DEF_XFER_BLOCKS);3635		return false;3636	}3637 3638	if (opt_xfer_bytes < PAGE_SIZE) {3639		sd_first_printk(KERN_WARNING, sdkp,3640				"Optimal transfer size %u bytes < " \3641				"PAGE_SIZE (%u bytes)\n",3642				opt_xfer_bytes, (unsigned int)PAGE_SIZE);3643		return false;3644	}3645 3646	if (min_xfer_bytes && opt_xfer_bytes % min_xfer_bytes) {3647		sd_first_printk(KERN_WARNING, sdkp,3648				"Optimal transfer size %u bytes not a " \3649				"multiple of preferred minimum block " \3650				"size (%u bytes)\n",3651				opt_xfer_bytes, min_xfer_bytes);3652		return false;3653	}3654 3655	if (opt_xfer_bytes & (sdkp->physical_block_size - 1)) {3656		sd_first_printk(KERN_WARNING, sdkp,3657				"Optimal transfer size %u bytes not a " \3658				"multiple of physical block size (%u bytes)\n",3659				opt_xfer_bytes, sdkp->physical_block_size);3660		return false;3661	}3662 3663	sd_first_printk(KERN_INFO, sdkp, "Optimal transfer size %u bytes\n",3664			opt_xfer_bytes);3665	return true;3666}3667 3668static void sd_read_block_zero(struct scsi_disk *sdkp)3669{3670	struct scsi_device *sdev = sdkp->device;3671	unsigned int buf_len = sdev->sector_size;3672	u8 *buffer, cmd[16] = { };3673 3674	buffer = kmalloc(buf_len, GFP_KERNEL);3675	if (!buffer)3676		return;3677 3678	if (sdev->use_16_for_rw) {3679		cmd[0] = READ_16;3680		put_unaligned_be64(0, &cmd[2]); /* Logical block address 0 */3681		put_unaligned_be32(1, &cmd[10]);/* Transfer 1 logical block */3682	} else {3683		cmd[0] = READ_10;3684		put_unaligned_be32(0, &cmd[2]); /* Logical block address 0 */3685		put_unaligned_be16(1, &cmd[7]);	/* Transfer 1 logical block */3686	}3687 3688	scsi_execute_cmd(sdkp->device, cmd, REQ_OP_DRV_IN, buffer, buf_len,3689			 SD_TIMEOUT, sdkp->max_retries, NULL);3690	kfree(buffer);3691}3692 3693/**3694 *	sd_revalidate_disk - called the first time a new disk is seen,3695 *	performs disk spin up, read_capacity, etc.3696 *	@disk: struct gendisk we care about3697 **/3698static int sd_revalidate_disk(struct gendisk *disk)3699{3700	struct scsi_disk *sdkp = scsi_disk(disk);3701	struct scsi_device *sdp = sdkp->device;3702	sector_t old_capacity = sdkp->capacity;3703	struct queue_limits lim;3704	unsigned char *buffer;3705	unsigned int dev_max;3706	int err;3707 3708	SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp,3709				      "sd_revalidate_disk\n"));3710 3711	/*3712	 * If the device is offline, don't try and read capacity or any3713	 * of the other niceties.3714	 */3715	if (!scsi_device_online(sdp))3716		goto out;3717 3718	buffer = kmalloc(SD_BUF_SIZE, GFP_KERNEL);3719	if (!buffer) {3720		sd_printk(KERN_WARNING, sdkp, "sd_revalidate_disk: Memory "3721			  "allocation failure.\n");3722		goto out;3723	}3724 3725	sd_spinup_disk(sdkp);3726 3727	lim = queue_limits_start_update(sdkp->disk->queue);3728 3729	/*3730	 * Without media there is no reason to ask; moreover, some devices3731	 * react badly if we do.3732	 */3733	if (sdkp->media_present) {3734		sd_read_capacity(sdkp, &lim, buffer);3735		/*3736		 * Some USB/UAS devices return generic values for mode pages3737		 * until the media has been accessed. Trigger a READ operation3738		 * to force the device to populate mode pages.3739		 */3740		if (sdp->read_before_ms)3741			sd_read_block_zero(sdkp);3742		/*3743		 * set the default to rotational.  All non-rotational devices3744		 * support the block characteristics VPD page, which will3745		 * cause this to be updated correctly and any device which3746		 * doesn't support it should be treated as rotational.3747		 */3748		lim.features |= (BLK_FEAT_ROTATIONAL | BLK_FEAT_ADD_RANDOM);3749 3750		if (scsi_device_supports_vpd(sdp)) {3751			sd_read_block_provisioning(sdkp);3752			sd_read_block_limits(sdkp, &lim);3753			sd_read_block_limits_ext(sdkp);3754			sd_read_block_characteristics(sdkp, &lim);3755			sd_zbc_read_zones(sdkp, &lim, buffer);3756		}3757 3758		sd_config_discard(sdkp, &lim, sd_discard_mode(sdkp));3759 3760		sd_print_capacity(sdkp, old_capacity);3761 3762		sd_read_write_protect_flag(sdkp, buffer);3763		sd_read_cache_type(sdkp, buffer);3764		sd_read_io_hints(sdkp, buffer);3765		sd_read_app_tag_own(sdkp, buffer);3766		sd_read_write_same(sdkp, buffer);3767		sd_read_security(sdkp, buffer);3768		sd_config_protection(sdkp, &lim);3769	}3770 3771	/*3772	 * We now have all cache related info, determine how we deal3773	 * with flush requests.3774	 */3775	sd_set_flush_flag(sdkp, &lim);3776 3777	/* Initial block count limit based on CDB TRANSFER LENGTH field size. */3778	dev_max = sdp->use_16_for_rw ? SD_MAX_XFER_BLOCKS : SD_DEF_XFER_BLOCKS;3779 3780	/* Some devices report a maximum block count for READ/WRITE requests. */3781	dev_max = min_not_zero(dev_max, sdkp->max_xfer_blocks);3782	lim.max_dev_sectors = logical_to_sectors(sdp, dev_max);3783 3784	if (sd_validate_min_xfer_size(sdkp))3785		lim.io_min = logical_to_bytes(sdp, sdkp->min_xfer_blocks);3786	else3787		lim.io_min = 0;3788 3789	/*3790	 * Limit default to SCSI host optimal sector limit if set. There may be3791	 * an impact on performance for when the size of a request exceeds this3792	 * host limit.3793	 */3794	lim.io_opt = sdp->host->opt_sectors << SECTOR_SHIFT;3795	if (sd_validate_opt_xfer_size(sdkp, dev_max)) {3796		lim.io_opt = min_not_zero(lim.io_opt,3797				logical_to_bytes(sdp, sdkp->opt_xfer_blocks));3798	}3799 3800	sdkp->first_scan = 0;3801 3802	set_capacity_and_notify(disk, logical_to_sectors(sdp, sdkp->capacity));3803	sd_config_write_same(sdkp, &lim);3804	kfree(buffer);3805 3806	blk_mq_freeze_queue(sdkp->disk->queue);3807	err = queue_limits_commit_update(sdkp->disk->queue, &lim);3808	blk_mq_unfreeze_queue(sdkp->disk->queue);3809	if (err)3810		return err;3811 3812	/*3813	 * Query concurrent positioning ranges after3814	 * queue_limits_commit_update() unlocked q->limits_lock to avoid3815	 * deadlock with q->sysfs_dir_lock and q->sysfs_lock.3816	 */3817	if (sdkp->media_present && scsi_device_supports_vpd(sdp))3818		sd_read_cpr(sdkp);3819 3820	/*3821	 * For a zoned drive, revalidating the zones can be done only once3822	 * the gendisk capacity is set. So if this fails, set back the gendisk3823	 * capacity to 0.3824	 */3825	if (sd_zbc_revalidate_zones(sdkp))3826		set_capacity_and_notify(disk, 0);3827 3828 out:3829	return 0;3830}3831 3832/**3833 *	sd_unlock_native_capacity - unlock native capacity3834 *	@disk: struct gendisk to set capacity for3835 *3836 *	Block layer calls this function if it detects that partitions3837 *	on @disk reach beyond the end of the device.  If the SCSI host3838 *	implements ->unlock_native_capacity() method, it's invoked to3839 *	give it a chance to adjust the device capacity.3840 *3841 *	CONTEXT:3842 *	Defined by block layer.  Might sleep.3843 */3844static void sd_unlock_native_capacity(struct gendisk *disk)3845{3846	struct scsi_device *sdev = scsi_disk(disk)->device;3847 3848	if (sdev->host->hostt->unlock_native_capacity)3849		sdev->host->hostt->unlock_native_capacity(sdev);3850}3851 3852/**3853 *	sd_format_disk_name - format disk name3854 *	@prefix: name prefix - ie. "sd" for SCSI disks3855 *	@index: index of the disk to format name for3856 *	@buf: output buffer3857 *	@buflen: length of the output buffer3858 *3859 *	SCSI disk names starts at sda.  The 26th device is sdz and the3860 *	27th is sdaa.  The last one for two lettered suffix is sdzz3861 *	which is followed by sdaaa.3862 *3863 *	This is basically 26 base counting with one extra 'nil' entry3864 *	at the beginning from the second digit on and can be3865 *	determined using similar method as 26 base conversion with the3866 *	index shifted -1 after each digit is computed.3867 *3868 *	CONTEXT:3869 *	Don't care.3870 *3871 *	RETURNS:3872 *	0 on success, -errno on failure.3873 */3874static int sd_format_disk_name(char *prefix, int index, char *buf, int buflen)3875{3876	const int base = 'z' - 'a' + 1;3877	char *begin = buf + strlen(prefix);3878	char *end = buf + buflen;3879	char *p;3880	int unit;3881 3882	p = end - 1;3883	*p = '\0';3884	unit = base;3885	do {3886		if (p == begin)3887			return -EINVAL;3888		*--p = 'a' + (index % unit);3889		index = (index / unit) - 1;3890	} while (index >= 0);3891 3892	memmove(begin, p, end - p);3893	memcpy(buf, prefix, strlen(prefix));3894 3895	return 0;3896}3897 3898/**3899 *	sd_probe - called during driver initialization and whenever a3900 *	new scsi device is attached to the system. It is called once3901 *	for each scsi device (not just disks) present.3902 *	@dev: pointer to device object3903 *3904 *	Returns 0 if successful (or not interested in this scsi device 3905 *	(e.g. scanner)); 1 when there is an error.3906 *3907 *	Note: this function is invoked from the scsi mid-level.3908 *	This function sets up the mapping between a given 3909 *	<host,channel,id,lun> (found in sdp) and new device name 3910 *	(e.g. /dev/sda). More precisely it is the block device major 3911 *	and minor number that is chosen here.3912 *3913 *	Assume sd_probe is not re-entrant (for time being)3914 *	Also think about sd_probe() and sd_remove() running coincidentally.3915 **/3916static int sd_probe(struct device *dev)3917{3918	struct scsi_device *sdp = to_scsi_device(dev);3919	struct scsi_disk *sdkp;3920	struct gendisk *gd;3921	int index;3922	int error;3923 3924	scsi_autopm_get_device(sdp);3925	error = -ENODEV;3926	if (sdp->type != TYPE_DISK &&3927	    sdp->type != TYPE_ZBC &&3928	    sdp->type != TYPE_MOD &&3929	    sdp->type != TYPE_RBC)3930		goto out;3931 3932	if (!IS_ENABLED(CONFIG_BLK_DEV_ZONED) && sdp->type == TYPE_ZBC) {3933		sdev_printk(KERN_WARNING, sdp,3934			    "Unsupported ZBC host-managed device.\n");3935		goto out;3936	}3937 3938	SCSI_LOG_HLQUEUE(3, sdev_printk(KERN_INFO, sdp,3939					"sd_probe\n"));3940 3941	error = -ENOMEM;3942	sdkp = kzalloc(sizeof(*sdkp), GFP_KERNEL);3943	if (!sdkp)3944		goto out;3945 3946	gd = blk_mq_alloc_disk_for_queue(sdp->request_queue,3947					 &sd_bio_compl_lkclass);3948	if (!gd)3949		goto out_free;3950 3951	index = ida_alloc(&sd_index_ida, GFP_KERNEL);3952	if (index < 0) {3953		sdev_printk(KERN_WARNING, sdp, "sd_probe: memory exhausted.\n");3954		goto out_put;3955	}3956 3957	error = sd_format_disk_name("sd", index, gd->disk_name, DISK_NAME_LEN);3958	if (error) {3959		sdev_printk(KERN_WARNING, sdp, "SCSI disk (sd) name length exceeded.\n");3960		goto out_free_index;3961	}3962 3963	sdkp->device = sdp;3964	sdkp->disk = gd;3965	sdkp->index = index;3966	sdkp->max_retries = SD_MAX_RETRIES;3967	atomic_set(&sdkp->openers, 0);3968	atomic_set(&sdkp->device->ioerr_cnt, 0);3969 3970	if (!sdp->request_queue->rq_timeout) {3971		if (sdp->type != TYPE_MOD)3972			blk_queue_rq_timeout(sdp->request_queue, SD_TIMEOUT);3973		else3974			blk_queue_rq_timeout(sdp->request_queue,3975					     SD_MOD_TIMEOUT);3976	}3977 3978	device_initialize(&sdkp->disk_dev);3979	sdkp->disk_dev.parent = get_device(dev);3980	sdkp->disk_dev.class = &sd_disk_class;3981	dev_set_name(&sdkp->disk_dev, "%s", dev_name(dev));3982 3983	error = device_add(&sdkp->disk_dev);3984	if (error) {3985		put_device(&sdkp->disk_dev);3986		goto out;3987	}3988 3989	dev_set_drvdata(dev, sdkp);3990 3991	gd->major = sd_major((index & 0xf0) >> 4);3992	gd->first_minor = ((index & 0xf) << 4) | (index & 0xfff00);3993	gd->minors = SD_MINORS;3994 3995	gd->fops = &sd_fops;3996	gd->private_data = sdkp;3997 3998	/* defaults, until the device tells us otherwise */3999	sdp->sector_size = 512;4000	sdkp->capacity = 0;4001	sdkp->media_present = 1;4002	sdkp->write_prot = 0;4003	sdkp->cache_override = 0;4004	sdkp->WCE = 0;4005	sdkp->RCD = 0;4006	sdkp->ATO = 0;4007	sdkp->first_scan = 1;4008	sdkp->max_medium_access_timeouts = SD_MAX_MEDIUM_TIMEOUTS;4009 4010	sd_revalidate_disk(gd);4011 4012	if (sdp->removable) {4013		gd->flags |= GENHD_FL_REMOVABLE;4014		gd->events |= DISK_EVENT_MEDIA_CHANGE;4015		gd->event_flags = DISK_EVENT_FLAG_POLL | DISK_EVENT_FLAG_UEVENT;4016	}4017 4018	blk_pm_runtime_init(sdp->request_queue, dev);4019	if (sdp->rpm_autosuspend) {4020		pm_runtime_set_autosuspend_delay(dev,4021			sdp->host->rpm_autosuspend_delay);4022	}4023 4024	error = device_add_disk(dev, gd, NULL);4025	if (error) {4026		device_unregister(&sdkp->disk_dev);4027		put_disk(gd);4028		goto out;4029	}4030 4031	if (sdkp->security) {4032		sdkp->opal_dev = init_opal_dev(sdkp, &sd_sec_submit);4033		if (sdkp->opal_dev)4034			sd_printk(KERN_NOTICE, sdkp, "supports TCG Opal\n");4035	}4036 4037	sd_printk(KERN_NOTICE, sdkp, "Attached SCSI %sdisk\n",4038		  sdp->removable ? "removable " : "");4039	scsi_autopm_put_device(sdp);4040 4041	return 0;4042 4043 out_free_index:4044	ida_free(&sd_index_ida, index);4045 out_put:4046	put_disk(gd);4047 out_free:4048	kfree(sdkp);4049 out:4050	scsi_autopm_put_device(sdp);4051	return error;4052}4053 4054/**4055 *	sd_remove - called whenever a scsi disk (previously recognized by4056 *	sd_probe) is detached from the system. It is called (potentially4057 *	multiple times) during sd module unload.4058 *	@dev: pointer to device object4059 *4060 *	Note: this function is invoked from the scsi mid-level.4061 *	This function potentially frees up a device name (e.g. /dev/sdc)4062 *	that could be re-used by a subsequent sd_probe().4063 *	This function is not called when the built-in sd driver is "exit-ed".4064 **/4065static int sd_remove(struct device *dev)4066{4067	struct scsi_disk *sdkp = dev_get_drvdata(dev);4068 4069	scsi_autopm_get_device(sdkp->device);4070 4071	device_del(&sdkp->disk_dev);4072	del_gendisk(sdkp->disk);4073	if (!sdkp->suspended)4074		sd_shutdown(dev);4075 4076	put_disk(sdkp->disk);4077	return 0;4078}4079 4080static void scsi_disk_release(struct device *dev)4081{4082	struct scsi_disk *sdkp = to_scsi_disk(dev);4083 4084	ida_free(&sd_index_ida, sdkp->index);4085	put_device(&sdkp->device->sdev_gendev);4086	free_opal_dev(sdkp->opal_dev);4087 4088	kfree(sdkp);4089}4090 4091static int sd_start_stop_device(struct scsi_disk *sdkp, int start)4092{4093	unsigned char cmd[6] = { START_STOP };	/* START_VALID */4094	struct scsi_sense_hdr sshdr;4095	struct scsi_failure failure_defs[] = {4096		{4097			/* Power on, reset, or bus device reset occurred */4098			.sense = UNIT_ATTENTION,4099			.asc = 0x29,4100			.ascq = 0,4101			.result = SAM_STAT_CHECK_CONDITION,4102		},4103		{4104			/* Power on occurred */4105			.sense = UNIT_ATTENTION,4106			.asc = 0x29,4107			.ascq = 1,4108			.result = SAM_STAT_CHECK_CONDITION,4109		},4110		{4111			/* SCSI bus reset */4112			.sense = UNIT_ATTENTION,4113			.asc = 0x29,4114			.ascq = 2,4115			.result = SAM_STAT_CHECK_CONDITION,4116		},4117		{}4118	};4119	struct scsi_failures failures = {4120		.total_allowed = 3,4121		.failure_definitions = failure_defs,4122	};4123	const struct scsi_exec_args exec_args = {4124		.sshdr = &sshdr,4125		.req_flags = BLK_MQ_REQ_PM,4126		.failures = &failures,4127	};4128	struct scsi_device *sdp = sdkp->device;4129	int res;4130 4131	if (start)4132		cmd[4] |= 1;	/* START */4133 4134	if (sdp->start_stop_pwr_cond)4135		cmd[4] |= start ? 1 << 4 : 3 << 4;	/* Active or Standby */4136 4137	if (!scsi_device_online(sdp))4138		return -ENODEV;4139 4140	res = scsi_execute_cmd(sdp, cmd, REQ_OP_DRV_IN, NULL, 0, SD_TIMEOUT,4141			       sdkp->max_retries, &exec_args);4142	if (res) {4143		sd_print_result(sdkp, "Start/Stop Unit failed", res);4144		if (res > 0 && scsi_sense_valid(&sshdr)) {4145			sd_print_sense_hdr(sdkp, &sshdr);4146			/* 0x3a is medium not present */4147			if (sshdr.asc == 0x3a)4148				res = 0;4149		}4150	}4151 4152	/* SCSI error codes must not go to the generic layer */4153	if (res)4154		return -EIO;4155 4156	return 0;4157}4158 4159/*4160 * Send a SYNCHRONIZE CACHE instruction down to the device through4161 * the normal SCSI command structure.  Wait for the command to4162 * complete.4163 */4164static void sd_shutdown(struct device *dev)4165{4166	struct scsi_disk *sdkp = dev_get_drvdata(dev);4167 4168	if (!sdkp)4169		return;         /* this can happen */4170 4171	if (pm_runtime_suspended(dev))4172		return;4173 4174	if (sdkp->WCE && sdkp->media_present) {4175		sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");4176		sd_sync_cache(sdkp);4177	}4178 4179	if ((system_state != SYSTEM_RESTART &&4180	     sdkp->device->manage_system_start_stop) ||4181	    (system_state == SYSTEM_POWER_OFF &&4182	     sdkp->device->manage_shutdown)) {4183		sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");4184		sd_start_stop_device(sdkp, 0);4185	}4186}4187 4188static inline bool sd_do_start_stop(struct scsi_device *sdev, bool runtime)4189{4190	return (sdev->manage_system_start_stop && !runtime) ||4191		(sdev->manage_runtime_start_stop && runtime);4192}4193 4194static int sd_suspend_common(struct device *dev, bool runtime)4195{4196	struct scsi_disk *sdkp = dev_get_drvdata(dev);4197	int ret = 0;4198 4199	if (!sdkp)	/* E.g.: runtime suspend following sd_remove() */4200		return 0;4201 4202	if (sdkp->WCE && sdkp->media_present) {4203		if (!sdkp->device->silence_suspend)4204			sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");4205		ret = sd_sync_cache(sdkp);4206		/* ignore OFFLINE device */4207		if (ret == -ENODEV)4208			return 0;4209 4210		if (ret)4211			return ret;4212	}4213 4214	if (sd_do_start_stop(sdkp->device, runtime)) {4215		if (!sdkp->device->silence_suspend)4216			sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");4217		/* an error is not worth aborting a system sleep */4218		ret = sd_start_stop_device(sdkp, 0);4219		if (!runtime)4220			ret = 0;4221	}4222 4223	if (!ret)4224		sdkp->suspended = true;4225 4226	return ret;4227}4228 4229static int sd_suspend_system(struct device *dev)4230{4231	if (pm_runtime_suspended(dev))4232		return 0;4233 4234	return sd_suspend_common(dev, false);4235}4236 4237static int sd_suspend_runtime(struct device *dev)4238{4239	return sd_suspend_common(dev, true);4240}4241 4242static int sd_resume(struct device *dev)4243{4244	struct scsi_disk *sdkp = dev_get_drvdata(dev);4245 4246	sd_printk(KERN_NOTICE, sdkp, "Starting disk\n");4247 4248	if (opal_unlock_from_suspend(sdkp->opal_dev)) {4249		sd_printk(KERN_NOTICE, sdkp, "OPAL unlock failed\n");4250		return -EIO;4251	}4252 4253	return 0;4254}4255 4256static int sd_resume_common(struct device *dev, bool runtime)4257{4258	struct scsi_disk *sdkp = dev_get_drvdata(dev);4259	int ret;4260 4261	if (!sdkp)	/* E.g.: runtime resume at the start of sd_probe() */4262		return 0;4263 4264	if (!sd_do_start_stop(sdkp->device, runtime)) {4265		sdkp->suspended = false;4266		return 0;4267	}4268 4269	sd_printk(KERN_NOTICE, sdkp, "Starting disk\n");4270	ret = sd_start_stop_device(sdkp, 1);4271	if (!ret) {4272		sd_resume(dev);4273		sdkp->suspended = false;4274	}4275 4276	return ret;4277}4278 4279static int sd_resume_system(struct device *dev)4280{4281	if (pm_runtime_suspended(dev)) {4282		struct scsi_disk *sdkp = dev_get_drvdata(dev);4283		struct scsi_device *sdp = sdkp ? sdkp->device : NULL;4284 4285		if (sdp && sdp->force_runtime_start_on_system_start)4286			pm_request_resume(dev);4287 4288		return 0;4289	}4290 4291	return sd_resume_common(dev, false);4292}4293 4294static int sd_resume_runtime(struct device *dev)4295{4296	struct scsi_disk *sdkp = dev_get_drvdata(dev);4297	struct scsi_device *sdp;4298 4299	if (!sdkp)	/* E.g.: runtime resume at the start of sd_probe() */4300		return 0;4301 4302	sdp = sdkp->device;4303 4304	if (sdp->ignore_media_change) {4305		/* clear the device's sense data */4306		static const u8 cmd[10] = { REQUEST_SENSE };4307		const struct scsi_exec_args exec_args = {4308			.req_flags = BLK_MQ_REQ_PM,4309		};4310 4311		if (scsi_execute_cmd(sdp, cmd, REQ_OP_DRV_IN, NULL, 0,4312				     sdp->request_queue->rq_timeout, 1,4313				     &exec_args))4314			sd_printk(KERN_NOTICE, sdkp,4315				  "Failed to clear sense data\n");4316	}4317 4318	return sd_resume_common(dev, true);4319}4320 4321static const struct dev_pm_ops sd_pm_ops = {4322	.suspend		= sd_suspend_system,4323	.resume			= sd_resume_system,4324	.poweroff		= sd_suspend_system,4325	.restore		= sd_resume_system,4326	.runtime_suspend	= sd_suspend_runtime,4327	.runtime_resume		= sd_resume_runtime,4328};4329 4330static struct scsi_driver sd_template = {4331	.gendrv = {4332		.name		= "sd",4333		.probe		= sd_probe,4334		.probe_type	= PROBE_PREFER_ASYNCHRONOUS,4335		.remove		= sd_remove,4336		.shutdown	= sd_shutdown,4337		.pm		= &sd_pm_ops,4338	},4339	.rescan			= sd_rescan,4340	.resume			= sd_resume,4341	.init_command		= sd_init_command,4342	.uninit_command		= sd_uninit_command,4343	.done			= sd_done,4344	.eh_action		= sd_eh_action,4345	.eh_reset		= sd_eh_reset,4346};4347 4348/**4349 *	init_sd - entry point for this driver (both when built in or when4350 *	a module).4351 *4352 *	Note: this function registers this driver with the scsi mid-level.4353 **/4354static int __init init_sd(void)4355{4356	int majors = 0, i, err;4357 4358	SCSI_LOG_HLQUEUE(3, printk("init_sd: sd driver entry point\n"));4359 4360	for (i = 0; i < SD_MAJORS; i++) {4361		if (__register_blkdev(sd_major(i), "sd", sd_default_probe))4362			continue;4363		majors++;4364	}4365 4366	if (!majors)4367		return -ENODEV;4368 4369	err = class_register(&sd_disk_class);4370	if (err)4371		goto err_out;4372 4373	sd_page_pool = mempool_create_page_pool(SD_MEMPOOL_SIZE, 0);4374	if (!sd_page_pool) {4375		printk(KERN_ERR "sd: can't init discard page pool\n");4376		err = -ENOMEM;4377		goto err_out_class;4378	}4379 4380	err = scsi_register_driver(&sd_template.gendrv);4381	if (err)4382		goto err_out_driver;4383 4384	return 0;4385 4386err_out_driver:4387	mempool_destroy(sd_page_pool);4388err_out_class:4389	class_unregister(&sd_disk_class);4390err_out:4391	for (i = 0; i < SD_MAJORS; i++)4392		unregister_blkdev(sd_major(i), "sd");4393	return err;4394}4395 4396/**4397 *	exit_sd - exit point for this driver (when it is a module).4398 *4399 *	Note: this function unregisters this driver from the scsi mid-level.4400 **/4401static void __exit exit_sd(void)4402{4403	int i;4404 4405	SCSI_LOG_HLQUEUE(3, printk("exit_sd: exiting sd driver\n"));4406 4407	scsi_unregister_driver(&sd_template.gendrv);4408	mempool_destroy(sd_page_pool);4409 4410	class_unregister(&sd_disk_class);4411 4412	for (i = 0; i < SD_MAJORS; i++)4413		unregister_blkdev(sd_major(i), "sd");4414}4415 4416module_init(init_sd);4417module_exit(exit_sd);4418 4419void sd_print_sense_hdr(struct scsi_disk *sdkp, struct scsi_sense_hdr *sshdr)4420{4421	scsi_print_sense_hdr(sdkp->device,4422			     sdkp->disk ? sdkp->disk->disk_name : NULL, sshdr);4423}4424 4425void sd_print_result(const struct scsi_disk *sdkp, const char *msg, int result)4426{4427	const char *hb_string = scsi_hostbyte_string(result);4428 4429	if (hb_string)4430		sd_printk(KERN_INFO, sdkp,4431			  "%s: Result: hostbyte=%s driverbyte=%s\n", msg,4432			  hb_string ? hb_string : "invalid",4433			  "DRIVER_OK");4434	else4435		sd_printk(KERN_INFO, sdkp,4436			  "%s: Result: hostbyte=0x%02x driverbyte=%s\n",4437			  msg, host_byte(result), "DRIVER_OK");4438}4439