4  * SCSI sysfs interface routines.
 
   6  * Created to pull SCSI mid layer sysfs routines into one file.
 
   9 #include <linux/config.h>
 
  10 #include <linux/module.h>
 
  11 #include <linux/init.h>
 
  12 #include <linux/blkdev.h>
 
  13 #include <linux/device.h>
 
  15 #include <scsi/scsi.h>
 
  16 #include <scsi/scsi_device.h>
 
  17 #include <scsi/scsi_host.h>
 
  18 #include <scsi/scsi_tcq.h>
 
  19 #include <scsi/scsi_transport.h>
 
  21 #include "scsi_priv.h"
 
  22 #include "scsi_logging.h"
 
  25         enum scsi_device_state  value;
 
  28         { SDEV_CREATED, "created" },
 
  29         { SDEV_RUNNING, "running" },
 
  30         { SDEV_CANCEL, "cancel" },
 
  31         { SDEV_DEL, "deleted" },
 
  32         { SDEV_QUIESCE, "quiesce" },
 
  33         { SDEV_OFFLINE, "offline" },
 
  34         { SDEV_BLOCK,   "blocked" },
 
  37 const char *scsi_device_state_name(enum scsi_device_state state)
 
  42         for (i = 0; i < sizeof(sdev_states)/sizeof(sdev_states[0]); i++) {
 
  43                 if (sdev_states[i].value == state) {
 
  44                         name = sdev_states[i].name;
 
  52         enum scsi_host_state    value;
 
  55         { SHOST_CREATED, "created" },
 
  56         { SHOST_RUNNING, "running" },
 
  57         { SHOST_CANCEL, "cancel" },
 
  58         { SHOST_DEL, "deleted" },
 
  59         { SHOST_RECOVERY, "recovery" },
 
  60         { SHOST_CANCEL_RECOVERY, "cancel/recovery" },
 
  61         { SHOST_DEL_RECOVERY, "deleted/recovery", },
 
  63 const char *scsi_host_state_name(enum scsi_host_state state)
 
  68         for (i = 0; i < sizeof(shost_states)/sizeof(shost_states[0]); i++) {
 
  69                 if (shost_states[i].value == state) {
 
  70                         name = shost_states[i].name;
 
  77 static int check_set(unsigned int *val, char *src)
 
  81         if (strncmp(src, "-", 20) == 0) {
 
  82                 *val = SCAN_WILD_CARD;
 
  85                  * Doesn't check for int overflow
 
  87                 *val = simple_strtoul(src, &last, 0);
 
  94 static int scsi_scan(struct Scsi_Host *shost, const char *str)
 
  96         char s1[15], s2[15], s3[15], junk;
 
  97         unsigned int channel, id, lun;
 
 100         res = sscanf(str, "%10s %10s %10s %c", s1, s2, s3, &junk);
 
 103         if (check_set(&channel, s1))
 
 105         if (check_set(&id, s2))
 
 107         if (check_set(&lun, s3))
 
 109         res = scsi_scan_host_selected(shost, channel, id, lun, 1);
 
 114  * shost_show_function: macro to create an attr function that can be used to
 
 115  * show a non-bit field.
 
 117 #define shost_show_function(name, field, format_string)                 \
 
 119 show_##name (struct class_device *class_dev, char *buf)                 \
 
 121         struct Scsi_Host *shost = class_to_shost(class_dev);            \
 
 122         return snprintf (buf, 20, format_string, shost->field);         \
 
 126  * shost_rd_attr: macro to create a function and attribute variable for a
 
 129 #define shost_rd_attr2(name, field, format_string)                      \
 
 130         shost_show_function(name, field, format_string)                 \
 
 131 static CLASS_DEVICE_ATTR(name, S_IRUGO, show_##name, NULL);
 
 133 #define shost_rd_attr(field, format_string) \
 
 134 shost_rd_attr2(field, field, format_string)
 
 137  * Create the actual show/store functions and data structures.
 
 140 static ssize_t store_scan(struct class_device *class_dev, const char *buf,
 
 143         struct Scsi_Host *shost = class_to_shost(class_dev);
 
 146         res = scsi_scan(shost, buf);
 
 151 static CLASS_DEVICE_ATTR(scan, S_IWUSR, NULL, store_scan);
 
 154 store_shost_state(struct class_device *class_dev, const char *buf, size_t count)
 
 157         struct Scsi_Host *shost = class_to_shost(class_dev);
 
 158         enum scsi_host_state state = 0;
 
 160         for (i = 0; i < sizeof(shost_states)/sizeof(shost_states[0]); i++) {
 
 161                 const int len = strlen(shost_states[i].name);
 
 162                 if (strncmp(shost_states[i].name, buf, len) == 0 &&
 
 164                         state = shost_states[i].value;
 
 171         if (scsi_host_set_state(shost, state))
 
 177 show_shost_state(struct class_device *class_dev, char *buf)
 
 179         struct Scsi_Host *shost = class_to_shost(class_dev);
 
 180         const char *name = scsi_host_state_name(shost->shost_state);
 
 185         return snprintf(buf, 20, "%s\n", name);
 
 188 static CLASS_DEVICE_ATTR(state, S_IRUGO | S_IWUSR, show_shost_state, store_shost_state);
 
 190 shost_rd_attr(unique_id, "%u\n");
 
 191 shost_rd_attr(host_busy, "%hu\n");
 
 192 shost_rd_attr(cmd_per_lun, "%hd\n");
 
 193 shost_rd_attr(sg_tablesize, "%hu\n");
 
 194 shost_rd_attr(unchecked_isa_dma, "%d\n");
 
 195 shost_rd_attr2(proc_name, hostt->proc_name, "%s\n");
 
 197 static struct class_device_attribute *scsi_sysfs_shost_attrs[] = {
 
 198         &class_device_attr_unique_id,
 
 199         &class_device_attr_host_busy,
 
 200         &class_device_attr_cmd_per_lun,
 
 201         &class_device_attr_sg_tablesize,
 
 202         &class_device_attr_unchecked_isa_dma,
 
 203         &class_device_attr_proc_name,
 
 204         &class_device_attr_scan,
 
 205         &class_device_attr_state,
 
 209 static void scsi_device_cls_release(struct class_device *class_dev)
 
 211         struct scsi_device *sdev;
 
 213         sdev = class_to_sdev(class_dev);
 
 214         put_device(&sdev->sdev_gendev);
 
 217 static void scsi_device_dev_release(struct device *dev)
 
 219         struct scsi_device *sdev;
 
 220         struct device *parent;
 
 221         struct scsi_target *starget;
 
 224         parent = dev->parent;
 
 225         sdev = to_scsi_device(dev);
 
 226         starget = to_scsi_target(parent);
 
 228         spin_lock_irqsave(sdev->host->host_lock, flags);
 
 230         list_del(&sdev->siblings);
 
 231         list_del(&sdev->same_target_siblings);
 
 232         list_del(&sdev->starved_entry);
 
 233         spin_unlock_irqrestore(sdev->host->host_lock, flags);
 
 235         if (sdev->request_queue) {
 
 236                 sdev->request_queue->queuedata = NULL;
 
 237                 scsi_free_queue(sdev->request_queue);
 
 238                 /* temporary expedient, try to catch use of queue lock
 
 239                  * after free of sdev */
 
 240                 sdev->request_queue = NULL;
 
 243         scsi_target_reap(scsi_target(sdev));
 
 245         kfree(sdev->inquiry);
 
 252 static struct class sdev_class = {
 
 253         .name           = "scsi_device",
 
 254         .release        = scsi_device_cls_release,
 
 257 /* all probing is done in the individual ->probe routines */
 
 258 static int scsi_bus_match(struct device *dev, struct device_driver *gendrv)
 
 260         struct scsi_device *sdp = to_scsi_device(dev);
 
 261         if (sdp->no_uld_attach)
 
 263         return (sdp->inq_periph_qual == SCSI_INQ_PQ_CON)? 1: 0;
 
 266 struct bus_type scsi_bus_type = {
 
 268         .match          = scsi_bus_match,
 
 271 int scsi_sysfs_register(void)
 
 275         error = bus_register(&scsi_bus_type);
 
 277                 error = class_register(&sdev_class);
 
 279                         bus_unregister(&scsi_bus_type);
 
 285 void scsi_sysfs_unregister(void)
 
 287         class_unregister(&sdev_class);
 
 288         bus_unregister(&scsi_bus_type);
 
 292  * sdev_show_function: macro to create an attr function that can be used to
 
 293  * show a non-bit field.
 
 295 #define sdev_show_function(field, format_string)                                \
 
 297 sdev_show_##field (struct device *dev, struct device_attribute *attr, char *buf)                                \
 
 299         struct scsi_device *sdev;                                       \
 
 300         sdev = to_scsi_device(dev);                                     \
 
 301         return snprintf (buf, 20, format_string, sdev->field);          \
 
 305  * sdev_rd_attr: macro to create a function and attribute variable for a
 
 308 #define sdev_rd_attr(field, format_string)                              \
 
 309         sdev_show_function(field, format_string)                        \
 
 310 static DEVICE_ATTR(field, S_IRUGO, sdev_show_##field, NULL);
 
 314  * sdev_rd_attr: create a function and attribute variable for a
 
 317 #define sdev_rw_attr(field, format_string)                              \
 
 318         sdev_show_function(field, format_string)                                \
 
 321 sdev_store_##field (struct device *dev, struct device_attribute *attr, const char *buf, size_t count)   \
 
 323         struct scsi_device *sdev;                                       \
 
 324         sdev = to_scsi_device(dev);                                     \
 
 325         snscanf (buf, 20, format_string, &sdev->field);                 \
 
 328 static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##field);
 
 330 /* Currently we don't export bit fields, but we might in future,
 
 331  * so leave this code in */
 
 334  * sdev_rd_attr: create a function and attribute variable for a
 
 335  * read/write bit field.
 
 337 #define sdev_rw_attr_bit(field)                                         \
 
 338         sdev_show_function(field, "%d\n")                                       \
 
 341 sdev_store_##field (struct device *dev, struct device_attribute *attr, const char *buf, size_t count)   \
 
 344         struct scsi_device *sdev;                                       \
 
 345         ret = scsi_sdev_check_buf_bit(buf);                             \
 
 347                 sdev = to_scsi_device(dev);                             \
 
 353 static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##field);
 
 356  * scsi_sdev_check_buf_bit: return 0 if buf is "0", return 1 if buf is "1",
 
 357  * else return -EINVAL.
 
 359 static int scsi_sdev_check_buf_bit(const char *buf)
 
 361         if ((buf[1] == '\0') || ((buf[1] == '\n') && (buf[2] == '\0'))) {
 
 364                 else if (buf[0] == '0')
 
 373  * Create the actual show/store functions and data structures.
 
 375 sdev_rd_attr (device_blocked, "%d\n");
 
 376 sdev_rd_attr (queue_depth, "%d\n");
 
 377 sdev_rd_attr (type, "%d\n");
 
 378 sdev_rd_attr (scsi_level, "%d\n");
 
 379 sdev_rd_attr (vendor, "%.8s\n");
 
 380 sdev_rd_attr (model, "%.16s\n");
 
 381 sdev_rd_attr (rev, "%.4s\n");
 
 384 sdev_show_timeout (struct device *dev, struct device_attribute *attr, char *buf)
 
 386         struct scsi_device *sdev;
 
 387         sdev = to_scsi_device(dev);
 
 388         return snprintf (buf, 20, "%d\n", sdev->timeout / HZ);
 
 392 sdev_store_timeout (struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 
 394         struct scsi_device *sdev;
 
 396         sdev = to_scsi_device(dev);
 
 397         sscanf (buf, "%d\n", &timeout);
 
 398         sdev->timeout = timeout * HZ;
 
 401 static DEVICE_ATTR(timeout, S_IRUGO | S_IWUSR, sdev_show_timeout, sdev_store_timeout);
 
 404 store_rescan_field (struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 
 406         scsi_rescan_device(dev);
 
 409 static DEVICE_ATTR(rescan, S_IWUSR, NULL, store_rescan_field);
 
 411 static ssize_t sdev_store_delete(struct device *dev, struct device_attribute *attr, const char *buf,
 
 414         scsi_remove_device(to_scsi_device(dev));
 
 417 static DEVICE_ATTR(delete, S_IWUSR, NULL, sdev_store_delete);
 
 420 store_state_field(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 
 423         struct scsi_device *sdev = to_scsi_device(dev);
 
 424         enum scsi_device_state state = 0;
 
 426         for (i = 0; i < sizeof(sdev_states)/sizeof(sdev_states[0]); i++) {
 
 427                 const int len = strlen(sdev_states[i].name);
 
 428                 if (strncmp(sdev_states[i].name, buf, len) == 0 &&
 
 430                         state = sdev_states[i].value;
 
 437         if (scsi_device_set_state(sdev, state))
 
 443 show_state_field(struct device *dev, struct device_attribute *attr, char *buf)
 
 445         struct scsi_device *sdev = to_scsi_device(dev);
 
 446         const char *name = scsi_device_state_name(sdev->sdev_state);
 
 451         return snprintf(buf, 20, "%s\n", name);
 
 454 static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, show_state_field, store_state_field);
 
 457 show_queue_type_field(struct device *dev, struct device_attribute *attr, char *buf)
 
 459         struct scsi_device *sdev = to_scsi_device(dev);
 
 460         const char *name = "none";
 
 462         if (sdev->ordered_tags)
 
 464         else if (sdev->simple_tags)
 
 467         return snprintf(buf, 20, "%s\n", name);
 
 470 static DEVICE_ATTR(queue_type, S_IRUGO, show_queue_type_field, NULL);
 
 473 show_iostat_counterbits(struct device *dev, struct device_attribute *attr, char *buf)
 
 475         return snprintf(buf, 20, "%d\n", (int)sizeof(atomic_t) * 8);
 
 478 static DEVICE_ATTR(iocounterbits, S_IRUGO, show_iostat_counterbits, NULL);
 
 480 #define show_sdev_iostat(field)                                         \
 
 482 show_iostat_##field(struct device *dev, struct device_attribute *attr, char *buf)                       \
 
 484         struct scsi_device *sdev = to_scsi_device(dev);                 \
 
 485         unsigned long long count = atomic_read(&sdev->field);           \
 
 486         return snprintf(buf, 20, "0x%llx\n", count);                    \
 
 488 static DEVICE_ATTR(field, S_IRUGO, show_iostat_##field, NULL)
 
 490 show_sdev_iostat(iorequest_cnt);
 
 491 show_sdev_iostat(iodone_cnt);
 
 492 show_sdev_iostat(ioerr_cnt);
 
 495 /* Default template for device attributes.  May NOT be modified */
 
 496 static struct device_attribute *scsi_sysfs_sdev_attrs[] = {
 
 497         &dev_attr_device_blocked,
 
 498         &dev_attr_queue_depth,
 
 499         &dev_attr_queue_type,
 
 501         &dev_attr_scsi_level,
 
 509         &dev_attr_iocounterbits,
 
 510         &dev_attr_iorequest_cnt,
 
 511         &dev_attr_iodone_cnt,
 
 516 static ssize_t sdev_store_queue_depth_rw(struct device *dev, struct device_attribute *attr, const char *buf,
 
 520         struct scsi_device *sdev = to_scsi_device(dev);
 
 521         struct scsi_host_template *sht = sdev->host->hostt;
 
 523         if (!sht->change_queue_depth)
 
 526         depth = simple_strtoul(buf, NULL, 0);
 
 531         retval = sht->change_queue_depth(sdev, depth);
 
 538 static struct device_attribute sdev_attr_queue_depth_rw =
 
 539         __ATTR(queue_depth, S_IRUGO | S_IWUSR, sdev_show_queue_depth,
 
 540                sdev_store_queue_depth_rw);
 
 542 static ssize_t sdev_store_queue_type_rw(struct device *dev, struct device_attribute *attr, const char *buf,
 
 545         struct scsi_device *sdev = to_scsi_device(dev);
 
 546         struct scsi_host_template *sht = sdev->host->hostt;
 
 547         int tag_type = 0, retval;
 
 548         int prev_tag_type = scsi_get_tag_type(sdev);
 
 550         if (!sdev->tagged_supported || !sht->change_queue_type)
 
 553         if (strncmp(buf, "ordered", 7) == 0)
 
 554                 tag_type = MSG_ORDERED_TAG;
 
 555         else if (strncmp(buf, "simple", 6) == 0)
 
 556                 tag_type = MSG_SIMPLE_TAG;
 
 557         else if (strncmp(buf, "none", 4) != 0)
 
 560         if (tag_type == prev_tag_type)
 
 563         retval = sht->change_queue_type(sdev, tag_type);
 
 570 static struct device_attribute sdev_attr_queue_type_rw =
 
 571         __ATTR(queue_type, S_IRUGO | S_IWUSR, show_queue_type_field,
 
 572                sdev_store_queue_type_rw);
 
 574 static struct device_attribute *attr_changed_internally(
 
 575                 struct Scsi_Host *shost,
 
 576                 struct device_attribute * attr)
 
 578         if (!strcmp("queue_depth", attr->attr.name)
 
 579             && shost->hostt->change_queue_depth)
 
 580                 return &sdev_attr_queue_depth_rw;
 
 581         else if (!strcmp("queue_type", attr->attr.name)
 
 582             && shost->hostt->change_queue_type)
 
 583                 return &sdev_attr_queue_type_rw;
 
 588 static struct device_attribute *attr_overridden(
 
 589                 struct device_attribute **attrs,
 
 590                 struct device_attribute *attr)
 
 596         for (i = 0; attrs[i]; i++)
 
 597                 if (!strcmp(attrs[i]->attr.name, attr->attr.name))
 
 602 static int attr_add(struct device *dev, struct device_attribute *attr)
 
 604         struct device_attribute *base_attr;
 
 607          * Spare the caller from having to copy things it's not interested in.
 
 609         base_attr = attr_overridden(scsi_sysfs_sdev_attrs, attr);
 
 611                 /* extend permissions */
 
 612                 attr->attr.mode |= base_attr->attr.mode;
 
 614                 /* override null show/store with default */
 
 616                         attr->show = base_attr->show;
 
 618                         attr->store = base_attr->store;
 
 621         return device_create_file(dev, attr);
 
 625  * scsi_sysfs_add_sdev - add scsi device to sysfs
 
 626  * @sdev:       scsi_device to add
 
 629  *      0 on Success / non-zero on Failure
 
 631 int scsi_sysfs_add_sdev(struct scsi_device *sdev)
 
 635         if ((error = scsi_device_set_state(sdev, SDEV_RUNNING)) != 0)
 
 638         error = device_add(&sdev->sdev_gendev);
 
 640                 put_device(sdev->sdev_gendev.parent);
 
 641                 printk(KERN_INFO "error 1\n");
 
 644         error = class_device_add(&sdev->sdev_classdev);
 
 646                 printk(KERN_INFO "error 2\n");
 
 650         /* take a reference for the sdev_classdev; this is
 
 651          * released by the sdev_class .release */
 
 652         get_device(&sdev->sdev_gendev);
 
 653         if (sdev->host->hostt->sdev_attrs) {
 
 654                 for (i = 0; sdev->host->hostt->sdev_attrs[i]; i++) {
 
 655                         error = attr_add(&sdev->sdev_gendev,
 
 656                                         sdev->host->hostt->sdev_attrs[i]);
 
 658                                 __scsi_remove_device(sdev);
 
 664         for (i = 0; scsi_sysfs_sdev_attrs[i]; i++) {
 
 665                 if (!attr_overridden(sdev->host->hostt->sdev_attrs,
 
 666                                         scsi_sysfs_sdev_attrs[i])) {
 
 667                         struct device_attribute * attr = 
 
 668                                 attr_changed_internally(sdev->host, 
 
 669                                                         scsi_sysfs_sdev_attrs[i]);
 
 670                         error = device_create_file(&sdev->sdev_gendev, attr);
 
 672                                 __scsi_remove_device(sdev);
 
 678         transport_add_device(&sdev->sdev_gendev);
 
 683         scsi_device_set_state(sdev, SDEV_CANCEL);
 
 685         device_del(&sdev->sdev_gendev);
 
 686         transport_destroy_device(&sdev->sdev_gendev);
 
 687         put_device(&sdev->sdev_gendev);
 
 692 void __scsi_remove_device(struct scsi_device *sdev)
 
 694         struct device *dev = &sdev->sdev_gendev;
 
 696         if (scsi_device_set_state(sdev, SDEV_CANCEL) != 0)
 
 699         class_device_unregister(&sdev->sdev_classdev);
 
 700         transport_remove_device(dev);
 
 702         scsi_device_set_state(sdev, SDEV_DEL);
 
 703         if (sdev->host->hostt->slave_destroy)
 
 704                 sdev->host->hostt->slave_destroy(sdev);
 
 705         transport_destroy_device(dev);
 
 710  * scsi_remove_device - unregister a device from the scsi bus
 
 711  * @sdev:       scsi_device to unregister
 
 713 void scsi_remove_device(struct scsi_device *sdev)
 
 715         struct Scsi_Host *shost = sdev->host;
 
 717         down(&shost->scan_mutex);
 
 718         __scsi_remove_device(sdev);
 
 719         up(&shost->scan_mutex);
 
 721 EXPORT_SYMBOL(scsi_remove_device);
 
 723 void __scsi_remove_target(struct scsi_target *starget)
 
 725         struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
 
 727         struct scsi_device *sdev;
 
 729         spin_lock_irqsave(shost->host_lock, flags);
 
 732         list_for_each_entry(sdev, &shost->__devices, siblings) {
 
 733                 if (sdev->channel != starget->channel ||
 
 734                     sdev->id != starget->id ||
 
 735                     sdev->sdev_state == SDEV_DEL)
 
 737                 spin_unlock_irqrestore(shost->host_lock, flags);
 
 738                 scsi_remove_device(sdev);
 
 739                 spin_lock_irqsave(shost->host_lock, flags);
 
 742         spin_unlock_irqrestore(shost->host_lock, flags);
 
 743         scsi_target_reap(starget);
 
 746 static int __remove_child (struct device * dev, void * data)
 
 748         if (scsi_is_target_device(dev))
 
 749                 __scsi_remove_target(to_scsi_target(dev));
 
 754  * scsi_remove_target - try to remove a target and all its devices
 
 755  * @dev: generic starget or parent of generic stargets to be removed
 
 757  * Note: This is slightly racy.  It is possible that if the user
 
 758  * requests the addition of another device then the target won't be
 
 761 void scsi_remove_target(struct device *dev)
 
 765         if (scsi_is_target_device(dev)) {
 
 766                 __scsi_remove_target(to_scsi_target(dev));
 
 770         rdev = get_device(dev);
 
 771         device_for_each_child(dev, NULL, __remove_child);
 
 774 EXPORT_SYMBOL(scsi_remove_target);
 
 776 int scsi_register_driver(struct device_driver *drv)
 
 778         drv->bus = &scsi_bus_type;
 
 780         return driver_register(drv);
 
 782 EXPORT_SYMBOL(scsi_register_driver);
 
 784 int scsi_register_interface(struct class_interface *intf)
 
 786         intf->class = &sdev_class;
 
 788         return class_interface_register(intf);
 
 790 EXPORT_SYMBOL(scsi_register_interface);
 
 793 static struct class_device_attribute *class_attr_overridden(
 
 794                 struct class_device_attribute **attrs,
 
 795                 struct class_device_attribute *attr)
 
 801         for (i = 0; attrs[i]; i++)
 
 802                 if (!strcmp(attrs[i]->attr.name, attr->attr.name))
 
 807 static int class_attr_add(struct class_device *classdev,
 
 808                 struct class_device_attribute *attr)
 
 810         struct class_device_attribute *base_attr;
 
 813          * Spare the caller from having to copy things it's not interested in.
 
 815         base_attr = class_attr_overridden(scsi_sysfs_shost_attrs, attr);
 
 817                 /* extend permissions */
 
 818                 attr->attr.mode |= base_attr->attr.mode;
 
 820                 /* override null show/store with default */
 
 822                         attr->show = base_attr->show;
 
 824                         attr->store = base_attr->store;
 
 827         return class_device_create_file(classdev, attr);
 
 831  * scsi_sysfs_add_host - add scsi host to subsystem
 
 832  * @shost:     scsi host struct to add to subsystem
 
 833  * @dev:       parent struct device pointer
 
 835 int scsi_sysfs_add_host(struct Scsi_Host *shost)
 
 839         if (shost->hostt->shost_attrs) {
 
 840                 for (i = 0; shost->hostt->shost_attrs[i]; i++) {
 
 841                         error = class_attr_add(&shost->shost_classdev,
 
 842                                         shost->hostt->shost_attrs[i]);
 
 848         for (i = 0; scsi_sysfs_shost_attrs[i]; i++) {
 
 849                 if (!class_attr_overridden(shost->hostt->shost_attrs,
 
 850                                         scsi_sysfs_shost_attrs[i])) {
 
 851                         error = class_device_create_file(&shost->shost_classdev,
 
 852                                         scsi_sysfs_shost_attrs[i]);
 
 858         transport_register_device(&shost->shost_gendev);
 
 862 void scsi_sysfs_device_initialize(struct scsi_device *sdev)
 
 865         struct Scsi_Host *shost = sdev->host;
 
 866         struct scsi_target  *starget = sdev->sdev_target;
 
 868         device_initialize(&sdev->sdev_gendev);
 
 869         sdev->sdev_gendev.bus = &scsi_bus_type;
 
 870         sdev->sdev_gendev.release = scsi_device_dev_release;
 
 871         sprintf(sdev->sdev_gendev.bus_id,"%d:%d:%d:%d",
 
 872                 sdev->host->host_no, sdev->channel, sdev->id,
 
 875         class_device_initialize(&sdev->sdev_classdev);
 
 876         sdev->sdev_classdev.dev = &sdev->sdev_gendev;
 
 877         sdev->sdev_classdev.class = &sdev_class;
 
 878         snprintf(sdev->sdev_classdev.class_id, BUS_ID_SIZE,
 
 879                  "%d:%d:%d:%d", sdev->host->host_no,
 
 880                  sdev->channel, sdev->id, sdev->lun);
 
 881         sdev->scsi_level = SCSI_2;
 
 882         transport_setup_device(&sdev->sdev_gendev);
 
 883         spin_lock_irqsave(shost->host_lock, flags);
 
 884         list_add_tail(&sdev->same_target_siblings, &starget->devices);
 
 885         list_add_tail(&sdev->siblings, &shost->__devices);
 
 886         spin_unlock_irqrestore(shost->host_lock, flags);
 
 889 int scsi_is_sdev_device(const struct device *dev)
 
 891         return dev->release == scsi_device_dev_release;
 
 893 EXPORT_SYMBOL(scsi_is_sdev_device);
 
 895 /* A blank transport template that is used in drivers that don't
 
 896  * yet implement Transport Attributes */
 
 897 struct scsi_transport_template blank_transport_template = { { { {NULL, }, }, }, };