cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

scsi_sysfs.c (43882B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * scsi_sysfs.c
      4 *
      5 * SCSI sysfs interface routines.
      6 *
      7 * Created to pull SCSI mid layer sysfs routines into one file.
      8 */
      9
     10#include <linux/module.h>
     11#include <linux/slab.h>
     12#include <linux/init.h>
     13#include <linux/blkdev.h>
     14#include <linux/device.h>
     15#include <linux/pm_runtime.h>
     16#include <linux/bsg.h>
     17
     18#include <scsi/scsi.h>
     19#include <scsi/scsi_device.h>
     20#include <scsi/scsi_host.h>
     21#include <scsi/scsi_tcq.h>
     22#include <scsi/scsi_dh.h>
     23#include <scsi/scsi_transport.h>
     24#include <scsi/scsi_driver.h>
     25#include <scsi/scsi_devinfo.h>
     26
     27#include "scsi_priv.h"
     28#include "scsi_logging.h"
     29
     30static struct device_type scsi_dev_type;
     31
     32static const struct {
     33	enum scsi_device_state	value;
     34	char			*name;
     35} sdev_states[] = {
     36	{ SDEV_CREATED, "created" },
     37	{ SDEV_RUNNING, "running" },
     38	{ SDEV_CANCEL, "cancel" },
     39	{ SDEV_DEL, "deleted" },
     40	{ SDEV_QUIESCE, "quiesce" },
     41	{ SDEV_OFFLINE,	"offline" },
     42	{ SDEV_TRANSPORT_OFFLINE, "transport-offline" },
     43	{ SDEV_BLOCK,	"blocked" },
     44	{ SDEV_CREATED_BLOCK, "created-blocked" },
     45};
     46
     47const char *scsi_device_state_name(enum scsi_device_state state)
     48{
     49	int i;
     50	char *name = NULL;
     51
     52	for (i = 0; i < ARRAY_SIZE(sdev_states); i++) {
     53		if (sdev_states[i].value == state) {
     54			name = sdev_states[i].name;
     55			break;
     56		}
     57	}
     58	return name;
     59}
     60
     61static const struct {
     62	enum scsi_host_state	value;
     63	char			*name;
     64} shost_states[] = {
     65	{ SHOST_CREATED, "created" },
     66	{ SHOST_RUNNING, "running" },
     67	{ SHOST_CANCEL, "cancel" },
     68	{ SHOST_DEL, "deleted" },
     69	{ SHOST_RECOVERY, "recovery" },
     70	{ SHOST_CANCEL_RECOVERY, "cancel/recovery" },
     71	{ SHOST_DEL_RECOVERY, "deleted/recovery", },
     72};
     73const char *scsi_host_state_name(enum scsi_host_state state)
     74{
     75	int i;
     76	char *name = NULL;
     77
     78	for (i = 0; i < ARRAY_SIZE(shost_states); i++) {
     79		if (shost_states[i].value == state) {
     80			name = shost_states[i].name;
     81			break;
     82		}
     83	}
     84	return name;
     85}
     86
     87#ifdef CONFIG_SCSI_DH
     88static const struct {
     89	unsigned char	value;
     90	char		*name;
     91} sdev_access_states[] = {
     92	{ SCSI_ACCESS_STATE_OPTIMAL, "active/optimized" },
     93	{ SCSI_ACCESS_STATE_ACTIVE, "active/non-optimized" },
     94	{ SCSI_ACCESS_STATE_STANDBY, "standby" },
     95	{ SCSI_ACCESS_STATE_UNAVAILABLE, "unavailable" },
     96	{ SCSI_ACCESS_STATE_LBA, "lba-dependent" },
     97	{ SCSI_ACCESS_STATE_OFFLINE, "offline" },
     98	{ SCSI_ACCESS_STATE_TRANSITIONING, "transitioning" },
     99};
    100
    101static const char *scsi_access_state_name(unsigned char state)
    102{
    103	int i;
    104	char *name = NULL;
    105
    106	for (i = 0; i < ARRAY_SIZE(sdev_access_states); i++) {
    107		if (sdev_access_states[i].value == state) {
    108			name = sdev_access_states[i].name;
    109			break;
    110		}
    111	}
    112	return name;
    113}
    114#endif
    115
    116static int check_set(unsigned long long *val, char *src)
    117{
    118	char *last;
    119
    120	if (strcmp(src, "-") == 0) {
    121		*val = SCAN_WILD_CARD;
    122	} else {
    123		/*
    124		 * Doesn't check for int overflow
    125		 */
    126		*val = simple_strtoull(src, &last, 0);
    127		if (*last != '\0')
    128			return 1;
    129	}
    130	return 0;
    131}
    132
    133static int scsi_scan(struct Scsi_Host *shost, const char *str)
    134{
    135	char s1[15], s2[15], s3[17], junk;
    136	unsigned long long channel, id, lun;
    137	int res;
    138
    139	res = sscanf(str, "%10s %10s %16s %c", s1, s2, s3, &junk);
    140	if (res != 3)
    141		return -EINVAL;
    142	if (check_set(&channel, s1))
    143		return -EINVAL;
    144	if (check_set(&id, s2))
    145		return -EINVAL;
    146	if (check_set(&lun, s3))
    147		return -EINVAL;
    148	if (shost->transportt->user_scan)
    149		res = shost->transportt->user_scan(shost, channel, id, lun);
    150	else
    151		res = scsi_scan_host_selected(shost, channel, id, lun,
    152					      SCSI_SCAN_MANUAL);
    153	return res;
    154}
    155
    156/*
    157 * shost_show_function: macro to create an attr function that can be used to
    158 * show a non-bit field.
    159 */
    160#define shost_show_function(name, field, format_string)			\
    161static ssize_t								\
    162show_##name (struct device *dev, struct device_attribute *attr, 	\
    163	     char *buf)							\
    164{									\
    165	struct Scsi_Host *shost = class_to_shost(dev);			\
    166	return snprintf (buf, 20, format_string, shost->field);		\
    167}
    168
    169/*
    170 * shost_rd_attr: macro to create a function and attribute variable for a
    171 * read only field.
    172 */
    173#define shost_rd_attr2(name, field, format_string)			\
    174	shost_show_function(name, field, format_string)			\
    175static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL);
    176
    177#define shost_rd_attr(field, format_string) \
    178shost_rd_attr2(field, field, format_string)
    179
    180/*
    181 * Create the actual show/store functions and data structures.
    182 */
    183
    184static ssize_t
    185store_scan(struct device *dev, struct device_attribute *attr,
    186	   const char *buf, size_t count)
    187{
    188	struct Scsi_Host *shost = class_to_shost(dev);
    189	int res;
    190
    191	res = scsi_scan(shost, buf);
    192	if (res == 0)
    193		res = count;
    194	return res;
    195};
    196static DEVICE_ATTR(scan, S_IWUSR, NULL, store_scan);
    197
    198static ssize_t
    199store_shost_state(struct device *dev, struct device_attribute *attr,
    200		  const char *buf, size_t count)
    201{
    202	int i;
    203	struct Scsi_Host *shost = class_to_shost(dev);
    204	enum scsi_host_state state = 0;
    205
    206	for (i = 0; i < ARRAY_SIZE(shost_states); i++) {
    207		const int len = strlen(shost_states[i].name);
    208		if (strncmp(shost_states[i].name, buf, len) == 0 &&
    209		   buf[len] == '\n') {
    210			state = shost_states[i].value;
    211			break;
    212		}
    213	}
    214	if (!state)
    215		return -EINVAL;
    216
    217	if (scsi_host_set_state(shost, state))
    218		return -EINVAL;
    219	return count;
    220}
    221
    222static ssize_t
    223show_shost_state(struct device *dev, struct device_attribute *attr, char *buf)
    224{
    225	struct Scsi_Host *shost = class_to_shost(dev);
    226	const char *name = scsi_host_state_name(shost->shost_state);
    227
    228	if (!name)
    229		return -EINVAL;
    230
    231	return snprintf(buf, 20, "%s\n", name);
    232}
    233
    234/* DEVICE_ATTR(state) clashes with dev_attr_state for sdev */
    235static struct device_attribute dev_attr_hstate =
    236	__ATTR(state, S_IRUGO | S_IWUSR, show_shost_state, store_shost_state);
    237
    238static ssize_t
    239show_shost_mode(unsigned int mode, char *buf)
    240{
    241	ssize_t len = 0;
    242
    243	if (mode & MODE_INITIATOR)
    244		len = sprintf(buf, "%s", "Initiator");
    245
    246	if (mode & MODE_TARGET)
    247		len += sprintf(buf + len, "%s%s", len ? ", " : "", "Target");
    248
    249	len += sprintf(buf + len, "\n");
    250
    251	return len;
    252}
    253
    254static ssize_t
    255show_shost_supported_mode(struct device *dev, struct device_attribute *attr,
    256			  char *buf)
    257{
    258	struct Scsi_Host *shost = class_to_shost(dev);
    259	unsigned int supported_mode = shost->hostt->supported_mode;
    260
    261	if (supported_mode == MODE_UNKNOWN)
    262		/* by default this should be initiator */
    263		supported_mode = MODE_INITIATOR;
    264
    265	return show_shost_mode(supported_mode, buf);
    266}
    267
    268static DEVICE_ATTR(supported_mode, S_IRUGO | S_IWUSR, show_shost_supported_mode, NULL);
    269
    270static ssize_t
    271show_shost_active_mode(struct device *dev,
    272		       struct device_attribute *attr, char *buf)
    273{
    274	struct Scsi_Host *shost = class_to_shost(dev);
    275
    276	if (shost->active_mode == MODE_UNKNOWN)
    277		return snprintf(buf, 20, "unknown\n");
    278	else
    279		return show_shost_mode(shost->active_mode, buf);
    280}
    281
    282static DEVICE_ATTR(active_mode, S_IRUGO | S_IWUSR, show_shost_active_mode, NULL);
    283
    284static int check_reset_type(const char *str)
    285{
    286	if (sysfs_streq(str, "adapter"))
    287		return SCSI_ADAPTER_RESET;
    288	else if (sysfs_streq(str, "firmware"))
    289		return SCSI_FIRMWARE_RESET;
    290	else
    291		return 0;
    292}
    293
    294static ssize_t
    295store_host_reset(struct device *dev, struct device_attribute *attr,
    296		const char *buf, size_t count)
    297{
    298	struct Scsi_Host *shost = class_to_shost(dev);
    299	struct scsi_host_template *sht = shost->hostt;
    300	int ret = -EINVAL;
    301	int type;
    302
    303	type = check_reset_type(buf);
    304	if (!type)
    305		goto exit_store_host_reset;
    306
    307	if (sht->host_reset)
    308		ret = sht->host_reset(shost, type);
    309	else
    310		ret = -EOPNOTSUPP;
    311
    312exit_store_host_reset:
    313	if (ret == 0)
    314		ret = count;
    315	return ret;
    316}
    317
    318static DEVICE_ATTR(host_reset, S_IWUSR, NULL, store_host_reset);
    319
    320static ssize_t
    321show_shost_eh_deadline(struct device *dev,
    322		      struct device_attribute *attr, char *buf)
    323{
    324	struct Scsi_Host *shost = class_to_shost(dev);
    325
    326	if (shost->eh_deadline == -1)
    327		return snprintf(buf, strlen("off") + 2, "off\n");
    328	return sprintf(buf, "%u\n", shost->eh_deadline / HZ);
    329}
    330
    331static ssize_t
    332store_shost_eh_deadline(struct device *dev, struct device_attribute *attr,
    333		const char *buf, size_t count)
    334{
    335	struct Scsi_Host *shost = class_to_shost(dev);
    336	int ret = -EINVAL;
    337	unsigned long deadline, flags;
    338
    339	if (shost->transportt &&
    340	    (shost->transportt->eh_strategy_handler ||
    341	     !shost->hostt->eh_host_reset_handler))
    342		return ret;
    343
    344	if (!strncmp(buf, "off", strlen("off")))
    345		deadline = -1;
    346	else {
    347		ret = kstrtoul(buf, 10, &deadline);
    348		if (ret)
    349			return ret;
    350		if (deadline * HZ > UINT_MAX)
    351			return -EINVAL;
    352	}
    353
    354	spin_lock_irqsave(shost->host_lock, flags);
    355	if (scsi_host_in_recovery(shost))
    356		ret = -EBUSY;
    357	else {
    358		if (deadline == -1)
    359			shost->eh_deadline = -1;
    360		else
    361			shost->eh_deadline = deadline * HZ;
    362
    363		ret = count;
    364	}
    365	spin_unlock_irqrestore(shost->host_lock, flags);
    366
    367	return ret;
    368}
    369
    370static DEVICE_ATTR(eh_deadline, S_IRUGO | S_IWUSR, show_shost_eh_deadline, store_shost_eh_deadline);
    371
    372shost_rd_attr(unique_id, "%u\n");
    373shost_rd_attr(cmd_per_lun, "%hd\n");
    374shost_rd_attr(can_queue, "%d\n");
    375shost_rd_attr(sg_tablesize, "%hu\n");
    376shost_rd_attr(sg_prot_tablesize, "%hu\n");
    377shost_rd_attr(prot_capabilities, "%u\n");
    378shost_rd_attr(prot_guard_type, "%hd\n");
    379shost_rd_attr2(proc_name, hostt->proc_name, "%s\n");
    380
    381static ssize_t
    382show_host_busy(struct device *dev, struct device_attribute *attr, char *buf)
    383{
    384	struct Scsi_Host *shost = class_to_shost(dev);
    385	return snprintf(buf, 20, "%d\n", scsi_host_busy(shost));
    386}
    387static DEVICE_ATTR(host_busy, S_IRUGO, show_host_busy, NULL);
    388
    389static ssize_t
    390show_use_blk_mq(struct device *dev, struct device_attribute *attr, char *buf)
    391{
    392	return sprintf(buf, "1\n");
    393}
    394static DEVICE_ATTR(use_blk_mq, S_IRUGO, show_use_blk_mq, NULL);
    395
    396static ssize_t
    397show_nr_hw_queues(struct device *dev, struct device_attribute *attr, char *buf)
    398{
    399	struct Scsi_Host *shost = class_to_shost(dev);
    400	struct blk_mq_tag_set *tag_set = &shost->tag_set;
    401
    402	return snprintf(buf, 20, "%d\n", tag_set->nr_hw_queues);
    403}
    404static DEVICE_ATTR(nr_hw_queues, S_IRUGO, show_nr_hw_queues, NULL);
    405
    406static struct attribute *scsi_sysfs_shost_attrs[] = {
    407	&dev_attr_use_blk_mq.attr,
    408	&dev_attr_unique_id.attr,
    409	&dev_attr_host_busy.attr,
    410	&dev_attr_cmd_per_lun.attr,
    411	&dev_attr_can_queue.attr,
    412	&dev_attr_sg_tablesize.attr,
    413	&dev_attr_sg_prot_tablesize.attr,
    414	&dev_attr_proc_name.attr,
    415	&dev_attr_scan.attr,
    416	&dev_attr_hstate.attr,
    417	&dev_attr_supported_mode.attr,
    418	&dev_attr_active_mode.attr,
    419	&dev_attr_prot_capabilities.attr,
    420	&dev_attr_prot_guard_type.attr,
    421	&dev_attr_host_reset.attr,
    422	&dev_attr_eh_deadline.attr,
    423	&dev_attr_nr_hw_queues.attr,
    424	NULL
    425};
    426
    427static const struct attribute_group scsi_shost_attr_group = {
    428	.attrs =	scsi_sysfs_shost_attrs,
    429};
    430
    431const struct attribute_group *scsi_shost_groups[] = {
    432	&scsi_shost_attr_group,
    433	NULL
    434};
    435
    436static void scsi_device_cls_release(struct device *class_dev)
    437{
    438	struct scsi_device *sdev;
    439
    440	sdev = class_to_sdev(class_dev);
    441	put_device(&sdev->sdev_gendev);
    442}
    443
    444static void scsi_device_dev_release_usercontext(struct work_struct *work)
    445{
    446	struct scsi_device *sdev;
    447	struct device *parent;
    448	struct list_head *this, *tmp;
    449	struct scsi_vpd *vpd_pg80 = NULL, *vpd_pg83 = NULL;
    450	struct scsi_vpd *vpd_pg0 = NULL, *vpd_pg89 = NULL;
    451	struct scsi_vpd *vpd_pgb0 = NULL, *vpd_pgb1 = NULL, *vpd_pgb2 = NULL;
    452	unsigned long flags;
    453	struct module *mod;
    454
    455	sdev = container_of(work, struct scsi_device, ew.work);
    456
    457	mod = sdev->host->hostt->module;
    458
    459	scsi_dh_release_device(sdev);
    460
    461	parent = sdev->sdev_gendev.parent;
    462
    463	spin_lock_irqsave(sdev->host->host_lock, flags);
    464	list_del(&sdev->siblings);
    465	list_del(&sdev->same_target_siblings);
    466	list_del(&sdev->starved_entry);
    467	spin_unlock_irqrestore(sdev->host->host_lock, flags);
    468
    469	cancel_work_sync(&sdev->event_work);
    470
    471	list_for_each_safe(this, tmp, &sdev->event_list) {
    472		struct scsi_event *evt;
    473
    474		evt = list_entry(this, struct scsi_event, node);
    475		list_del(&evt->node);
    476		kfree(evt);
    477	}
    478
    479	blk_put_queue(sdev->request_queue);
    480	/* NULL queue means the device can't be used */
    481	sdev->request_queue = NULL;
    482
    483	sbitmap_free(&sdev->budget_map);
    484
    485	mutex_lock(&sdev->inquiry_mutex);
    486	vpd_pg0 = rcu_replace_pointer(sdev->vpd_pg0, vpd_pg0,
    487				       lockdep_is_held(&sdev->inquiry_mutex));
    488	vpd_pg80 = rcu_replace_pointer(sdev->vpd_pg80, vpd_pg80,
    489				       lockdep_is_held(&sdev->inquiry_mutex));
    490	vpd_pg83 = rcu_replace_pointer(sdev->vpd_pg83, vpd_pg83,
    491				       lockdep_is_held(&sdev->inquiry_mutex));
    492	vpd_pg89 = rcu_replace_pointer(sdev->vpd_pg89, vpd_pg89,
    493				       lockdep_is_held(&sdev->inquiry_mutex));
    494	vpd_pgb0 = rcu_replace_pointer(sdev->vpd_pgb0, vpd_pgb0,
    495				       lockdep_is_held(&sdev->inquiry_mutex));
    496	vpd_pgb1 = rcu_replace_pointer(sdev->vpd_pgb1, vpd_pgb1,
    497				       lockdep_is_held(&sdev->inquiry_mutex));
    498	vpd_pgb2 = rcu_replace_pointer(sdev->vpd_pgb2, vpd_pgb2,
    499				       lockdep_is_held(&sdev->inquiry_mutex));
    500	mutex_unlock(&sdev->inquiry_mutex);
    501
    502	if (vpd_pg0)
    503		kfree_rcu(vpd_pg0, rcu);
    504	if (vpd_pg83)
    505		kfree_rcu(vpd_pg83, rcu);
    506	if (vpd_pg80)
    507		kfree_rcu(vpd_pg80, rcu);
    508	if (vpd_pg89)
    509		kfree_rcu(vpd_pg89, rcu);
    510	if (vpd_pgb0)
    511		kfree_rcu(vpd_pgb0, rcu);
    512	if (vpd_pgb1)
    513		kfree_rcu(vpd_pgb1, rcu);
    514	if (vpd_pgb2)
    515		kfree_rcu(vpd_pgb2, rcu);
    516	kfree(sdev->inquiry);
    517	kfree(sdev);
    518
    519	if (parent)
    520		put_device(parent);
    521	module_put(mod);
    522}
    523
    524static void scsi_device_dev_release(struct device *dev)
    525{
    526	struct scsi_device *sdp = to_scsi_device(dev);
    527
    528	/* Set module pointer as NULL in case of module unloading */
    529	if (!try_module_get(sdp->host->hostt->module))
    530		sdp->host->hostt->module = NULL;
    531
    532	execute_in_process_context(scsi_device_dev_release_usercontext,
    533				   &sdp->ew);
    534}
    535
    536static struct class sdev_class = {
    537	.name		= "scsi_device",
    538	.dev_release	= scsi_device_cls_release,
    539};
    540
    541/* all probing is done in the individual ->probe routines */
    542static int scsi_bus_match(struct device *dev, struct device_driver *gendrv)
    543{
    544	struct scsi_device *sdp;
    545
    546	if (dev->type != &scsi_dev_type)
    547		return 0;
    548
    549	sdp = to_scsi_device(dev);
    550	if (sdp->no_uld_attach)
    551		return 0;
    552	return (sdp->inq_periph_qual == SCSI_INQ_PQ_CON)? 1: 0;
    553}
    554
    555static int scsi_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
    556{
    557	struct scsi_device *sdev;
    558
    559	if (dev->type != &scsi_dev_type)
    560		return 0;
    561
    562	sdev = to_scsi_device(dev);
    563
    564	add_uevent_var(env, "MODALIAS=" SCSI_DEVICE_MODALIAS_FMT, sdev->type);
    565	return 0;
    566}
    567
    568struct bus_type scsi_bus_type = {
    569        .name		= "scsi",
    570        .match		= scsi_bus_match,
    571	.uevent		= scsi_bus_uevent,
    572#ifdef CONFIG_PM
    573	.pm		= &scsi_bus_pm_ops,
    574#endif
    575};
    576
    577int scsi_sysfs_register(void)
    578{
    579	int error;
    580
    581	error = bus_register(&scsi_bus_type);
    582	if (!error) {
    583		error = class_register(&sdev_class);
    584		if (error)
    585			bus_unregister(&scsi_bus_type);
    586	}
    587
    588	return error;
    589}
    590
    591void scsi_sysfs_unregister(void)
    592{
    593	class_unregister(&sdev_class);
    594	bus_unregister(&scsi_bus_type);
    595}
    596
    597/*
    598 * sdev_show_function: macro to create an attr function that can be used to
    599 * show a non-bit field.
    600 */
    601#define sdev_show_function(field, format_string)				\
    602static ssize_t								\
    603sdev_show_##field (struct device *dev, struct device_attribute *attr,	\
    604		   char *buf)						\
    605{									\
    606	struct scsi_device *sdev;					\
    607	sdev = to_scsi_device(dev);					\
    608	return snprintf (buf, 20, format_string, sdev->field);		\
    609}									\
    610
    611/*
    612 * sdev_rd_attr: macro to create a function and attribute variable for a
    613 * read only field.
    614 */
    615#define sdev_rd_attr(field, format_string)				\
    616	sdev_show_function(field, format_string)			\
    617static DEVICE_ATTR(field, S_IRUGO, sdev_show_##field, NULL);
    618
    619
    620/*
    621 * sdev_rw_attr: create a function and attribute variable for a
    622 * read/write field.
    623 */
    624#define sdev_rw_attr(field, format_string)				\
    625	sdev_show_function(field, format_string)				\
    626									\
    627static ssize_t								\
    628sdev_store_##field (struct device *dev, struct device_attribute *attr,	\
    629		    const char *buf, size_t count)			\
    630{									\
    631	struct scsi_device *sdev;					\
    632	sdev = to_scsi_device(dev);					\
    633	sscanf (buf, format_string, &sdev->field);			\
    634	return count;							\
    635}									\
    636static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##field);
    637
    638/* Currently we don't export bit fields, but we might in future,
    639 * so leave this code in */
    640#if 0
    641/*
    642 * sdev_rd_attr: create a function and attribute variable for a
    643 * read/write bit field.
    644 */
    645#define sdev_rw_attr_bit(field)						\
    646	sdev_show_function(field, "%d\n")					\
    647									\
    648static ssize_t								\
    649sdev_store_##field (struct device *dev, struct device_attribute *attr,	\
    650		    const char *buf, size_t count)			\
    651{									\
    652	int ret;							\
    653	struct scsi_device *sdev;					\
    654	ret = scsi_sdev_check_buf_bit(buf);				\
    655	if (ret >= 0)	{						\
    656		sdev = to_scsi_device(dev);				\
    657		sdev->field = ret;					\
    658		ret = count;						\
    659	}								\
    660	return ret;							\
    661}									\
    662static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##field);
    663
    664/*
    665 * scsi_sdev_check_buf_bit: return 0 if buf is "0", return 1 if buf is "1",
    666 * else return -EINVAL.
    667 */
    668static int scsi_sdev_check_buf_bit(const char *buf)
    669{
    670	if ((buf[1] == '\0') || ((buf[1] == '\n') && (buf[2] == '\0'))) {
    671		if (buf[0] == '1')
    672			return 1;
    673		else if (buf[0] == '0')
    674			return 0;
    675		else 
    676			return -EINVAL;
    677	} else
    678		return -EINVAL;
    679}
    680#endif
    681/*
    682 * Create the actual show/store functions and data structures.
    683 */
    684sdev_rd_attr (type, "%d\n");
    685sdev_rd_attr (scsi_level, "%d\n");
    686sdev_rd_attr (vendor, "%.8s\n");
    687sdev_rd_attr (model, "%.16s\n");
    688sdev_rd_attr (rev, "%.4s\n");
    689
    690static ssize_t
    691sdev_show_device_busy(struct device *dev, struct device_attribute *attr,
    692		char *buf)
    693{
    694	struct scsi_device *sdev = to_scsi_device(dev);
    695	return snprintf(buf, 20, "%d\n", scsi_device_busy(sdev));
    696}
    697static DEVICE_ATTR(device_busy, S_IRUGO, sdev_show_device_busy, NULL);
    698
    699static ssize_t
    700sdev_show_device_blocked(struct device *dev, struct device_attribute *attr,
    701		char *buf)
    702{
    703	struct scsi_device *sdev = to_scsi_device(dev);
    704	return snprintf(buf, 20, "%d\n", atomic_read(&sdev->device_blocked));
    705}
    706static DEVICE_ATTR(device_blocked, S_IRUGO, sdev_show_device_blocked, NULL);
    707
    708/*
    709 * TODO: can we make these symlinks to the block layer ones?
    710 */
    711static ssize_t
    712sdev_show_timeout (struct device *dev, struct device_attribute *attr, char *buf)
    713{
    714	struct scsi_device *sdev;
    715	sdev = to_scsi_device(dev);
    716	return snprintf(buf, 20, "%d\n", sdev->request_queue->rq_timeout / HZ);
    717}
    718
    719static ssize_t
    720sdev_store_timeout (struct device *dev, struct device_attribute *attr,
    721		    const char *buf, size_t count)
    722{
    723	struct scsi_device *sdev;
    724	int timeout;
    725	sdev = to_scsi_device(dev);
    726	sscanf (buf, "%d\n", &timeout);
    727	blk_queue_rq_timeout(sdev->request_queue, timeout * HZ);
    728	return count;
    729}
    730static DEVICE_ATTR(timeout, S_IRUGO | S_IWUSR, sdev_show_timeout, sdev_store_timeout);
    731
    732static ssize_t
    733sdev_show_eh_timeout(struct device *dev, struct device_attribute *attr, char *buf)
    734{
    735	struct scsi_device *sdev;
    736	sdev = to_scsi_device(dev);
    737	return snprintf(buf, 20, "%u\n", sdev->eh_timeout / HZ);
    738}
    739
    740static ssize_t
    741sdev_store_eh_timeout(struct device *dev, struct device_attribute *attr,
    742		    const char *buf, size_t count)
    743{
    744	struct scsi_device *sdev;
    745	unsigned int eh_timeout;
    746	int err;
    747
    748	if (!capable(CAP_SYS_ADMIN))
    749		return -EACCES;
    750
    751	sdev = to_scsi_device(dev);
    752	err = kstrtouint(buf, 10, &eh_timeout);
    753	if (err)
    754		return err;
    755	sdev->eh_timeout = eh_timeout * HZ;
    756
    757	return count;
    758}
    759static DEVICE_ATTR(eh_timeout, S_IRUGO | S_IWUSR, sdev_show_eh_timeout, sdev_store_eh_timeout);
    760
    761static ssize_t
    762store_rescan_field (struct device *dev, struct device_attribute *attr,
    763		    const char *buf, size_t count)
    764{
    765	scsi_rescan_device(dev);
    766	return count;
    767}
    768static DEVICE_ATTR(rescan, S_IWUSR, NULL, store_rescan_field);
    769
    770static ssize_t
    771sdev_store_delete(struct device *dev, struct device_attribute *attr,
    772		  const char *buf, size_t count)
    773{
    774	struct kernfs_node *kn;
    775	struct scsi_device *sdev = to_scsi_device(dev);
    776
    777	/*
    778	 * We need to try to get module, avoiding the module been removed
    779	 * during delete.
    780	 */
    781	if (scsi_device_get(sdev))
    782		return -ENODEV;
    783
    784	kn = sysfs_break_active_protection(&dev->kobj, &attr->attr);
    785	WARN_ON_ONCE(!kn);
    786	/*
    787	 * Concurrent writes into the "delete" sysfs attribute may trigger
    788	 * concurrent calls to device_remove_file() and scsi_remove_device().
    789	 * device_remove_file() handles concurrent removal calls by
    790	 * serializing these and by ignoring the second and later removal
    791	 * attempts.  Concurrent calls of scsi_remove_device() are
    792	 * serialized. The second and later calls of scsi_remove_device() are
    793	 * ignored because the first call of that function changes the device
    794	 * state into SDEV_DEL.
    795	 */
    796	device_remove_file(dev, attr);
    797	scsi_remove_device(sdev);
    798	if (kn)
    799		sysfs_unbreak_active_protection(kn);
    800	scsi_device_put(sdev);
    801	return count;
    802};
    803static DEVICE_ATTR(delete, S_IWUSR, NULL, sdev_store_delete);
    804
    805static ssize_t
    806store_state_field(struct device *dev, struct device_attribute *attr,
    807		  const char *buf, size_t count)
    808{
    809	int i, ret;
    810	struct scsi_device *sdev = to_scsi_device(dev);
    811	enum scsi_device_state state = 0;
    812	bool rescan_dev = false;
    813
    814	for (i = 0; i < ARRAY_SIZE(sdev_states); i++) {
    815		const int len = strlen(sdev_states[i].name);
    816		if (strncmp(sdev_states[i].name, buf, len) == 0 &&
    817		   buf[len] == '\n') {
    818			state = sdev_states[i].value;
    819			break;
    820		}
    821	}
    822	switch (state) {
    823	case SDEV_RUNNING:
    824	case SDEV_OFFLINE:
    825		break;
    826	default:
    827		return -EINVAL;
    828	}
    829
    830	mutex_lock(&sdev->state_mutex);
    831	if (sdev->sdev_state == SDEV_RUNNING && state == SDEV_RUNNING) {
    832		ret = 0;
    833	} else {
    834		ret = scsi_device_set_state(sdev, state);
    835		if (ret == 0 && state == SDEV_RUNNING)
    836			rescan_dev = true;
    837	}
    838	mutex_unlock(&sdev->state_mutex);
    839
    840	if (rescan_dev) {
    841		/*
    842		 * If the device state changes to SDEV_RUNNING, we need to
    843		 * run the queue to avoid I/O hang, and rescan the device
    844		 * to revalidate it. Running the queue first is necessary
    845		 * because another thread may be waiting inside
    846		 * blk_mq_freeze_queue_wait() and because that call may be
    847		 * waiting for pending I/O to finish.
    848		 */
    849		blk_mq_run_hw_queues(sdev->request_queue, true);
    850		scsi_rescan_device(dev);
    851	}
    852
    853	return ret == 0 ? count : -EINVAL;
    854}
    855
    856static ssize_t
    857show_state_field(struct device *dev, struct device_attribute *attr, char *buf)
    858{
    859	struct scsi_device *sdev = to_scsi_device(dev);
    860	const char *name = scsi_device_state_name(sdev->sdev_state);
    861
    862	if (!name)
    863		return -EINVAL;
    864
    865	return snprintf(buf, 20, "%s\n", name);
    866}
    867
    868static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, show_state_field, store_state_field);
    869
    870static ssize_t
    871show_queue_type_field(struct device *dev, struct device_attribute *attr,
    872		      char *buf)
    873{
    874	struct scsi_device *sdev = to_scsi_device(dev);
    875	const char *name = "none";
    876
    877	if (sdev->simple_tags)
    878		name = "simple";
    879
    880	return snprintf(buf, 20, "%s\n", name);
    881}
    882
    883static ssize_t
    884store_queue_type_field(struct device *dev, struct device_attribute *attr,
    885		       const char *buf, size_t count)
    886{
    887	struct scsi_device *sdev = to_scsi_device(dev);
    888
    889	if (!sdev->tagged_supported)
    890		return -EINVAL;
    891		
    892	sdev_printk(KERN_INFO, sdev,
    893		    "ignoring write to deprecated queue_type attribute");
    894	return count;
    895}
    896
    897static DEVICE_ATTR(queue_type, S_IRUGO | S_IWUSR, show_queue_type_field,
    898		   store_queue_type_field);
    899
    900#define sdev_vpd_pg_attr(_page)						\
    901static ssize_t							\
    902show_vpd_##_page(struct file *filp, struct kobject *kobj,	\
    903		 struct bin_attribute *bin_attr,			\
    904		 char *buf, loff_t off, size_t count)			\
    905{									\
    906	struct device *dev = kobj_to_dev(kobj);				\
    907	struct scsi_device *sdev = to_scsi_device(dev);			\
    908	struct scsi_vpd *vpd_page;					\
    909	int ret = -EINVAL;						\
    910									\
    911	rcu_read_lock();						\
    912	vpd_page = rcu_dereference(sdev->vpd_##_page);			\
    913	if (vpd_page)							\
    914		ret = memory_read_from_buffer(buf, count, &off,		\
    915				vpd_page->data, vpd_page->len);		\
    916	rcu_read_unlock();						\
    917	return ret;							\
    918}									\
    919static struct bin_attribute dev_attr_vpd_##_page = {		\
    920	.attr =	{.name = __stringify(vpd_##_page), .mode = S_IRUGO },	\
    921	.size = 0,							\
    922	.read = show_vpd_##_page,					\
    923};
    924
    925sdev_vpd_pg_attr(pg83);
    926sdev_vpd_pg_attr(pg80);
    927sdev_vpd_pg_attr(pg89);
    928sdev_vpd_pg_attr(pgb0);
    929sdev_vpd_pg_attr(pgb1);
    930sdev_vpd_pg_attr(pgb2);
    931sdev_vpd_pg_attr(pg0);
    932
    933static ssize_t show_inquiry(struct file *filep, struct kobject *kobj,
    934			    struct bin_attribute *bin_attr,
    935			    char *buf, loff_t off, size_t count)
    936{
    937	struct device *dev = kobj_to_dev(kobj);
    938	struct scsi_device *sdev = to_scsi_device(dev);
    939
    940	if (!sdev->inquiry)
    941		return -EINVAL;
    942
    943	return memory_read_from_buffer(buf, count, &off, sdev->inquiry,
    944				       sdev->inquiry_len);
    945}
    946
    947static struct bin_attribute dev_attr_inquiry = {
    948	.attr = {
    949		.name = "inquiry",
    950		.mode = S_IRUGO,
    951	},
    952	.size = 0,
    953	.read = show_inquiry,
    954};
    955
    956static ssize_t
    957show_iostat_counterbits(struct device *dev, struct device_attribute *attr,
    958			char *buf)
    959{
    960	return snprintf(buf, 20, "%d\n", (int)sizeof(atomic_t) * 8);
    961}
    962
    963static DEVICE_ATTR(iocounterbits, S_IRUGO, show_iostat_counterbits, NULL);
    964
    965#define show_sdev_iostat(field)						\
    966static ssize_t								\
    967show_iostat_##field(struct device *dev, struct device_attribute *attr,	\
    968		    char *buf)						\
    969{									\
    970	struct scsi_device *sdev = to_scsi_device(dev);			\
    971	unsigned long long count = atomic_read(&sdev->field);		\
    972	return snprintf(buf, 20, "0x%llx\n", count);			\
    973}									\
    974static DEVICE_ATTR(field, S_IRUGO, show_iostat_##field, NULL)
    975
    976show_sdev_iostat(iorequest_cnt);
    977show_sdev_iostat(iodone_cnt);
    978show_sdev_iostat(ioerr_cnt);
    979
    980static ssize_t
    981sdev_show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
    982{
    983	struct scsi_device *sdev;
    984	sdev = to_scsi_device(dev);
    985	return snprintf (buf, 20, SCSI_DEVICE_MODALIAS_FMT "\n", sdev->type);
    986}
    987static DEVICE_ATTR(modalias, S_IRUGO, sdev_show_modalias, NULL);
    988
    989#define DECLARE_EVT_SHOW(name, Cap_name)				\
    990static ssize_t								\
    991sdev_show_evt_##name(struct device *dev, struct device_attribute *attr,	\
    992		     char *buf)						\
    993{									\
    994	struct scsi_device *sdev = to_scsi_device(dev);			\
    995	int val = test_bit(SDEV_EVT_##Cap_name, sdev->supported_events);\
    996	return snprintf(buf, 20, "%d\n", val);				\
    997}
    998
    999#define DECLARE_EVT_STORE(name, Cap_name)				\
   1000static ssize_t								\
   1001sdev_store_evt_##name(struct device *dev, struct device_attribute *attr,\
   1002		      const char *buf, size_t count)			\
   1003{									\
   1004	struct scsi_device *sdev = to_scsi_device(dev);			\
   1005	int val = simple_strtoul(buf, NULL, 0);				\
   1006	if (val == 0)							\
   1007		clear_bit(SDEV_EVT_##Cap_name, sdev->supported_events);	\
   1008	else if (val == 1)						\
   1009		set_bit(SDEV_EVT_##Cap_name, sdev->supported_events);	\
   1010	else								\
   1011		return -EINVAL;						\
   1012	return count;							\
   1013}
   1014
   1015#define DECLARE_EVT(name, Cap_name)					\
   1016	DECLARE_EVT_SHOW(name, Cap_name)				\
   1017	DECLARE_EVT_STORE(name, Cap_name)				\
   1018	static DEVICE_ATTR(evt_##name, S_IRUGO, sdev_show_evt_##name,	\
   1019			   sdev_store_evt_##name);
   1020#define REF_EVT(name) &dev_attr_evt_##name.attr
   1021
   1022DECLARE_EVT(media_change, MEDIA_CHANGE)
   1023DECLARE_EVT(inquiry_change_reported, INQUIRY_CHANGE_REPORTED)
   1024DECLARE_EVT(capacity_change_reported, CAPACITY_CHANGE_REPORTED)
   1025DECLARE_EVT(soft_threshold_reached, SOFT_THRESHOLD_REACHED_REPORTED)
   1026DECLARE_EVT(mode_parameter_change_reported, MODE_PARAMETER_CHANGE_REPORTED)
   1027DECLARE_EVT(lun_change_reported, LUN_CHANGE_REPORTED)
   1028
   1029static ssize_t
   1030sdev_store_queue_depth(struct device *dev, struct device_attribute *attr,
   1031		       const char *buf, size_t count)
   1032{
   1033	int depth, retval;
   1034	struct scsi_device *sdev = to_scsi_device(dev);
   1035	struct scsi_host_template *sht = sdev->host->hostt;
   1036
   1037	if (!sht->change_queue_depth)
   1038		return -EINVAL;
   1039
   1040	depth = simple_strtoul(buf, NULL, 0);
   1041
   1042	if (depth < 1 || depth > sdev->host->can_queue)
   1043		return -EINVAL;
   1044
   1045	retval = sht->change_queue_depth(sdev, depth);
   1046	if (retval < 0)
   1047		return retval;
   1048
   1049	sdev->max_queue_depth = sdev->queue_depth;
   1050
   1051	return count;
   1052}
   1053sdev_show_function(queue_depth, "%d\n");
   1054
   1055static DEVICE_ATTR(queue_depth, S_IRUGO | S_IWUSR, sdev_show_queue_depth,
   1056		   sdev_store_queue_depth);
   1057
   1058static ssize_t
   1059sdev_show_wwid(struct device *dev, struct device_attribute *attr,
   1060		    char *buf)
   1061{
   1062	struct scsi_device *sdev = to_scsi_device(dev);
   1063	ssize_t count;
   1064
   1065	count = scsi_vpd_lun_id(sdev, buf, PAGE_SIZE);
   1066	if (count > 0) {
   1067		buf[count] = '\n';
   1068		count++;
   1069	}
   1070	return count;
   1071}
   1072static DEVICE_ATTR(wwid, S_IRUGO, sdev_show_wwid, NULL);
   1073
   1074#define BLIST_FLAG_NAME(name)					\
   1075	[const_ilog2((__force __u64)BLIST_##name)] = #name
   1076static const char *const sdev_bflags_name[] = {
   1077#include "scsi_devinfo_tbl.c"
   1078};
   1079#undef BLIST_FLAG_NAME
   1080
   1081static ssize_t
   1082sdev_show_blacklist(struct device *dev, struct device_attribute *attr,
   1083		    char *buf)
   1084{
   1085	struct scsi_device *sdev = to_scsi_device(dev);
   1086	int i;
   1087	ssize_t len = 0;
   1088
   1089	for (i = 0; i < sizeof(sdev->sdev_bflags) * BITS_PER_BYTE; i++) {
   1090		const char *name = NULL;
   1091
   1092		if (!(sdev->sdev_bflags & (__force blist_flags_t)BIT(i)))
   1093			continue;
   1094		if (i < ARRAY_SIZE(sdev_bflags_name) && sdev_bflags_name[i])
   1095			name = sdev_bflags_name[i];
   1096
   1097		if (name)
   1098			len += scnprintf(buf + len, PAGE_SIZE - len,
   1099					 "%s%s", len ? " " : "", name);
   1100		else
   1101			len += scnprintf(buf + len, PAGE_SIZE - len,
   1102					 "%sINVALID_BIT(%d)", len ? " " : "", i);
   1103	}
   1104	if (len)
   1105		len += scnprintf(buf + len, PAGE_SIZE - len, "\n");
   1106	return len;
   1107}
   1108static DEVICE_ATTR(blacklist, S_IRUGO, sdev_show_blacklist, NULL);
   1109
   1110#ifdef CONFIG_SCSI_DH
   1111static ssize_t
   1112sdev_show_dh_state(struct device *dev, struct device_attribute *attr,
   1113		   char *buf)
   1114{
   1115	struct scsi_device *sdev = to_scsi_device(dev);
   1116
   1117	if (!sdev->handler)
   1118		return snprintf(buf, 20, "detached\n");
   1119
   1120	return snprintf(buf, 20, "%s\n", sdev->handler->name);
   1121}
   1122
   1123static ssize_t
   1124sdev_store_dh_state(struct device *dev, struct device_attribute *attr,
   1125		    const char *buf, size_t count)
   1126{
   1127	struct scsi_device *sdev = to_scsi_device(dev);
   1128	int err = -EINVAL;
   1129
   1130	if (sdev->sdev_state == SDEV_CANCEL ||
   1131	    sdev->sdev_state == SDEV_DEL)
   1132		return -ENODEV;
   1133
   1134	if (!sdev->handler) {
   1135		/*
   1136		 * Attach to a device handler
   1137		 */
   1138		err = scsi_dh_attach(sdev->request_queue, buf);
   1139	} else if (!strncmp(buf, "activate", 8)) {
   1140		/*
   1141		 * Activate a device handler
   1142		 */
   1143		if (sdev->handler->activate)
   1144			err = sdev->handler->activate(sdev, NULL, NULL);
   1145		else
   1146			err = 0;
   1147	} else if (!strncmp(buf, "detach", 6)) {
   1148		/*
   1149		 * Detach from a device handler
   1150		 */
   1151		sdev_printk(KERN_WARNING, sdev,
   1152			    "can't detach handler %s.\n",
   1153			    sdev->handler->name);
   1154		err = -EINVAL;
   1155	}
   1156
   1157	return err < 0 ? err : count;
   1158}
   1159
   1160static DEVICE_ATTR(dh_state, S_IRUGO | S_IWUSR, sdev_show_dh_state,
   1161		   sdev_store_dh_state);
   1162
   1163static ssize_t
   1164sdev_show_access_state(struct device *dev,
   1165		       struct device_attribute *attr,
   1166		       char *buf)
   1167{
   1168	struct scsi_device *sdev = to_scsi_device(dev);
   1169	unsigned char access_state;
   1170	const char *access_state_name;
   1171
   1172	if (!sdev->handler)
   1173		return -EINVAL;
   1174
   1175	access_state = (sdev->access_state & SCSI_ACCESS_STATE_MASK);
   1176	access_state_name = scsi_access_state_name(access_state);
   1177
   1178	return sprintf(buf, "%s\n",
   1179		       access_state_name ? access_state_name : "unknown");
   1180}
   1181static DEVICE_ATTR(access_state, S_IRUGO, sdev_show_access_state, NULL);
   1182
   1183static ssize_t
   1184sdev_show_preferred_path(struct device *dev,
   1185			 struct device_attribute *attr,
   1186			 char *buf)
   1187{
   1188	struct scsi_device *sdev = to_scsi_device(dev);
   1189
   1190	if (!sdev->handler)
   1191		return -EINVAL;
   1192
   1193	if (sdev->access_state & SCSI_ACCESS_STATE_PREFERRED)
   1194		return sprintf(buf, "1\n");
   1195	else
   1196		return sprintf(buf, "0\n");
   1197}
   1198static DEVICE_ATTR(preferred_path, S_IRUGO, sdev_show_preferred_path, NULL);
   1199#endif
   1200
   1201static ssize_t
   1202sdev_show_queue_ramp_up_period(struct device *dev,
   1203			       struct device_attribute *attr,
   1204			       char *buf)
   1205{
   1206	struct scsi_device *sdev;
   1207	sdev = to_scsi_device(dev);
   1208	return snprintf(buf, 20, "%u\n",
   1209			jiffies_to_msecs(sdev->queue_ramp_up_period));
   1210}
   1211
   1212static ssize_t
   1213sdev_store_queue_ramp_up_period(struct device *dev,
   1214				struct device_attribute *attr,
   1215				const char *buf, size_t count)
   1216{
   1217	struct scsi_device *sdev = to_scsi_device(dev);
   1218	unsigned int period;
   1219
   1220	if (kstrtouint(buf, 10, &period))
   1221		return -EINVAL;
   1222
   1223	sdev->queue_ramp_up_period = msecs_to_jiffies(period);
   1224	return count;
   1225}
   1226
   1227static DEVICE_ATTR(queue_ramp_up_period, S_IRUGO | S_IWUSR,
   1228		   sdev_show_queue_ramp_up_period,
   1229		   sdev_store_queue_ramp_up_period);
   1230
   1231static umode_t scsi_sdev_attr_is_visible(struct kobject *kobj,
   1232					 struct attribute *attr, int i)
   1233{
   1234	struct device *dev = kobj_to_dev(kobj);
   1235	struct scsi_device *sdev = to_scsi_device(dev);
   1236
   1237
   1238	if (attr == &dev_attr_queue_depth.attr &&
   1239	    !sdev->host->hostt->change_queue_depth)
   1240		return S_IRUGO;
   1241
   1242	if (attr == &dev_attr_queue_ramp_up_period.attr &&
   1243	    !sdev->host->hostt->change_queue_depth)
   1244		return 0;
   1245
   1246	return attr->mode;
   1247}
   1248
   1249static umode_t scsi_sdev_bin_attr_is_visible(struct kobject *kobj,
   1250					     struct bin_attribute *attr, int i)
   1251{
   1252	struct device *dev = kobj_to_dev(kobj);
   1253	struct scsi_device *sdev = to_scsi_device(dev);
   1254
   1255
   1256	if (attr == &dev_attr_vpd_pg0 && !sdev->vpd_pg0)
   1257		return 0;
   1258
   1259	if (attr == &dev_attr_vpd_pg80 && !sdev->vpd_pg80)
   1260		return 0;
   1261
   1262	if (attr == &dev_attr_vpd_pg83 && !sdev->vpd_pg83)
   1263		return 0;
   1264
   1265	if (attr == &dev_attr_vpd_pg89 && !sdev->vpd_pg89)
   1266		return 0;
   1267
   1268	if (attr == &dev_attr_vpd_pgb0 && !sdev->vpd_pgb0)
   1269		return 0;
   1270
   1271	if (attr == &dev_attr_vpd_pgb1 && !sdev->vpd_pgb1)
   1272		return 0;
   1273
   1274	if (attr == &dev_attr_vpd_pgb2 && !sdev->vpd_pgb2)
   1275		return 0;
   1276
   1277	return S_IRUGO;
   1278}
   1279
   1280/* Default template for device attributes.  May NOT be modified */
   1281static struct attribute *scsi_sdev_attrs[] = {
   1282	&dev_attr_device_blocked.attr,
   1283	&dev_attr_type.attr,
   1284	&dev_attr_scsi_level.attr,
   1285	&dev_attr_device_busy.attr,
   1286	&dev_attr_vendor.attr,
   1287	&dev_attr_model.attr,
   1288	&dev_attr_rev.attr,
   1289	&dev_attr_rescan.attr,
   1290	&dev_attr_delete.attr,
   1291	&dev_attr_state.attr,
   1292	&dev_attr_timeout.attr,
   1293	&dev_attr_eh_timeout.attr,
   1294	&dev_attr_iocounterbits.attr,
   1295	&dev_attr_iorequest_cnt.attr,
   1296	&dev_attr_iodone_cnt.attr,
   1297	&dev_attr_ioerr_cnt.attr,
   1298	&dev_attr_modalias.attr,
   1299	&dev_attr_queue_depth.attr,
   1300	&dev_attr_queue_type.attr,
   1301	&dev_attr_wwid.attr,
   1302	&dev_attr_blacklist.attr,
   1303#ifdef CONFIG_SCSI_DH
   1304	&dev_attr_dh_state.attr,
   1305	&dev_attr_access_state.attr,
   1306	&dev_attr_preferred_path.attr,
   1307#endif
   1308	&dev_attr_queue_ramp_up_period.attr,
   1309	REF_EVT(media_change),
   1310	REF_EVT(inquiry_change_reported),
   1311	REF_EVT(capacity_change_reported),
   1312	REF_EVT(soft_threshold_reached),
   1313	REF_EVT(mode_parameter_change_reported),
   1314	REF_EVT(lun_change_reported),
   1315	NULL
   1316};
   1317
   1318static struct bin_attribute *scsi_sdev_bin_attrs[] = {
   1319	&dev_attr_vpd_pg0,
   1320	&dev_attr_vpd_pg83,
   1321	&dev_attr_vpd_pg80,
   1322	&dev_attr_vpd_pg89,
   1323	&dev_attr_vpd_pgb0,
   1324	&dev_attr_vpd_pgb1,
   1325	&dev_attr_vpd_pgb2,
   1326	&dev_attr_inquiry,
   1327	NULL
   1328};
   1329static struct attribute_group scsi_sdev_attr_group = {
   1330	.attrs =	scsi_sdev_attrs,
   1331	.bin_attrs =	scsi_sdev_bin_attrs,
   1332	.is_visible =	scsi_sdev_attr_is_visible,
   1333	.is_bin_visible = scsi_sdev_bin_attr_is_visible,
   1334};
   1335
   1336static const struct attribute_group *scsi_sdev_attr_groups[] = {
   1337	&scsi_sdev_attr_group,
   1338	NULL
   1339};
   1340
   1341static int scsi_target_add(struct scsi_target *starget)
   1342{
   1343	int error;
   1344
   1345	if (starget->state != STARGET_CREATED)
   1346		return 0;
   1347
   1348	error = device_add(&starget->dev);
   1349	if (error) {
   1350		dev_err(&starget->dev, "target device_add failed, error %d\n", error);
   1351		return error;
   1352	}
   1353	transport_add_device(&starget->dev);
   1354	starget->state = STARGET_RUNNING;
   1355
   1356	pm_runtime_set_active(&starget->dev);
   1357	pm_runtime_enable(&starget->dev);
   1358	device_enable_async_suspend(&starget->dev);
   1359
   1360	return 0;
   1361}
   1362
   1363/**
   1364 * scsi_sysfs_add_sdev - add scsi device to sysfs
   1365 * @sdev:	scsi_device to add
   1366 *
   1367 * Return value:
   1368 * 	0 on Success / non-zero on Failure
   1369 **/
   1370int scsi_sysfs_add_sdev(struct scsi_device *sdev)
   1371{
   1372	int error;
   1373	struct scsi_target *starget = sdev->sdev_target;
   1374
   1375	error = scsi_target_add(starget);
   1376	if (error)
   1377		return error;
   1378
   1379	transport_configure_device(&starget->dev);
   1380
   1381	device_enable_async_suspend(&sdev->sdev_gendev);
   1382	scsi_autopm_get_target(starget);
   1383	pm_runtime_set_active(&sdev->sdev_gendev);
   1384	if (!sdev->rpm_autosuspend)
   1385		pm_runtime_forbid(&sdev->sdev_gendev);
   1386	pm_runtime_enable(&sdev->sdev_gendev);
   1387	scsi_autopm_put_target(starget);
   1388
   1389	scsi_autopm_get_device(sdev);
   1390
   1391	scsi_dh_add_device(sdev);
   1392
   1393	error = device_add(&sdev->sdev_gendev);
   1394	if (error) {
   1395		sdev_printk(KERN_INFO, sdev,
   1396				"failed to add device: %d\n", error);
   1397		return error;
   1398	}
   1399
   1400	device_enable_async_suspend(&sdev->sdev_dev);
   1401	error = device_add(&sdev->sdev_dev);
   1402	if (error) {
   1403		sdev_printk(KERN_INFO, sdev,
   1404				"failed to add class device: %d\n", error);
   1405		device_del(&sdev->sdev_gendev);
   1406		return error;
   1407	}
   1408	transport_add_device(&sdev->sdev_gendev);
   1409	sdev->is_visible = 1;
   1410
   1411	if (IS_ENABLED(CONFIG_BLK_DEV_BSG)) {
   1412		sdev->bsg_dev = scsi_bsg_register_queue(sdev);
   1413		if (IS_ERR(sdev->bsg_dev)) {
   1414			error = PTR_ERR(sdev->bsg_dev);
   1415			sdev_printk(KERN_INFO, sdev,
   1416				    "Failed to register bsg queue, errno=%d\n",
   1417				    error);
   1418			sdev->bsg_dev = NULL;
   1419		}
   1420	}
   1421
   1422	scsi_autopm_put_device(sdev);
   1423	return error;
   1424}
   1425
   1426void __scsi_remove_device(struct scsi_device *sdev)
   1427{
   1428	struct device *dev = &sdev->sdev_gendev;
   1429	int res;
   1430
   1431	/*
   1432	 * This cleanup path is not reentrant and while it is impossible
   1433	 * to get a new reference with scsi_device_get() someone can still
   1434	 * hold a previously acquired one.
   1435	 */
   1436	if (sdev->sdev_state == SDEV_DEL)
   1437		return;
   1438
   1439	if (sdev->is_visible) {
   1440		/*
   1441		 * If scsi_internal_target_block() is running concurrently,
   1442		 * wait until it has finished before changing the device state.
   1443		 */
   1444		mutex_lock(&sdev->state_mutex);
   1445		/*
   1446		 * If blocked, we go straight to DEL and restart the queue so
   1447		 * any commands issued during driver shutdown (like sync
   1448		 * cache) are errored immediately.
   1449		 */
   1450		res = scsi_device_set_state(sdev, SDEV_CANCEL);
   1451		if (res != 0) {
   1452			res = scsi_device_set_state(sdev, SDEV_DEL);
   1453			if (res == 0)
   1454				scsi_start_queue(sdev);
   1455		}
   1456		mutex_unlock(&sdev->state_mutex);
   1457
   1458		if (res != 0)
   1459			return;
   1460
   1461		if (IS_ENABLED(CONFIG_BLK_DEV_BSG) && sdev->bsg_dev)
   1462			bsg_unregister_queue(sdev->bsg_dev);
   1463		device_unregister(&sdev->sdev_dev);
   1464		transport_remove_device(dev);
   1465		device_del(dev);
   1466	} else
   1467		put_device(&sdev->sdev_dev);
   1468
   1469	/*
   1470	 * Stop accepting new requests and wait until all queuecommand() and
   1471	 * scsi_run_queue() invocations have finished before tearing down the
   1472	 * device.
   1473	 */
   1474	mutex_lock(&sdev->state_mutex);
   1475	scsi_device_set_state(sdev, SDEV_DEL);
   1476	mutex_unlock(&sdev->state_mutex);
   1477
   1478	blk_cleanup_queue(sdev->request_queue);
   1479	cancel_work_sync(&sdev->requeue_work);
   1480
   1481	if (sdev->host->hostt->slave_destroy)
   1482		sdev->host->hostt->slave_destroy(sdev);
   1483	transport_destroy_device(dev);
   1484
   1485	/*
   1486	 * Paired with the kref_get() in scsi_sysfs_initialize().  We have
   1487	 * removed sysfs visibility from the device, so make the target
   1488	 * invisible if this was the last device underneath it.
   1489	 */
   1490	scsi_target_reap(scsi_target(sdev));
   1491
   1492	put_device(dev);
   1493}
   1494
   1495/**
   1496 * scsi_remove_device - unregister a device from the scsi bus
   1497 * @sdev:	scsi_device to unregister
   1498 **/
   1499void scsi_remove_device(struct scsi_device *sdev)
   1500{
   1501	struct Scsi_Host *shost = sdev->host;
   1502
   1503	mutex_lock(&shost->scan_mutex);
   1504	__scsi_remove_device(sdev);
   1505	mutex_unlock(&shost->scan_mutex);
   1506}
   1507EXPORT_SYMBOL(scsi_remove_device);
   1508
   1509static void __scsi_remove_target(struct scsi_target *starget)
   1510{
   1511	struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
   1512	unsigned long flags;
   1513	struct scsi_device *sdev;
   1514
   1515	spin_lock_irqsave(shost->host_lock, flags);
   1516 restart:
   1517	list_for_each_entry(sdev, &shost->__devices, siblings) {
   1518		/*
   1519		 * We cannot call scsi_device_get() here, as
   1520		 * we might've been called from rmmod() causing
   1521		 * scsi_device_get() to fail the module_is_live()
   1522		 * check.
   1523		 */
   1524		if (sdev->channel != starget->channel ||
   1525		    sdev->id != starget->id)
   1526			continue;
   1527		if (sdev->sdev_state == SDEV_DEL ||
   1528		    sdev->sdev_state == SDEV_CANCEL ||
   1529		    !get_device(&sdev->sdev_gendev))
   1530			continue;
   1531		spin_unlock_irqrestore(shost->host_lock, flags);
   1532		scsi_remove_device(sdev);
   1533		put_device(&sdev->sdev_gendev);
   1534		spin_lock_irqsave(shost->host_lock, flags);
   1535		goto restart;
   1536	}
   1537	spin_unlock_irqrestore(shost->host_lock, flags);
   1538}
   1539
   1540/**
   1541 * scsi_remove_target - try to remove a target and all its devices
   1542 * @dev: generic starget or parent of generic stargets to be removed
   1543 *
   1544 * Note: This is slightly racy.  It is possible that if the user
   1545 * requests the addition of another device then the target won't be
   1546 * removed.
   1547 */
   1548void scsi_remove_target(struct device *dev)
   1549{
   1550	struct Scsi_Host *shost = dev_to_shost(dev->parent);
   1551	struct scsi_target *starget;
   1552	unsigned long flags;
   1553
   1554restart:
   1555	spin_lock_irqsave(shost->host_lock, flags);
   1556	list_for_each_entry(starget, &shost->__targets, siblings) {
   1557		if (starget->state == STARGET_DEL ||
   1558		    starget->state == STARGET_REMOVE ||
   1559		    starget->state == STARGET_CREATED_REMOVE)
   1560			continue;
   1561		if (starget->dev.parent == dev || &starget->dev == dev) {
   1562			kref_get(&starget->reap_ref);
   1563			if (starget->state == STARGET_CREATED)
   1564				starget->state = STARGET_CREATED_REMOVE;
   1565			else
   1566				starget->state = STARGET_REMOVE;
   1567			spin_unlock_irqrestore(shost->host_lock, flags);
   1568			__scsi_remove_target(starget);
   1569			scsi_target_reap(starget);
   1570			goto restart;
   1571		}
   1572	}
   1573	spin_unlock_irqrestore(shost->host_lock, flags);
   1574}
   1575EXPORT_SYMBOL(scsi_remove_target);
   1576
   1577int scsi_register_driver(struct device_driver *drv)
   1578{
   1579	drv->bus = &scsi_bus_type;
   1580
   1581	return driver_register(drv);
   1582}
   1583EXPORT_SYMBOL(scsi_register_driver);
   1584
   1585int scsi_register_interface(struct class_interface *intf)
   1586{
   1587	intf->class = &sdev_class;
   1588
   1589	return class_interface_register(intf);
   1590}
   1591EXPORT_SYMBOL(scsi_register_interface);
   1592
   1593/**
   1594 * scsi_sysfs_add_host - add scsi host to subsystem
   1595 * @shost:     scsi host struct to add to subsystem
   1596 **/
   1597int scsi_sysfs_add_host(struct Scsi_Host *shost)
   1598{
   1599	transport_register_device(&shost->shost_gendev);
   1600	transport_configure_device(&shost->shost_gendev);
   1601	return 0;
   1602}
   1603
   1604static struct device_type scsi_dev_type = {
   1605	.name =		"scsi_device",
   1606	.release =	scsi_device_dev_release,
   1607	.groups =	scsi_sdev_attr_groups,
   1608};
   1609
   1610void scsi_sysfs_device_initialize(struct scsi_device *sdev)
   1611{
   1612	unsigned long flags;
   1613	struct Scsi_Host *shost = sdev->host;
   1614	struct scsi_host_template *hostt = shost->hostt;
   1615	struct scsi_target  *starget = sdev->sdev_target;
   1616
   1617	device_initialize(&sdev->sdev_gendev);
   1618	sdev->sdev_gendev.bus = &scsi_bus_type;
   1619	sdev->sdev_gendev.type = &scsi_dev_type;
   1620	scsi_enable_async_suspend(&sdev->sdev_gendev);
   1621	dev_set_name(&sdev->sdev_gendev, "%d:%d:%d:%llu",
   1622		     sdev->host->host_no, sdev->channel, sdev->id, sdev->lun);
   1623	sdev->sdev_gendev.groups = hostt->sdev_groups;
   1624
   1625	device_initialize(&sdev->sdev_dev);
   1626	sdev->sdev_dev.parent = get_device(&sdev->sdev_gendev);
   1627	sdev->sdev_dev.class = &sdev_class;
   1628	dev_set_name(&sdev->sdev_dev, "%d:%d:%d:%llu",
   1629		     sdev->host->host_no, sdev->channel, sdev->id, sdev->lun);
   1630	/*
   1631	 * Get a default scsi_level from the target (derived from sibling
   1632	 * devices).  This is the best we can do for guessing how to set
   1633	 * sdev->lun_in_cdb for the initial INQUIRY command.  For LUN 0 the
   1634	 * setting doesn't matter, because all the bits are zero anyway.
   1635	 * But it does matter for higher LUNs.
   1636	 */
   1637	sdev->scsi_level = starget->scsi_level;
   1638	if (sdev->scsi_level <= SCSI_2 &&
   1639			sdev->scsi_level != SCSI_UNKNOWN &&
   1640			!shost->no_scsi2_lun_in_cdb)
   1641		sdev->lun_in_cdb = 1;
   1642
   1643	transport_setup_device(&sdev->sdev_gendev);
   1644	spin_lock_irqsave(shost->host_lock, flags);
   1645	list_add_tail(&sdev->same_target_siblings, &starget->devices);
   1646	list_add_tail(&sdev->siblings, &shost->__devices);
   1647	spin_unlock_irqrestore(shost->host_lock, flags);
   1648	/*
   1649	 * device can now only be removed via __scsi_remove_device() so hold
   1650	 * the target.  Target will be held in CREATED state until something
   1651	 * beneath it becomes visible (in which case it moves to RUNNING)
   1652	 */
   1653	kref_get(&starget->reap_ref);
   1654}
   1655
   1656int scsi_is_sdev_device(const struct device *dev)
   1657{
   1658	return dev->type == &scsi_dev_type;
   1659}
   1660EXPORT_SYMBOL(scsi_is_sdev_device);
   1661
   1662/* A blank transport template that is used in drivers that don't
   1663 * yet implement Transport Attributes */
   1664struct scsi_transport_template blank_transport_template = { { { {NULL, }, }, }, };