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  
30  static const struct device_type scsi_dev_type;
31  
32  static 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  
scsi_device_state_name(enum scsi_device_state state)47  const 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  
61  static 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  };
scsi_host_state_name(enum scsi_host_state state)73  const 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
88  static 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  
scsi_access_state_name(unsigned char state)101  static 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  
check_set(unsigned long long * val,char * src)116  static 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  
scsi_scan(struct Scsi_Host * shost,const char * str)133  static 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)			\
161  static ssize_t								\
162  show_##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)			\
175  static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL);
176  
177  #define shost_rd_attr(field, format_string) \
178  shost_rd_attr2(field, field, format_string)
179  
180  /*
181   * Create the actual show/store functions and data structures.
182   */
183  
184  static ssize_t
store_scan(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)185  store_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  };
196  static DEVICE_ATTR(scan, S_IWUSR, NULL, store_scan);
197  
198  static ssize_t
store_shost_state(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)199  store_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  
222  static ssize_t
show_shost_state(struct device * dev,struct device_attribute * attr,char * buf)223  show_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 */
235  static struct device_attribute dev_attr_hstate =
236  	__ATTR(state, S_IRUGO | S_IWUSR, show_shost_state, store_shost_state);
237  
238  static ssize_t
show_shost_mode(unsigned int mode,char * buf)239  show_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  
254  static ssize_t
show_shost_supported_mode(struct device * dev,struct device_attribute * attr,char * buf)255  show_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  
268  static DEVICE_ATTR(supported_mode, S_IRUGO | S_IWUSR, show_shost_supported_mode, NULL);
269  
270  static ssize_t
show_shost_active_mode(struct device * dev,struct device_attribute * attr,char * buf)271  show_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  
282  static DEVICE_ATTR(active_mode, S_IRUGO | S_IWUSR, show_shost_active_mode, NULL);
283  
check_reset_type(const char * str)284  static 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  
294  static ssize_t
store_host_reset(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)295  store_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  	const 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  
312  exit_store_host_reset:
313  	if (ret == 0)
314  		ret = count;
315  	return ret;
316  }
317  
318  static DEVICE_ATTR(host_reset, S_IWUSR, NULL, store_host_reset);
319  
320  static ssize_t
show_shost_eh_deadline(struct device * dev,struct device_attribute * attr,char * buf)321  show_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  
331  static ssize_t
store_shost_eh_deadline(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)332  store_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  
370  static DEVICE_ATTR(eh_deadline, S_IRUGO | S_IWUSR, show_shost_eh_deadline, store_shost_eh_deadline);
371  
372  shost_rd_attr(unique_id, "%u\n");
373  shost_rd_attr(cmd_per_lun, "%hd\n");
374  shost_rd_attr(can_queue, "%d\n");
375  shost_rd_attr(sg_tablesize, "%hu\n");
376  shost_rd_attr(sg_prot_tablesize, "%hu\n");
377  shost_rd_attr(prot_capabilities, "%u\n");
378  shost_rd_attr(prot_guard_type, "%hd\n");
379  shost_rd_attr2(proc_name, hostt->proc_name, "%s\n");
380  
381  static ssize_t
show_host_busy(struct device * dev,struct device_attribute * attr,char * buf)382  show_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  }
387  static DEVICE_ATTR(host_busy, S_IRUGO, show_host_busy, NULL);
388  
389  static ssize_t
show_use_blk_mq(struct device * dev,struct device_attribute * attr,char * buf)390  show_use_blk_mq(struct device *dev, struct device_attribute *attr, char *buf)
391  {
392  	return sprintf(buf, "1\n");
393  }
394  static DEVICE_ATTR(use_blk_mq, S_IRUGO, show_use_blk_mq, NULL);
395  
396  static ssize_t
show_nr_hw_queues(struct device * dev,struct device_attribute * attr,char * buf)397  show_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  }
404  static DEVICE_ATTR(nr_hw_queues, S_IRUGO, show_nr_hw_queues, NULL);
405  
406  static 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  
427  static const struct attribute_group scsi_shost_attr_group = {
428  	.attrs =	scsi_sysfs_shost_attrs,
429  };
430  
431  const struct attribute_group *scsi_shost_groups[] = {
432  	&scsi_shost_attr_group,
433  	NULL
434  };
435  
scsi_device_cls_release(struct device * class_dev)436  static 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  
scsi_device_dev_release(struct device * dev)444  static void scsi_device_dev_release(struct device *dev)
445  {
446  	struct scsi_device *sdev = to_scsi_device(dev);
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  	struct scsi_vpd *vpd_pgb7 = NULL;
453  	unsigned long flags;
454  
455  	might_sleep();
456  
457  	scsi_dh_release_device(sdev);
458  
459  	parent = sdev->sdev_gendev.parent;
460  
461  	spin_lock_irqsave(sdev->host->host_lock, flags);
462  	list_del(&sdev->siblings);
463  	list_del(&sdev->same_target_siblings);
464  	list_del(&sdev->starved_entry);
465  	spin_unlock_irqrestore(sdev->host->host_lock, flags);
466  
467  	cancel_work_sync(&sdev->event_work);
468  
469  	list_for_each_safe(this, tmp, &sdev->event_list) {
470  		struct scsi_event *evt;
471  
472  		evt = list_entry(this, struct scsi_event, node);
473  		list_del(&evt->node);
474  		kfree(evt);
475  	}
476  
477  	blk_put_queue(sdev->request_queue);
478  	/* NULL queue means the device can't be used */
479  	sdev->request_queue = NULL;
480  
481  	sbitmap_free(&sdev->budget_map);
482  
483  	mutex_lock(&sdev->inquiry_mutex);
484  	vpd_pg0 = rcu_replace_pointer(sdev->vpd_pg0, vpd_pg0,
485  				       lockdep_is_held(&sdev->inquiry_mutex));
486  	vpd_pg80 = rcu_replace_pointer(sdev->vpd_pg80, vpd_pg80,
487  				       lockdep_is_held(&sdev->inquiry_mutex));
488  	vpd_pg83 = rcu_replace_pointer(sdev->vpd_pg83, vpd_pg83,
489  				       lockdep_is_held(&sdev->inquiry_mutex));
490  	vpd_pg89 = rcu_replace_pointer(sdev->vpd_pg89, vpd_pg89,
491  				       lockdep_is_held(&sdev->inquiry_mutex));
492  	vpd_pgb0 = rcu_replace_pointer(sdev->vpd_pgb0, vpd_pgb0,
493  				       lockdep_is_held(&sdev->inquiry_mutex));
494  	vpd_pgb1 = rcu_replace_pointer(sdev->vpd_pgb1, vpd_pgb1,
495  				       lockdep_is_held(&sdev->inquiry_mutex));
496  	vpd_pgb2 = rcu_replace_pointer(sdev->vpd_pgb2, vpd_pgb2,
497  				       lockdep_is_held(&sdev->inquiry_mutex));
498  	vpd_pgb7 = rcu_replace_pointer(sdev->vpd_pgb7, vpd_pgb7,
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  	if (vpd_pgb7)
517  		kfree_rcu(vpd_pgb7, rcu);
518  	kfree(sdev->inquiry);
519  	kfree(sdev);
520  
521  	if (parent)
522  		put_device(parent);
523  }
524  
525  static struct class sdev_class = {
526  	.name		= "scsi_device",
527  	.dev_release	= scsi_device_cls_release,
528  };
529  
530  /* all probing is done in the individual ->probe routines */
scsi_bus_match(struct device * dev,const struct device_driver * gendrv)531  static int scsi_bus_match(struct device *dev, const struct device_driver *gendrv)
532  {
533  	struct scsi_device *sdp;
534  
535  	if (dev->type != &scsi_dev_type)
536  		return 0;
537  
538  	sdp = to_scsi_device(dev);
539  	if (sdp->no_uld_attach)
540  		return 0;
541  	return (sdp->inq_periph_qual == SCSI_INQ_PQ_CON)? 1: 0;
542  }
543  
scsi_bus_uevent(const struct device * dev,struct kobj_uevent_env * env)544  static int scsi_bus_uevent(const struct device *dev, struct kobj_uevent_env *env)
545  {
546  	const struct scsi_device *sdev;
547  
548  	if (dev->type != &scsi_dev_type)
549  		return 0;
550  
551  	sdev = to_scsi_device(dev);
552  
553  	add_uevent_var(env, "MODALIAS=" SCSI_DEVICE_MODALIAS_FMT, sdev->type);
554  	return 0;
555  }
556  
557  const struct bus_type scsi_bus_type = {
558          .name		= "scsi",
559          .match		= scsi_bus_match,
560  	.uevent		= scsi_bus_uevent,
561  #ifdef CONFIG_PM
562  	.pm		= &scsi_bus_pm_ops,
563  #endif
564  };
565  
scsi_sysfs_register(void)566  int scsi_sysfs_register(void)
567  {
568  	int error;
569  
570  	error = bus_register(&scsi_bus_type);
571  	if (!error) {
572  		error = class_register(&sdev_class);
573  		if (error)
574  			bus_unregister(&scsi_bus_type);
575  	}
576  
577  	return error;
578  }
579  
scsi_sysfs_unregister(void)580  void scsi_sysfs_unregister(void)
581  {
582  	class_unregister(&sdev_class);
583  	bus_unregister(&scsi_bus_type);
584  }
585  
586  /*
587   * sdev_show_function: macro to create an attr function that can be used to
588   * show a non-bit field.
589   */
590  #define sdev_show_function(field, format_string)				\
591  static ssize_t								\
592  sdev_show_##field (struct device *dev, struct device_attribute *attr,	\
593  		   char *buf)						\
594  {									\
595  	struct scsi_device *sdev;					\
596  	sdev = to_scsi_device(dev);					\
597  	return snprintf (buf, 20, format_string, sdev->field);		\
598  }									\
599  
600  /*
601   * sdev_rd_attr: macro to create a function and attribute variable for a
602   * read only field.
603   */
604  #define sdev_rd_attr(field, format_string)				\
605  	sdev_show_function(field, format_string)			\
606  static DEVICE_ATTR(field, S_IRUGO, sdev_show_##field, NULL);
607  
608  
609  /*
610   * sdev_rw_attr: create a function and attribute variable for a
611   * read/write field.
612   */
613  #define sdev_rw_attr(field, format_string)				\
614  	sdev_show_function(field, format_string)				\
615  									\
616  static ssize_t								\
617  sdev_store_##field (struct device *dev, struct device_attribute *attr,	\
618  		    const char *buf, size_t count)			\
619  {									\
620  	struct scsi_device *sdev;					\
621  	sdev = to_scsi_device(dev);					\
622  	sscanf (buf, format_string, &sdev->field);			\
623  	return count;							\
624  }									\
625  static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##field);
626  
627  /* Currently we don't export bit fields, but we might in future,
628   * so leave this code in */
629  #if 0
630  /*
631   * sdev_rd_attr: create a function and attribute variable for a
632   * read/write bit field.
633   */
634  #define sdev_rw_attr_bit(field)						\
635  	sdev_show_function(field, "%d\n")					\
636  									\
637  static ssize_t								\
638  sdev_store_##field (struct device *dev, struct device_attribute *attr,	\
639  		    const char *buf, size_t count)			\
640  {									\
641  	int ret;							\
642  	struct scsi_device *sdev;					\
643  	ret = scsi_sdev_check_buf_bit(buf);				\
644  	if (ret >= 0)	{						\
645  		sdev = to_scsi_device(dev);				\
646  		sdev->field = ret;					\
647  		ret = count;						\
648  	}								\
649  	return ret;							\
650  }									\
651  static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##field);
652  
653  /*
654   * scsi_sdev_check_buf_bit: return 0 if buf is "0", return 1 if buf is "1",
655   * else return -EINVAL.
656   */
657  static int scsi_sdev_check_buf_bit(const char *buf)
658  {
659  	if ((buf[1] == '\0') || ((buf[1] == '\n') && (buf[2] == '\0'))) {
660  		if (buf[0] == '1')
661  			return 1;
662  		else if (buf[0] == '0')
663  			return 0;
664  		else
665  			return -EINVAL;
666  	} else
667  		return -EINVAL;
668  }
669  #endif
670  /*
671   * Create the actual show/store functions and data structures.
672   */
673  sdev_rd_attr (type, "%d\n");
674  sdev_rd_attr (scsi_level, "%d\n");
675  sdev_rd_attr (vendor, "%.8s\n");
676  sdev_rd_attr (model, "%.16s\n");
677  sdev_rd_attr (rev, "%.4s\n");
678  sdev_rd_attr (cdl_supported, "%d\n");
679  
680  static ssize_t
sdev_show_device_busy(struct device * dev,struct device_attribute * attr,char * buf)681  sdev_show_device_busy(struct device *dev, struct device_attribute *attr,
682  		char *buf)
683  {
684  	struct scsi_device *sdev = to_scsi_device(dev);
685  	return snprintf(buf, 20, "%d\n", scsi_device_busy(sdev));
686  }
687  static DEVICE_ATTR(device_busy, S_IRUGO, sdev_show_device_busy, NULL);
688  
689  static ssize_t
sdev_show_device_blocked(struct device * dev,struct device_attribute * attr,char * buf)690  sdev_show_device_blocked(struct device *dev, struct device_attribute *attr,
691  		char *buf)
692  {
693  	struct scsi_device *sdev = to_scsi_device(dev);
694  	return snprintf(buf, 20, "%d\n", atomic_read(&sdev->device_blocked));
695  }
696  static DEVICE_ATTR(device_blocked, S_IRUGO, sdev_show_device_blocked, NULL);
697  
698  /*
699   * TODO: can we make these symlinks to the block layer ones?
700   */
701  static ssize_t
sdev_show_timeout(struct device * dev,struct device_attribute * attr,char * buf)702  sdev_show_timeout (struct device *dev, struct device_attribute *attr, char *buf)
703  {
704  	struct scsi_device *sdev;
705  	sdev = to_scsi_device(dev);
706  	return snprintf(buf, 20, "%d\n", sdev->request_queue->rq_timeout / HZ);
707  }
708  
709  static ssize_t
sdev_store_timeout(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)710  sdev_store_timeout (struct device *dev, struct device_attribute *attr,
711  		    const char *buf, size_t count)
712  {
713  	struct scsi_device *sdev;
714  	int timeout;
715  	sdev = to_scsi_device(dev);
716  	sscanf (buf, "%d\n", &timeout);
717  	blk_queue_rq_timeout(sdev->request_queue, timeout * HZ);
718  	return count;
719  }
720  static DEVICE_ATTR(timeout, S_IRUGO | S_IWUSR, sdev_show_timeout, sdev_store_timeout);
721  
722  static ssize_t
sdev_show_eh_timeout(struct device * dev,struct device_attribute * attr,char * buf)723  sdev_show_eh_timeout(struct device *dev, struct device_attribute *attr, char *buf)
724  {
725  	struct scsi_device *sdev;
726  	sdev = to_scsi_device(dev);
727  	return snprintf(buf, 20, "%u\n", sdev->eh_timeout / HZ);
728  }
729  
730  static ssize_t
sdev_store_eh_timeout(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)731  sdev_store_eh_timeout(struct device *dev, struct device_attribute *attr,
732  		    const char *buf, size_t count)
733  {
734  	struct scsi_device *sdev;
735  	unsigned int eh_timeout;
736  	int err;
737  
738  	if (!capable(CAP_SYS_ADMIN))
739  		return -EACCES;
740  
741  	sdev = to_scsi_device(dev);
742  	err = kstrtouint(buf, 10, &eh_timeout);
743  	if (err)
744  		return err;
745  	sdev->eh_timeout = eh_timeout * HZ;
746  
747  	return count;
748  }
749  static DEVICE_ATTR(eh_timeout, S_IRUGO | S_IWUSR, sdev_show_eh_timeout, sdev_store_eh_timeout);
750  
751  static ssize_t
store_rescan_field(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)752  store_rescan_field (struct device *dev, struct device_attribute *attr,
753  		    const char *buf, size_t count)
754  {
755  	scsi_rescan_device(to_scsi_device(dev));
756  	return count;
757  }
758  static DEVICE_ATTR(rescan, S_IWUSR, NULL, store_rescan_field);
759  
760  static ssize_t
sdev_store_delete(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)761  sdev_store_delete(struct device *dev, struct device_attribute *attr,
762  		  const char *buf, size_t count)
763  {
764  	struct kernfs_node *kn;
765  	struct scsi_device *sdev = to_scsi_device(dev);
766  
767  	/*
768  	 * We need to try to get module, avoiding the module been removed
769  	 * during delete.
770  	 */
771  	if (scsi_device_get(sdev))
772  		return -ENODEV;
773  
774  	kn = sysfs_break_active_protection(&dev->kobj, &attr->attr);
775  	WARN_ON_ONCE(!kn);
776  	/*
777  	 * Concurrent writes into the "delete" sysfs attribute may trigger
778  	 * concurrent calls to device_remove_file() and scsi_remove_device().
779  	 * device_remove_file() handles concurrent removal calls by
780  	 * serializing these and by ignoring the second and later removal
781  	 * attempts.  Concurrent calls of scsi_remove_device() are
782  	 * serialized. The second and later calls of scsi_remove_device() are
783  	 * ignored because the first call of that function changes the device
784  	 * state into SDEV_DEL.
785  	 */
786  	device_remove_file(dev, attr);
787  	scsi_remove_device(sdev);
788  	if (kn)
789  		sysfs_unbreak_active_protection(kn);
790  	scsi_device_put(sdev);
791  	return count;
792  };
793  static DEVICE_ATTR(delete, S_IWUSR, NULL, sdev_store_delete);
794  
795  static ssize_t
store_state_field(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)796  store_state_field(struct device *dev, struct device_attribute *attr,
797  		  const char *buf, size_t count)
798  {
799  	int i, ret;
800  	struct scsi_device *sdev = to_scsi_device(dev);
801  	enum scsi_device_state state = 0;
802  	bool rescan_dev = false;
803  
804  	for (i = 0; i < ARRAY_SIZE(sdev_states); i++) {
805  		const int len = strlen(sdev_states[i].name);
806  		if (strncmp(sdev_states[i].name, buf, len) == 0 &&
807  		   buf[len] == '\n') {
808  			state = sdev_states[i].value;
809  			break;
810  		}
811  	}
812  	switch (state) {
813  	case SDEV_RUNNING:
814  	case SDEV_OFFLINE:
815  		break;
816  	default:
817  		return -EINVAL;
818  	}
819  
820  	mutex_lock(&sdev->state_mutex);
821  	switch (sdev->sdev_state) {
822  	case SDEV_RUNNING:
823  	case SDEV_OFFLINE:
824  		break;
825  	default:
826  		mutex_unlock(&sdev->state_mutex);
827  		return -EINVAL;
828  	}
829  	if (sdev->sdev_state == SDEV_RUNNING && state == SDEV_RUNNING) {
830  		ret = 0;
831  	} else {
832  		ret = scsi_device_set_state(sdev, state);
833  		if (ret == 0 && state == SDEV_RUNNING)
834  			rescan_dev = true;
835  	}
836  	mutex_unlock(&sdev->state_mutex);
837  
838  	if (rescan_dev) {
839  		/*
840  		 * If the device state changes to SDEV_RUNNING, we need to
841  		 * run the queue to avoid I/O hang, and rescan the device
842  		 * to revalidate it. Running the queue first is necessary
843  		 * because another thread may be waiting inside
844  		 * blk_mq_freeze_queue_wait() and because that call may be
845  		 * waiting for pending I/O to finish.
846  		 */
847  		blk_mq_run_hw_queues(sdev->request_queue, true);
848  		scsi_rescan_device(sdev);
849  	}
850  
851  	return ret == 0 ? count : -EINVAL;
852  }
853  
854  static ssize_t
show_state_field(struct device * dev,struct device_attribute * attr,char * buf)855  show_state_field(struct device *dev, struct device_attribute *attr, char *buf)
856  {
857  	struct scsi_device *sdev = to_scsi_device(dev);
858  	const char *name = scsi_device_state_name(sdev->sdev_state);
859  
860  	if (!name)
861  		return -EINVAL;
862  
863  	return snprintf(buf, 20, "%s\n", name);
864  }
865  
866  static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, show_state_field, store_state_field);
867  
868  static ssize_t
show_queue_type_field(struct device * dev,struct device_attribute * attr,char * buf)869  show_queue_type_field(struct device *dev, struct device_attribute *attr,
870  		      char *buf)
871  {
872  	struct scsi_device *sdev = to_scsi_device(dev);
873  	const char *name = "none";
874  
875  	if (sdev->simple_tags)
876  		name = "simple";
877  
878  	return snprintf(buf, 20, "%s\n", name);
879  }
880  
881  static ssize_t
store_queue_type_field(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)882  store_queue_type_field(struct device *dev, struct device_attribute *attr,
883  		       const char *buf, size_t count)
884  {
885  	struct scsi_device *sdev = to_scsi_device(dev);
886  
887  	if (!sdev->tagged_supported)
888  		return -EINVAL;
889  
890  	sdev_printk(KERN_INFO, sdev,
891  		    "ignoring write to deprecated queue_type attribute");
892  	return count;
893  }
894  
895  static DEVICE_ATTR(queue_type, S_IRUGO | S_IWUSR, show_queue_type_field,
896  		   store_queue_type_field);
897  
898  #define sdev_vpd_pg_attr(_page)						\
899  static ssize_t							\
900  show_vpd_##_page(struct file *filp, struct kobject *kobj,	\
901  		 struct bin_attribute *bin_attr,			\
902  		 char *buf, loff_t off, size_t count)			\
903  {									\
904  	struct device *dev = kobj_to_dev(kobj);				\
905  	struct scsi_device *sdev = to_scsi_device(dev);			\
906  	struct scsi_vpd *vpd_page;					\
907  	int ret = -EINVAL;						\
908  									\
909  	rcu_read_lock();						\
910  	vpd_page = rcu_dereference(sdev->vpd_##_page);			\
911  	if (vpd_page)							\
912  		ret = memory_read_from_buffer(buf, count, &off,		\
913  				vpd_page->data, vpd_page->len);		\
914  	rcu_read_unlock();						\
915  	return ret;							\
916  }									\
917  static struct bin_attribute dev_attr_vpd_##_page = {		\
918  	.attr =	{.name = __stringify(vpd_##_page), .mode = S_IRUGO },	\
919  	.size = 0,							\
920  	.read = show_vpd_##_page,					\
921  };
922  
923  sdev_vpd_pg_attr(pg83);
924  sdev_vpd_pg_attr(pg80);
925  sdev_vpd_pg_attr(pg89);
926  sdev_vpd_pg_attr(pgb0);
927  sdev_vpd_pg_attr(pgb1);
928  sdev_vpd_pg_attr(pgb2);
929  sdev_vpd_pg_attr(pgb7);
930  sdev_vpd_pg_attr(pg0);
931  
show_inquiry(struct file * filep,struct kobject * kobj,struct bin_attribute * bin_attr,char * buf,loff_t off,size_t count)932  static ssize_t show_inquiry(struct file *filep, struct kobject *kobj,
933  			    struct bin_attribute *bin_attr,
934  			    char *buf, loff_t off, size_t count)
935  {
936  	struct device *dev = kobj_to_dev(kobj);
937  	struct scsi_device *sdev = to_scsi_device(dev);
938  
939  	if (!sdev->inquiry)
940  		return -EINVAL;
941  
942  	return memory_read_from_buffer(buf, count, &off, sdev->inquiry,
943  				       sdev->inquiry_len);
944  }
945  
946  static struct bin_attribute dev_attr_inquiry = {
947  	.attr = {
948  		.name = "inquiry",
949  		.mode = S_IRUGO,
950  	},
951  	.size = 0,
952  	.read = show_inquiry,
953  };
954  
955  static ssize_t
show_iostat_counterbits(struct device * dev,struct device_attribute * attr,char * buf)956  show_iostat_counterbits(struct device *dev, struct device_attribute *attr,
957  			char *buf)
958  {
959  	return snprintf(buf, 20, "%d\n", (int)sizeof(atomic_t) * 8);
960  }
961  
962  static DEVICE_ATTR(iocounterbits, S_IRUGO, show_iostat_counterbits, NULL);
963  
964  #define show_sdev_iostat(field)						\
965  static ssize_t								\
966  show_iostat_##field(struct device *dev, struct device_attribute *attr,	\
967  		    char *buf)						\
968  {									\
969  	struct scsi_device *sdev = to_scsi_device(dev);			\
970  	unsigned long long count = atomic_read(&sdev->field);		\
971  	return snprintf(buf, 20, "0x%llx\n", count);			\
972  }									\
973  static DEVICE_ATTR(field, S_IRUGO, show_iostat_##field, NULL)
974  
975  show_sdev_iostat(iorequest_cnt);
976  show_sdev_iostat(iodone_cnt);
977  show_sdev_iostat(ioerr_cnt);
978  show_sdev_iostat(iotmo_cnt);
979  
980  static ssize_t
sdev_show_modalias(struct device * dev,struct device_attribute * attr,char * buf)981  sdev_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  }
987  static DEVICE_ATTR(modalias, S_IRUGO, sdev_show_modalias, NULL);
988  
989  #define DECLARE_EVT_SHOW(name, Cap_name)				\
990  static ssize_t								\
991  sdev_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)				\
1000  static ssize_t								\
1001  sdev_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  
DECLARE_EVT(media_change,MEDIA_CHANGE)1022  DECLARE_EVT(media_change, MEDIA_CHANGE)
1023  DECLARE_EVT(inquiry_change_reported, INQUIRY_CHANGE_REPORTED)
1024  DECLARE_EVT(capacity_change_reported, CAPACITY_CHANGE_REPORTED)
1025  DECLARE_EVT(soft_threshold_reached, SOFT_THRESHOLD_REACHED_REPORTED)
1026  DECLARE_EVT(mode_parameter_change_reported, MODE_PARAMETER_CHANGE_REPORTED)
1027  DECLARE_EVT(lun_change_reported, LUN_CHANGE_REPORTED)
1028  
1029  static ssize_t
1030  sdev_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  	const 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  }
1053  sdev_show_function(queue_depth, "%d\n");
1054  
1055  static DEVICE_ATTR(queue_depth, S_IRUGO | S_IWUSR, sdev_show_queue_depth,
1056  		   sdev_store_queue_depth);
1057  
1058  static ssize_t
sdev_show_wwid(struct device * dev,struct device_attribute * attr,char * buf)1059  sdev_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  }
1072  static DEVICE_ATTR(wwid, S_IRUGO, sdev_show_wwid, NULL);
1073  
1074  #define BLIST_FLAG_NAME(name)					\
1075  	[const_ilog2((__force __u64)BLIST_##name)] = #name
1076  static const char *const sdev_bflags_name[] = {
1077  #include "scsi_devinfo_tbl.c"
1078  };
1079  #undef BLIST_FLAG_NAME
1080  
1081  static ssize_t
sdev_show_blacklist(struct device * dev,struct device_attribute * attr,char * buf)1082  sdev_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  }
1108  static DEVICE_ATTR(blacklist, S_IRUGO, sdev_show_blacklist, NULL);
1109  
1110  #ifdef CONFIG_SCSI_DH
1111  static ssize_t
sdev_show_dh_state(struct device * dev,struct device_attribute * attr,char * buf)1112  sdev_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  
1123  static ssize_t
sdev_store_dh_state(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)1124  sdev_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  
1160  static DEVICE_ATTR(dh_state, S_IRUGO | S_IWUSR, sdev_show_dh_state,
1161  		   sdev_store_dh_state);
1162  
1163  static ssize_t
sdev_show_access_state(struct device * dev,struct device_attribute * attr,char * buf)1164  sdev_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  }
1181  static DEVICE_ATTR(access_state, S_IRUGO, sdev_show_access_state, NULL);
1182  
1183  static ssize_t
sdev_show_preferred_path(struct device * dev,struct device_attribute * attr,char * buf)1184  sdev_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  }
1198  static DEVICE_ATTR(preferred_path, S_IRUGO, sdev_show_preferred_path, NULL);
1199  #endif
1200  
1201  static ssize_t
sdev_show_queue_ramp_up_period(struct device * dev,struct device_attribute * attr,char * buf)1202  sdev_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  
1212  static ssize_t
sdev_store_queue_ramp_up_period(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)1213  sdev_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  
1227  static 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  
sdev_show_cdl_enable(struct device * dev,struct device_attribute * attr,char * buf)1231  static ssize_t sdev_show_cdl_enable(struct device *dev,
1232  				    struct device_attribute *attr, char *buf)
1233  {
1234  	struct scsi_device *sdev = to_scsi_device(dev);
1235  
1236  	return sysfs_emit(buf, "%d\n", (int)sdev->cdl_enable);
1237  }
1238  
sdev_store_cdl_enable(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)1239  static ssize_t sdev_store_cdl_enable(struct device *dev,
1240  				     struct device_attribute *attr,
1241  				     const char *buf, size_t count)
1242  {
1243  	int ret;
1244  	bool v;
1245  
1246  	if (kstrtobool(buf, &v))
1247  		return -EINVAL;
1248  
1249  	ret = scsi_cdl_enable(to_scsi_device(dev), v);
1250  	if (ret)
1251  		return ret;
1252  
1253  	return count;
1254  }
1255  static DEVICE_ATTR(cdl_enable, S_IRUGO | S_IWUSR,
1256  		   sdev_show_cdl_enable, sdev_store_cdl_enable);
1257  
scsi_sdev_attr_is_visible(struct kobject * kobj,struct attribute * attr,int i)1258  static umode_t scsi_sdev_attr_is_visible(struct kobject *kobj,
1259  					 struct attribute *attr, int i)
1260  {
1261  	struct device *dev = kobj_to_dev(kobj);
1262  	struct scsi_device *sdev = to_scsi_device(dev);
1263  
1264  
1265  	if (attr == &dev_attr_queue_depth.attr &&
1266  	    !sdev->host->hostt->change_queue_depth)
1267  		return S_IRUGO;
1268  
1269  	if (attr == &dev_attr_queue_ramp_up_period.attr &&
1270  	    !sdev->host->hostt->change_queue_depth)
1271  		return 0;
1272  
1273  	return attr->mode;
1274  }
1275  
scsi_sdev_bin_attr_is_visible(struct kobject * kobj,struct bin_attribute * attr,int i)1276  static umode_t scsi_sdev_bin_attr_is_visible(struct kobject *kobj,
1277  					     struct bin_attribute *attr, int i)
1278  {
1279  	struct device *dev = kobj_to_dev(kobj);
1280  	struct scsi_device *sdev = to_scsi_device(dev);
1281  
1282  
1283  	if (attr == &dev_attr_vpd_pg0 && !sdev->vpd_pg0)
1284  		return 0;
1285  
1286  	if (attr == &dev_attr_vpd_pg80 && !sdev->vpd_pg80)
1287  		return 0;
1288  
1289  	if (attr == &dev_attr_vpd_pg83 && !sdev->vpd_pg83)
1290  		return 0;
1291  
1292  	if (attr == &dev_attr_vpd_pg89 && !sdev->vpd_pg89)
1293  		return 0;
1294  
1295  	if (attr == &dev_attr_vpd_pgb0 && !sdev->vpd_pgb0)
1296  		return 0;
1297  
1298  	if (attr == &dev_attr_vpd_pgb1 && !sdev->vpd_pgb1)
1299  		return 0;
1300  
1301  	if (attr == &dev_attr_vpd_pgb2 && !sdev->vpd_pgb2)
1302  		return 0;
1303  
1304  	if (attr == &dev_attr_vpd_pgb7 && !sdev->vpd_pgb7)
1305  		return 0;
1306  
1307  	return S_IRUGO;
1308  }
1309  
1310  /* Default template for device attributes.  May NOT be modified */
1311  static struct attribute *scsi_sdev_attrs[] = {
1312  	&dev_attr_device_blocked.attr,
1313  	&dev_attr_type.attr,
1314  	&dev_attr_scsi_level.attr,
1315  	&dev_attr_device_busy.attr,
1316  	&dev_attr_vendor.attr,
1317  	&dev_attr_model.attr,
1318  	&dev_attr_rev.attr,
1319  	&dev_attr_rescan.attr,
1320  	&dev_attr_delete.attr,
1321  	&dev_attr_state.attr,
1322  	&dev_attr_timeout.attr,
1323  	&dev_attr_eh_timeout.attr,
1324  	&dev_attr_iocounterbits.attr,
1325  	&dev_attr_iorequest_cnt.attr,
1326  	&dev_attr_iodone_cnt.attr,
1327  	&dev_attr_ioerr_cnt.attr,
1328  	&dev_attr_iotmo_cnt.attr,
1329  	&dev_attr_modalias.attr,
1330  	&dev_attr_queue_depth.attr,
1331  	&dev_attr_queue_type.attr,
1332  	&dev_attr_wwid.attr,
1333  	&dev_attr_blacklist.attr,
1334  #ifdef CONFIG_SCSI_DH
1335  	&dev_attr_dh_state.attr,
1336  	&dev_attr_access_state.attr,
1337  	&dev_attr_preferred_path.attr,
1338  #endif
1339  	&dev_attr_queue_ramp_up_period.attr,
1340  	&dev_attr_cdl_supported.attr,
1341  	&dev_attr_cdl_enable.attr,
1342  	REF_EVT(media_change),
1343  	REF_EVT(inquiry_change_reported),
1344  	REF_EVT(capacity_change_reported),
1345  	REF_EVT(soft_threshold_reached),
1346  	REF_EVT(mode_parameter_change_reported),
1347  	REF_EVT(lun_change_reported),
1348  	NULL
1349  };
1350  
1351  static struct bin_attribute *scsi_sdev_bin_attrs[] = {
1352  	&dev_attr_vpd_pg0,
1353  	&dev_attr_vpd_pg83,
1354  	&dev_attr_vpd_pg80,
1355  	&dev_attr_vpd_pg89,
1356  	&dev_attr_vpd_pgb0,
1357  	&dev_attr_vpd_pgb1,
1358  	&dev_attr_vpd_pgb2,
1359  	&dev_attr_vpd_pgb7,
1360  	&dev_attr_inquiry,
1361  	NULL
1362  };
1363  static struct attribute_group scsi_sdev_attr_group = {
1364  	.attrs =	scsi_sdev_attrs,
1365  	.bin_attrs =	scsi_sdev_bin_attrs,
1366  	.is_visible =	scsi_sdev_attr_is_visible,
1367  	.is_bin_visible = scsi_sdev_bin_attr_is_visible,
1368  };
1369  
1370  static const struct attribute_group *scsi_sdev_attr_groups[] = {
1371  	&scsi_sdev_attr_group,
1372  	NULL
1373  };
1374  
scsi_target_add(struct scsi_target * starget)1375  static int scsi_target_add(struct scsi_target *starget)
1376  {
1377  	int error;
1378  
1379  	if (starget->state != STARGET_CREATED)
1380  		return 0;
1381  
1382  	error = device_add(&starget->dev);
1383  	if (error) {
1384  		dev_err(&starget->dev, "target device_add failed, error %d\n", error);
1385  		return error;
1386  	}
1387  	transport_add_device(&starget->dev);
1388  	starget->state = STARGET_RUNNING;
1389  
1390  	pm_runtime_set_active(&starget->dev);
1391  	pm_runtime_enable(&starget->dev);
1392  	device_enable_async_suspend(&starget->dev);
1393  
1394  	return 0;
1395  }
1396  
1397  /**
1398   * scsi_sysfs_add_sdev - add scsi device to sysfs
1399   * @sdev:	scsi_device to add
1400   *
1401   * Return value:
1402   * 	0 on Success / non-zero on Failure
1403   **/
scsi_sysfs_add_sdev(struct scsi_device * sdev)1404  int scsi_sysfs_add_sdev(struct scsi_device *sdev)
1405  {
1406  	int error;
1407  	struct scsi_target *starget = sdev->sdev_target;
1408  
1409  	error = scsi_target_add(starget);
1410  	if (error)
1411  		return error;
1412  
1413  	transport_configure_device(&starget->dev);
1414  
1415  	device_enable_async_suspend(&sdev->sdev_gendev);
1416  	scsi_autopm_get_target(starget);
1417  	pm_runtime_set_active(&sdev->sdev_gendev);
1418  	if (!sdev->rpm_autosuspend)
1419  		pm_runtime_forbid(&sdev->sdev_gendev);
1420  	pm_runtime_enable(&sdev->sdev_gendev);
1421  	scsi_autopm_put_target(starget);
1422  
1423  	scsi_autopm_get_device(sdev);
1424  
1425  	scsi_dh_add_device(sdev);
1426  
1427  	error = device_add(&sdev->sdev_gendev);
1428  	if (error) {
1429  		sdev_printk(KERN_INFO, sdev,
1430  				"failed to add device: %d\n", error);
1431  		return error;
1432  	}
1433  
1434  	device_enable_async_suspend(&sdev->sdev_dev);
1435  	error = device_add(&sdev->sdev_dev);
1436  	if (error) {
1437  		sdev_printk(KERN_INFO, sdev,
1438  				"failed to add class device: %d\n", error);
1439  		device_del(&sdev->sdev_gendev);
1440  		return error;
1441  	}
1442  	transport_add_device(&sdev->sdev_gendev);
1443  	sdev->is_visible = 1;
1444  
1445  	if (IS_ENABLED(CONFIG_BLK_DEV_BSG)) {
1446  		sdev->bsg_dev = scsi_bsg_register_queue(sdev);
1447  		if (IS_ERR(sdev->bsg_dev)) {
1448  			error = PTR_ERR(sdev->bsg_dev);
1449  			sdev_printk(KERN_INFO, sdev,
1450  				    "Failed to register bsg queue, errno=%d\n",
1451  				    error);
1452  			sdev->bsg_dev = NULL;
1453  		}
1454  	}
1455  
1456  	scsi_autopm_put_device(sdev);
1457  	return error;
1458  }
1459  
__scsi_remove_device(struct scsi_device * sdev)1460  void __scsi_remove_device(struct scsi_device *sdev)
1461  {
1462  	struct device *dev = &sdev->sdev_gendev;
1463  	int res;
1464  
1465  	/*
1466  	 * This cleanup path is not reentrant and while it is impossible
1467  	 * to get a new reference with scsi_device_get() someone can still
1468  	 * hold a previously acquired one.
1469  	 */
1470  	if (sdev->sdev_state == SDEV_DEL)
1471  		return;
1472  
1473  	if (sdev->is_visible) {
1474  		/*
1475  		 * If scsi_internal_target_block() is running concurrently,
1476  		 * wait until it has finished before changing the device state.
1477  		 */
1478  		mutex_lock(&sdev->state_mutex);
1479  		/*
1480  		 * If blocked, we go straight to DEL and restart the queue so
1481  		 * any commands issued during driver shutdown (like sync
1482  		 * cache) are errored immediately.
1483  		 */
1484  		res = scsi_device_set_state(sdev, SDEV_CANCEL);
1485  		if (res != 0) {
1486  			res = scsi_device_set_state(sdev, SDEV_DEL);
1487  			if (res == 0)
1488  				scsi_start_queue(sdev);
1489  		}
1490  		mutex_unlock(&sdev->state_mutex);
1491  
1492  		if (res != 0)
1493  			return;
1494  
1495  		if (IS_ENABLED(CONFIG_BLK_DEV_BSG) && sdev->bsg_dev)
1496  			bsg_unregister_queue(sdev->bsg_dev);
1497  		device_unregister(&sdev->sdev_dev);
1498  		transport_remove_device(dev);
1499  		device_del(dev);
1500  	} else
1501  		put_device(&sdev->sdev_dev);
1502  
1503  	/*
1504  	 * Stop accepting new requests and wait until all queuecommand() and
1505  	 * scsi_run_queue() invocations have finished before tearing down the
1506  	 * device.
1507  	 */
1508  	mutex_lock(&sdev->state_mutex);
1509  	scsi_device_set_state(sdev, SDEV_DEL);
1510  	mutex_unlock(&sdev->state_mutex);
1511  
1512  	blk_mq_destroy_queue(sdev->request_queue);
1513  	kref_put(&sdev->host->tagset_refcnt, scsi_mq_free_tags);
1514  	cancel_work_sync(&sdev->requeue_work);
1515  
1516  	if (sdev->host->hostt->slave_destroy)
1517  		sdev->host->hostt->slave_destroy(sdev);
1518  	transport_destroy_device(dev);
1519  
1520  	/*
1521  	 * Paired with the kref_get() in scsi_sysfs_initialize().  We have
1522  	 * removed sysfs visibility from the device, so make the target
1523  	 * invisible if this was the last device underneath it.
1524  	 */
1525  	scsi_target_reap(scsi_target(sdev));
1526  
1527  	put_device(dev);
1528  }
1529  
1530  /**
1531   * scsi_remove_device - unregister a device from the scsi bus
1532   * @sdev:	scsi_device to unregister
1533   **/
scsi_remove_device(struct scsi_device * sdev)1534  void scsi_remove_device(struct scsi_device *sdev)
1535  {
1536  	struct Scsi_Host *shost = sdev->host;
1537  
1538  	mutex_lock(&shost->scan_mutex);
1539  	__scsi_remove_device(sdev);
1540  	mutex_unlock(&shost->scan_mutex);
1541  }
1542  EXPORT_SYMBOL(scsi_remove_device);
1543  
__scsi_remove_target(struct scsi_target * starget)1544  static void __scsi_remove_target(struct scsi_target *starget)
1545  {
1546  	struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
1547  	unsigned long flags;
1548  	struct scsi_device *sdev;
1549  
1550  	spin_lock_irqsave(shost->host_lock, flags);
1551   restart:
1552  	list_for_each_entry(sdev, &shost->__devices, siblings) {
1553  		/*
1554  		 * We cannot call scsi_device_get() here, as
1555  		 * we might've been called from rmmod() causing
1556  		 * scsi_device_get() to fail the module_is_live()
1557  		 * check.
1558  		 */
1559  		if (sdev->channel != starget->channel ||
1560  		    sdev->id != starget->id)
1561  			continue;
1562  		if (sdev->sdev_state == SDEV_DEL ||
1563  		    sdev->sdev_state == SDEV_CANCEL ||
1564  		    !get_device(&sdev->sdev_gendev))
1565  			continue;
1566  		spin_unlock_irqrestore(shost->host_lock, flags);
1567  		scsi_remove_device(sdev);
1568  		put_device(&sdev->sdev_gendev);
1569  		spin_lock_irqsave(shost->host_lock, flags);
1570  		goto restart;
1571  	}
1572  	spin_unlock_irqrestore(shost->host_lock, flags);
1573  }
1574  
1575  /**
1576   * scsi_remove_target - try to remove a target and all its devices
1577   * @dev: generic starget or parent of generic stargets to be removed
1578   *
1579   * Note: This is slightly racy.  It is possible that if the user
1580   * requests the addition of another device then the target won't be
1581   * removed.
1582   */
scsi_remove_target(struct device * dev)1583  void scsi_remove_target(struct device *dev)
1584  {
1585  	struct Scsi_Host *shost = dev_to_shost(dev->parent);
1586  	struct scsi_target *starget;
1587  	unsigned long flags;
1588  
1589  restart:
1590  	spin_lock_irqsave(shost->host_lock, flags);
1591  	list_for_each_entry(starget, &shost->__targets, siblings) {
1592  		if (starget->state == STARGET_DEL ||
1593  		    starget->state == STARGET_REMOVE ||
1594  		    starget->state == STARGET_CREATED_REMOVE)
1595  			continue;
1596  		if (starget->dev.parent == dev || &starget->dev == dev) {
1597  			kref_get(&starget->reap_ref);
1598  			if (starget->state == STARGET_CREATED)
1599  				starget->state = STARGET_CREATED_REMOVE;
1600  			else
1601  				starget->state = STARGET_REMOVE;
1602  			spin_unlock_irqrestore(shost->host_lock, flags);
1603  			__scsi_remove_target(starget);
1604  			scsi_target_reap(starget);
1605  			goto restart;
1606  		}
1607  	}
1608  	spin_unlock_irqrestore(shost->host_lock, flags);
1609  }
1610  EXPORT_SYMBOL(scsi_remove_target);
1611  
__scsi_register_driver(struct device_driver * drv,struct module * owner)1612  int __scsi_register_driver(struct device_driver *drv, struct module *owner)
1613  {
1614  	drv->bus = &scsi_bus_type;
1615  	drv->owner = owner;
1616  
1617  	return driver_register(drv);
1618  }
1619  EXPORT_SYMBOL(__scsi_register_driver);
1620  
scsi_register_interface(struct class_interface * intf)1621  int scsi_register_interface(struct class_interface *intf)
1622  {
1623  	intf->class = &sdev_class;
1624  
1625  	return class_interface_register(intf);
1626  }
1627  EXPORT_SYMBOL(scsi_register_interface);
1628  
1629  /**
1630   * scsi_sysfs_add_host - add scsi host to subsystem
1631   * @shost:     scsi host struct to add to subsystem
1632   **/
scsi_sysfs_add_host(struct Scsi_Host * shost)1633  int scsi_sysfs_add_host(struct Scsi_Host *shost)
1634  {
1635  	transport_register_device(&shost->shost_gendev);
1636  	transport_configure_device(&shost->shost_gendev);
1637  	return 0;
1638  }
1639  
1640  static const struct device_type scsi_dev_type = {
1641  	.name =		"scsi_device",
1642  	.release =	scsi_device_dev_release,
1643  	.groups =	scsi_sdev_attr_groups,
1644  };
1645  
scsi_sysfs_device_initialize(struct scsi_device * sdev)1646  void scsi_sysfs_device_initialize(struct scsi_device *sdev)
1647  {
1648  	unsigned long flags;
1649  	struct Scsi_Host *shost = sdev->host;
1650  	const struct scsi_host_template *hostt = shost->hostt;
1651  	struct scsi_target  *starget = sdev->sdev_target;
1652  
1653  	device_initialize(&sdev->sdev_gendev);
1654  	sdev->sdev_gendev.bus = &scsi_bus_type;
1655  	sdev->sdev_gendev.type = &scsi_dev_type;
1656  	scsi_enable_async_suspend(&sdev->sdev_gendev);
1657  	dev_set_name(&sdev->sdev_gendev, "%d:%d:%d:%llu",
1658  		     sdev->host->host_no, sdev->channel, sdev->id, sdev->lun);
1659  	sdev->sdev_gendev.groups = hostt->sdev_groups;
1660  
1661  	device_initialize(&sdev->sdev_dev);
1662  	sdev->sdev_dev.parent = get_device(&sdev->sdev_gendev);
1663  	sdev->sdev_dev.class = &sdev_class;
1664  	dev_set_name(&sdev->sdev_dev, "%d:%d:%d:%llu",
1665  		     sdev->host->host_no, sdev->channel, sdev->id, sdev->lun);
1666  	/*
1667  	 * Get a default scsi_level from the target (derived from sibling
1668  	 * devices).  This is the best we can do for guessing how to set
1669  	 * sdev->lun_in_cdb for the initial INQUIRY command.  For LUN 0 the
1670  	 * setting doesn't matter, because all the bits are zero anyway.
1671  	 * But it does matter for higher LUNs.
1672  	 */
1673  	sdev->scsi_level = starget->scsi_level;
1674  	if (sdev->scsi_level <= SCSI_2 &&
1675  			sdev->scsi_level != SCSI_UNKNOWN &&
1676  			!shost->no_scsi2_lun_in_cdb)
1677  		sdev->lun_in_cdb = 1;
1678  
1679  	transport_setup_device(&sdev->sdev_gendev);
1680  	spin_lock_irqsave(shost->host_lock, flags);
1681  	list_add_tail(&sdev->same_target_siblings, &starget->devices);
1682  	list_add_tail(&sdev->siblings, &shost->__devices);
1683  	spin_unlock_irqrestore(shost->host_lock, flags);
1684  	/*
1685  	 * device can now only be removed via __scsi_remove_device() so hold
1686  	 * the target.  Target will be held in CREATED state until something
1687  	 * beneath it becomes visible (in which case it moves to RUNNING)
1688  	 */
1689  	kref_get(&starget->reap_ref);
1690  }
1691  
scsi_is_sdev_device(const struct device * dev)1692  int scsi_is_sdev_device(const struct device *dev)
1693  {
1694  	return dev->type == &scsi_dev_type;
1695  }
1696  EXPORT_SYMBOL(scsi_is_sdev_device);
1697  
1698  /* A blank transport template that is used in drivers that don't
1699   * yet implement Transport Attributes */
1700  struct scsi_transport_template blank_transport_template = { { { {NULL, }, }, }, };
1701