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