4  * SCSI sysfs interface routines.
 
   6  * Created to pull SCSI mid layer sysfs routines into one file.
 
   9 #include <linux/module.h>
 
  10 #include <linux/init.h>
 
  11 #include <linux/blkdev.h>
 
  12 #include <linux/device.h>
 
  14 #include <scsi/scsi.h>
 
  15 #include <scsi/scsi_device.h>
 
  16 #include <scsi/scsi_host.h>
 
  17 #include <scsi/scsi_tcq.h>
 
  18 #include <scsi/scsi_transport.h>
 
  19 #include <scsi/scsi_driver.h>
 
  21 #include "scsi_priv.h"
 
  22 #include "scsi_logging.h"
 
  24 static struct device_type scsi_dev_type;
 
  27         enum scsi_device_state  value;
 
  30         { SDEV_CREATED, "created" },
 
  31         { SDEV_RUNNING, "running" },
 
  32         { SDEV_CANCEL, "cancel" },
 
  33         { SDEV_DEL, "deleted" },
 
  34         { SDEV_QUIESCE, "quiesce" },
 
  35         { SDEV_OFFLINE, "offline" },
 
  36         { SDEV_BLOCK,   "blocked" },
 
  37         { SDEV_CREATED_BLOCK, "created-blocked" },
 
  40 const char *scsi_device_state_name(enum scsi_device_state state)
 
  45         for (i = 0; i < ARRAY_SIZE(sdev_states); i++) {
 
  46                 if (sdev_states[i].value == state) {
 
  47                         name = sdev_states[i].name;
 
  55         enum scsi_host_state    value;
 
  58         { SHOST_CREATED, "created" },
 
  59         { SHOST_RUNNING, "running" },
 
  60         { SHOST_CANCEL, "cancel" },
 
  61         { SHOST_DEL, "deleted" },
 
  62         { SHOST_RECOVERY, "recovery" },
 
  63         { SHOST_CANCEL_RECOVERY, "cancel/recovery" },
 
  64         { SHOST_DEL_RECOVERY, "deleted/recovery", },
 
  66 const char *scsi_host_state_name(enum scsi_host_state state)
 
  71         for (i = 0; i < ARRAY_SIZE(shost_states); i++) {
 
  72                 if (shost_states[i].value == state) {
 
  73                         name = shost_states[i].name;
 
  80 static int check_set(unsigned int *val, char *src)
 
  84         if (strncmp(src, "-", 20) == 0) {
 
  85                 *val = SCAN_WILD_CARD;
 
  88                  * Doesn't check for int overflow
 
  90                 *val = simple_strtoul(src, &last, 0);
 
  97 static int scsi_scan(struct Scsi_Host *shost, const char *str)
 
  99         char s1[15], s2[15], s3[15], junk;
 
 100         unsigned int channel, id, lun;
 
 103         res = sscanf(str, "%10s %10s %10s %c", s1, s2, s3, &junk);
 
 106         if (check_set(&channel, s1))
 
 108         if (check_set(&id, s2))
 
 110         if (check_set(&lun, s3))
 
 112         if (shost->transportt->user_scan)
 
 113                 res = shost->transportt->user_scan(shost, channel, id, lun);
 
 115                 res = scsi_scan_host_selected(shost, channel, id, lun, 1);
 
 120  * shost_show_function: macro to create an attr function that can be used to
 
 121  * show a non-bit field.
 
 123 #define shost_show_function(name, field, format_string)                 \
 
 125 show_##name (struct device *dev, struct device_attribute *attr,         \
 
 128         struct Scsi_Host *shost = class_to_shost(dev);                  \
 
 129         return snprintf (buf, 20, format_string, shost->field);         \
 
 133  * shost_rd_attr: macro to create a function and attribute variable for a
 
 136 #define shost_rd_attr2(name, field, format_string)                      \
 
 137         shost_show_function(name, field, format_string)                 \
 
 138 static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL);
 
 140 #define shost_rd_attr(field, format_string) \
 
 141 shost_rd_attr2(field, field, format_string)
 
 144  * Create the actual show/store functions and data structures.
 
 148 store_scan(struct device *dev, struct device_attribute *attr,
 
 149            const char *buf, size_t count)
 
 151         struct Scsi_Host *shost = class_to_shost(dev);
 
 154         res = scsi_scan(shost, buf);
 
 159 static DEVICE_ATTR(scan, S_IWUSR, NULL, store_scan);
 
 162 store_shost_state(struct device *dev, struct device_attribute *attr,
 
 163                   const char *buf, size_t count)
 
 166         struct Scsi_Host *shost = class_to_shost(dev);
 
 167         enum scsi_host_state state = 0;
 
 169         for (i = 0; i < ARRAY_SIZE(shost_states); i++) {
 
 170                 const int len = strlen(shost_states[i].name);
 
 171                 if (strncmp(shost_states[i].name, buf, len) == 0 &&
 
 173                         state = shost_states[i].value;
 
 180         if (scsi_host_set_state(shost, state))
 
 186 show_shost_state(struct device *dev, struct device_attribute *attr, char *buf)
 
 188         struct Scsi_Host *shost = class_to_shost(dev);
 
 189         const char *name = scsi_host_state_name(shost->shost_state);
 
 194         return snprintf(buf, 20, "%s\n", name);
 
 197 /* DEVICE_ATTR(state) clashes with dev_attr_state for sdev */
 
 198 struct device_attribute dev_attr_hstate =
 
 199         __ATTR(state, S_IRUGO | S_IWUSR, show_shost_state, store_shost_state);
 
 202 show_shost_mode(unsigned int mode, char *buf)
 
 206         if (mode & MODE_INITIATOR)
 
 207                 len = sprintf(buf, "%s", "Initiator");
 
 209         if (mode & MODE_TARGET)
 
 210                 len += sprintf(buf + len, "%s%s", len ? ", " : "", "Target");
 
 212         len += sprintf(buf + len, "\n");
 
 218 show_shost_supported_mode(struct device *dev, struct device_attribute *attr,
 
 221         struct Scsi_Host *shost = class_to_shost(dev);
 
 222         unsigned int supported_mode = shost->hostt->supported_mode;
 
 224         if (supported_mode == MODE_UNKNOWN)
 
 225                 /* by default this should be initiator */
 
 226                 supported_mode = MODE_INITIATOR;
 
 228         return show_shost_mode(supported_mode, buf);
 
 231 static DEVICE_ATTR(supported_mode, S_IRUGO | S_IWUSR, show_shost_supported_mode, NULL);
 
 234 show_shost_active_mode(struct device *dev,
 
 235                        struct device_attribute *attr, char *buf)
 
 237         struct Scsi_Host *shost = class_to_shost(dev);
 
 239         if (shost->active_mode == MODE_UNKNOWN)
 
 240                 return snprintf(buf, 20, "unknown\n");
 
 242                 return show_shost_mode(shost->active_mode, buf);
 
 245 static DEVICE_ATTR(active_mode, S_IRUGO | S_IWUSR, show_shost_active_mode, NULL);
 
 247 shost_rd_attr(unique_id, "%u\n");
 
 248 shost_rd_attr(host_busy, "%hu\n");
 
 249 shost_rd_attr(cmd_per_lun, "%hd\n");
 
 250 shost_rd_attr(can_queue, "%hd\n");
 
 251 shost_rd_attr(sg_tablesize, "%hu\n");
 
 252 shost_rd_attr(unchecked_isa_dma, "%d\n");
 
 253 shost_rd_attr(prot_capabilities, "%u\n");
 
 254 shost_rd_attr(prot_guard_type, "%hd\n");
 
 255 shost_rd_attr2(proc_name, hostt->proc_name, "%s\n");
 
 257 static struct attribute *scsi_sysfs_shost_attrs[] = {
 
 258         &dev_attr_unique_id.attr,
 
 259         &dev_attr_host_busy.attr,
 
 260         &dev_attr_cmd_per_lun.attr,
 
 261         &dev_attr_can_queue.attr,
 
 262         &dev_attr_sg_tablesize.attr,
 
 263         &dev_attr_unchecked_isa_dma.attr,
 
 264         &dev_attr_proc_name.attr,
 
 266         &dev_attr_hstate.attr,
 
 267         &dev_attr_supported_mode.attr,
 
 268         &dev_attr_active_mode.attr,
 
 269         &dev_attr_prot_capabilities.attr,
 
 270         &dev_attr_prot_guard_type.attr,
 
 274 struct attribute_group scsi_shost_attr_group = {
 
 275         .attrs =        scsi_sysfs_shost_attrs,
 
 278 struct attribute_group *scsi_sysfs_shost_attr_groups[] = {
 
 279         &scsi_shost_attr_group,
 
 283 static void scsi_device_cls_release(struct device *class_dev)
 
 285         struct scsi_device *sdev;
 
 287         sdev = class_to_sdev(class_dev);
 
 288         put_device(&sdev->sdev_gendev);
 
 291 static void scsi_device_dev_release_usercontext(struct work_struct *work)
 
 293         struct scsi_device *sdev;
 
 294         struct device *parent;
 
 295         struct scsi_target *starget;
 
 296         struct list_head *this, *tmp;
 
 299         sdev = container_of(work, struct scsi_device, ew.work);
 
 301         parent = sdev->sdev_gendev.parent;
 
 302         starget = to_scsi_target(parent);
 
 304         spin_lock_irqsave(sdev->host->host_lock, flags);
 
 306         list_del(&sdev->siblings);
 
 307         list_del(&sdev->same_target_siblings);
 
 308         list_del(&sdev->starved_entry);
 
 309         spin_unlock_irqrestore(sdev->host->host_lock, flags);
 
 311         cancel_work_sync(&sdev->event_work);
 
 313         list_for_each_safe(this, tmp, &sdev->event_list) {
 
 314                 struct scsi_event *evt;
 
 316                 evt = list_entry(this, struct scsi_event, node);
 
 317                 list_del(&evt->node);
 
 321         if (sdev->request_queue) {
 
 322                 sdev->request_queue->queuedata = NULL;
 
 323                 /* user context needed to free queue */
 
 324                 scsi_free_queue(sdev->request_queue);
 
 325                 /* temporary expedient, try to catch use of queue lock
 
 326                  * after free of sdev */
 
 327                 sdev->request_queue = NULL;
 
 330         scsi_target_reap(scsi_target(sdev));
 
 332         kfree(sdev->inquiry);
 
 339 static void scsi_device_dev_release(struct device *dev)
 
 341         struct scsi_device *sdp = to_scsi_device(dev);
 
 342         execute_in_process_context(scsi_device_dev_release_usercontext,
 
 346 static struct class sdev_class = {
 
 347         .name           = "scsi_device",
 
 348         .dev_release    = scsi_device_cls_release,
 
 351 /* all probing is done in the individual ->probe routines */
 
 352 static int scsi_bus_match(struct device *dev, struct device_driver *gendrv)
 
 354         struct scsi_device *sdp;
 
 356         if (dev->type != &scsi_dev_type)
 
 359         sdp = to_scsi_device(dev);
 
 360         if (sdp->no_uld_attach)
 
 362         return (sdp->inq_periph_qual == SCSI_INQ_PQ_CON)? 1: 0;
 
 365 static int scsi_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
 
 367         struct scsi_device *sdev;
 
 369         if (dev->type != &scsi_dev_type)
 
 372         sdev = to_scsi_device(dev);
 
 374         add_uevent_var(env, "MODALIAS=" SCSI_DEVICE_MODALIAS_FMT, sdev->type);
 
 378 static int scsi_bus_suspend(struct device * dev, pm_message_t state)
 
 380         struct device_driver *drv;
 
 381         struct scsi_device *sdev;
 
 384         if (dev->type != &scsi_dev_type)
 
 388         sdev = to_scsi_device(dev);
 
 390         err = scsi_device_quiesce(sdev);
 
 394         if (drv && drv->suspend) {
 
 395                 err = drv->suspend(dev, state);
 
 403 static int scsi_bus_resume(struct device * dev)
 
 405         struct device_driver *drv;
 
 406         struct scsi_device *sdev;
 
 409         if (dev->type != &scsi_dev_type)
 
 413         sdev = to_scsi_device(dev);
 
 415         if (drv && drv->resume)
 
 416                 err = drv->resume(dev);
 
 418         scsi_device_resume(sdev);
 
 423 static int scsi_bus_remove(struct device *dev)
 
 425         struct device_driver *drv = dev->driver;
 
 426         struct scsi_device *sdev = to_scsi_device(dev);
 
 429         /* reset the prep_fn back to the default since the
 
 430          * driver may have altered it and it's being removed */
 
 431         blk_queue_prep_rq(sdev->request_queue, scsi_prep_fn);
 
 433         if (drv && drv->remove)
 
 434                 err = drv->remove(dev);
 
 439 struct bus_type scsi_bus_type = {
 
 441         .match          = scsi_bus_match,
 
 442         .uevent         = scsi_bus_uevent,
 
 443         .suspend        = scsi_bus_suspend,
 
 444         .resume         = scsi_bus_resume,
 
 445         .remove         = scsi_bus_remove,
 
 447 EXPORT_SYMBOL_GPL(scsi_bus_type);
 
 449 int scsi_sysfs_register(void)
 
 453         error = bus_register(&scsi_bus_type);
 
 455                 error = class_register(&sdev_class);
 
 457                         bus_unregister(&scsi_bus_type);
 
 463 void scsi_sysfs_unregister(void)
 
 465         class_unregister(&sdev_class);
 
 466         bus_unregister(&scsi_bus_type);
 
 470  * sdev_show_function: macro to create an attr function that can be used to
 
 471  * show a non-bit field.
 
 473 #define sdev_show_function(field, format_string)                                \
 
 475 sdev_show_##field (struct device *dev, struct device_attribute *attr,   \
 
 478         struct scsi_device *sdev;                                       \
 
 479         sdev = to_scsi_device(dev);                                     \
 
 480         return snprintf (buf, 20, format_string, sdev->field);          \
 
 484  * sdev_rd_attr: macro to create a function and attribute variable for a
 
 487 #define sdev_rd_attr(field, format_string)                              \
 
 488         sdev_show_function(field, format_string)                        \
 
 489 static DEVICE_ATTR(field, S_IRUGO, sdev_show_##field, NULL);
 
 493  * sdev_rd_attr: create a function and attribute variable for a
 
 496 #define sdev_rw_attr(field, format_string)                              \
 
 497         sdev_show_function(field, format_string)                                \
 
 500 sdev_store_##field (struct device *dev, struct device_attribute *attr,  \
 
 501                     const char *buf, size_t count)                      \
 
 503         struct scsi_device *sdev;                                       \
 
 504         sdev = to_scsi_device(dev);                                     \
 
 505         snscanf (buf, 20, format_string, &sdev->field);                 \
 
 508 static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##field);
 
 510 /* Currently we don't export bit fields, but we might in future,
 
 511  * so leave this code in */
 
 514  * sdev_rd_attr: create a function and attribute variable for a
 
 515  * read/write bit field.
 
 517 #define sdev_rw_attr_bit(field)                                         \
 
 518         sdev_show_function(field, "%d\n")                                       \
 
 521 sdev_store_##field (struct device *dev, struct device_attribute *attr,  \
 
 522                     const char *buf, size_t count)                      \
 
 525         struct scsi_device *sdev;                                       \
 
 526         ret = scsi_sdev_check_buf_bit(buf);                             \
 
 528                 sdev = to_scsi_device(dev);                             \
 
 534 static DEVICE_ATTR(field, S_IRUGO | S_IWUSR, sdev_show_##field, sdev_store_##field);
 
 537  * scsi_sdev_check_buf_bit: return 0 if buf is "0", return 1 if buf is "1",
 
 538  * else return -EINVAL.
 
 540 static int scsi_sdev_check_buf_bit(const char *buf)
 
 542         if ((buf[1] == '\0') || ((buf[1] == '\n') && (buf[2] == '\0'))) {
 
 545                 else if (buf[0] == '0')
 
 554  * Create the actual show/store functions and data structures.
 
 556 sdev_rd_attr (device_blocked, "%d\n");
 
 557 sdev_rd_attr (queue_depth, "%d\n");
 
 558 sdev_rd_attr (type, "%d\n");
 
 559 sdev_rd_attr (scsi_level, "%d\n");
 
 560 sdev_rd_attr (vendor, "%.8s\n");
 
 561 sdev_rd_attr (model, "%.16s\n");
 
 562 sdev_rd_attr (rev, "%.4s\n");
 
 565  * TODO: can we make these symlinks to the block layer ones?
 
 568 sdev_show_timeout (struct device *dev, struct device_attribute *attr, char *buf)
 
 570         struct scsi_device *sdev;
 
 571         sdev = to_scsi_device(dev);
 
 572         return snprintf(buf, 20, "%d\n", sdev->request_queue->rq_timeout / HZ);
 
 576 sdev_store_timeout (struct device *dev, struct device_attribute *attr,
 
 577                     const char *buf, size_t count)
 
 579         struct scsi_device *sdev;
 
 581         sdev = to_scsi_device(dev);
 
 582         sscanf (buf, "%d\n", &timeout);
 
 583         blk_queue_rq_timeout(sdev->request_queue, timeout * HZ);
 
 586 static DEVICE_ATTR(timeout, S_IRUGO | S_IWUSR, sdev_show_timeout, sdev_store_timeout);
 
 589 store_rescan_field (struct device *dev, struct device_attribute *attr,
 
 590                     const char *buf, size_t count)
 
 592         scsi_rescan_device(dev);
 
 595 static DEVICE_ATTR(rescan, S_IWUSR, NULL, store_rescan_field);
 
 597 static void sdev_store_delete_callback(struct device *dev)
 
 599         scsi_remove_device(to_scsi_device(dev));
 
 603 sdev_store_delete(struct device *dev, struct device_attribute *attr,
 
 604                   const char *buf, size_t count)
 
 608         /* An attribute cannot be unregistered by one of its own methods,
 
 609          * so we have to use this roundabout approach.
 
 611         rc = device_schedule_callback(dev, sdev_store_delete_callback);
 
 616 static DEVICE_ATTR(delete, S_IWUSR, NULL, sdev_store_delete);
 
 619 store_state_field(struct device *dev, struct device_attribute *attr,
 
 620                   const char *buf, size_t count)
 
 623         struct scsi_device *sdev = to_scsi_device(dev);
 
 624         enum scsi_device_state state = 0;
 
 626         for (i = 0; i < ARRAY_SIZE(sdev_states); i++) {
 
 627                 const int len = strlen(sdev_states[i].name);
 
 628                 if (strncmp(sdev_states[i].name, buf, len) == 0 &&
 
 630                         state = sdev_states[i].value;
 
 637         if (scsi_device_set_state(sdev, state))
 
 643 show_state_field(struct device *dev, struct device_attribute *attr, char *buf)
 
 645         struct scsi_device *sdev = to_scsi_device(dev);
 
 646         const char *name = scsi_device_state_name(sdev->sdev_state);
 
 651         return snprintf(buf, 20, "%s\n", name);
 
 654 static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, show_state_field, store_state_field);
 
 657 show_queue_type_field(struct device *dev, struct device_attribute *attr,
 
 660         struct scsi_device *sdev = to_scsi_device(dev);
 
 661         const char *name = "none";
 
 663         if (sdev->ordered_tags)
 
 665         else if (sdev->simple_tags)
 
 668         return snprintf(buf, 20, "%s\n", name);
 
 671 static DEVICE_ATTR(queue_type, S_IRUGO, show_queue_type_field, NULL);
 
 674 show_iostat_counterbits(struct device *dev, struct device_attribute *attr,                              char *buf)
 
 676         return snprintf(buf, 20, "%d\n", (int)sizeof(atomic_t) * 8);
 
 679 static DEVICE_ATTR(iocounterbits, S_IRUGO, show_iostat_counterbits, NULL);
 
 681 #define show_sdev_iostat(field)                                         \
 
 683 show_iostat_##field(struct device *dev, struct device_attribute *attr,  \
 
 686         struct scsi_device *sdev = to_scsi_device(dev);                 \
 
 687         unsigned long long count = atomic_read(&sdev->field);           \
 
 688         return snprintf(buf, 20, "0x%llx\n", count);                    \
 
 690 static DEVICE_ATTR(field, S_IRUGO, show_iostat_##field, NULL)
 
 692 show_sdev_iostat(iorequest_cnt);
 
 693 show_sdev_iostat(iodone_cnt);
 
 694 show_sdev_iostat(ioerr_cnt);
 
 697 sdev_show_modalias(struct device *dev, struct device_attribute *attr, char *buf)
 
 699         struct scsi_device *sdev;
 
 700         sdev = to_scsi_device(dev);
 
 701         return snprintf (buf, 20, SCSI_DEVICE_MODALIAS_FMT "\n", sdev->type);
 
 703 static DEVICE_ATTR(modalias, S_IRUGO, sdev_show_modalias, NULL);
 
 705 #define DECLARE_EVT_SHOW(name, Cap_name)                                \
 
 707 sdev_show_evt_##name(struct device *dev, struct device_attribute *attr, \
 
 710         struct scsi_device *sdev = to_scsi_device(dev);                 \
 
 711         int val = test_bit(SDEV_EVT_##Cap_name, sdev->supported_events);\
 
 712         return snprintf(buf, 20, "%d\n", val);                          \
 
 715 #define DECLARE_EVT_STORE(name, Cap_name)                               \
 
 717 sdev_store_evt_##name(struct device *dev, struct device_attribute *attr,\
 
 718                       const char *buf, size_t count)                    \
 
 720         struct scsi_device *sdev = to_scsi_device(dev);                 \
 
 721         int val = simple_strtoul(buf, NULL, 0);                         \
 
 723                 clear_bit(SDEV_EVT_##Cap_name, sdev->supported_events); \
 
 725                 set_bit(SDEV_EVT_##Cap_name, sdev->supported_events);   \
 
 731 #define DECLARE_EVT(name, Cap_name)                                     \
 
 732         DECLARE_EVT_SHOW(name, Cap_name)                                \
 
 733         DECLARE_EVT_STORE(name, Cap_name)                               \
 
 734         static DEVICE_ATTR(evt_##name, S_IRUGO, sdev_show_evt_##name,   \
 
 735                            sdev_store_evt_##name);
 
 736 #define REF_EVT(name) &dev_attr_evt_##name.attr
 
 738 DECLARE_EVT(media_change, MEDIA_CHANGE)
 
 740 /* Default template for device attributes.  May NOT be modified */
 
 741 static struct attribute *scsi_sdev_attrs[] = {
 
 742         &dev_attr_device_blocked.attr,
 
 744         &dev_attr_scsi_level.attr,
 
 745         &dev_attr_vendor.attr,
 
 746         &dev_attr_model.attr,
 
 748         &dev_attr_rescan.attr,
 
 749         &dev_attr_delete.attr,
 
 750         &dev_attr_state.attr,
 
 751         &dev_attr_timeout.attr,
 
 752         &dev_attr_iocounterbits.attr,
 
 753         &dev_attr_iorequest_cnt.attr,
 
 754         &dev_attr_iodone_cnt.attr,
 
 755         &dev_attr_ioerr_cnt.attr,
 
 756         &dev_attr_modalias.attr,
 
 757         REF_EVT(media_change),
 
 761 static struct attribute_group scsi_sdev_attr_group = {
 
 762         .attrs =        scsi_sdev_attrs,
 
 765 static struct attribute_group *scsi_sdev_attr_groups[] = {
 
 766         &scsi_sdev_attr_group,
 
 771 sdev_store_queue_depth_rw(struct device *dev, struct device_attribute *attr,
 
 772                           const char *buf, size_t count)
 
 775         struct scsi_device *sdev = to_scsi_device(dev);
 
 776         struct scsi_host_template *sht = sdev->host->hostt;
 
 778         if (!sht->change_queue_depth)
 
 781         depth = simple_strtoul(buf, NULL, 0);
 
 786         retval = sht->change_queue_depth(sdev, depth);
 
 793 static struct device_attribute sdev_attr_queue_depth_rw =
 
 794         __ATTR(queue_depth, S_IRUGO | S_IWUSR, sdev_show_queue_depth,
 
 795                sdev_store_queue_depth_rw);
 
 798 sdev_store_queue_type_rw(struct device *dev, struct device_attribute *attr,
 
 799                          const char *buf, size_t count)
 
 801         struct scsi_device *sdev = to_scsi_device(dev);
 
 802         struct scsi_host_template *sht = sdev->host->hostt;
 
 803         int tag_type = 0, retval;
 
 804         int prev_tag_type = scsi_get_tag_type(sdev);
 
 806         if (!sdev->tagged_supported || !sht->change_queue_type)
 
 809         if (strncmp(buf, "ordered", 7) == 0)
 
 810                 tag_type = MSG_ORDERED_TAG;
 
 811         else if (strncmp(buf, "simple", 6) == 0)
 
 812                 tag_type = MSG_SIMPLE_TAG;
 
 813         else if (strncmp(buf, "none", 4) != 0)
 
 816         if (tag_type == prev_tag_type)
 
 819         retval = sht->change_queue_type(sdev, tag_type);
 
 826 static int scsi_target_add(struct scsi_target *starget)
 
 830         if (starget->state != STARGET_CREATED)
 
 833         error = device_add(&starget->dev);
 
 835                 dev_err(&starget->dev, "target device_add failed, error %d\n", error);
 
 836                 get_device(&starget->dev);
 
 837                 scsi_target_reap(starget);
 
 838                 put_device(&starget->dev);
 
 841         transport_add_device(&starget->dev);
 
 842         starget->state = STARGET_RUNNING;
 
 847 static struct device_attribute sdev_attr_queue_type_rw =
 
 848         __ATTR(queue_type, S_IRUGO | S_IWUSR, show_queue_type_field,
 
 849                sdev_store_queue_type_rw);
 
 852  * scsi_sysfs_add_sdev - add scsi device to sysfs
 
 853  * @sdev:       scsi_device to add
 
 856  *      0 on Success / non-zero on Failure
 
 858 int scsi_sysfs_add_sdev(struct scsi_device *sdev)
 
 861         struct request_queue *rq = sdev->request_queue;
 
 862         struct scsi_target *starget = sdev->sdev_target;
 
 864         if ((error = scsi_device_set_state(sdev, SDEV_RUNNING)) != 0)
 
 867         error = scsi_target_add(starget);
 
 871         transport_configure_device(&starget->dev);
 
 872         error = device_add(&sdev->sdev_gendev);
 
 874                 put_device(sdev->sdev_gendev.parent);
 
 875                 printk(KERN_INFO "error 1\n");
 
 878         error = device_add(&sdev->sdev_dev);
 
 880                 printk(KERN_INFO "error 2\n");
 
 884         /* take a reference for the sdev_dev; this is
 
 885          * released by the sdev_class .release */
 
 886         get_device(&sdev->sdev_gendev);
 
 888         /* create queue files, which may be writable, depending on the host */
 
 889         if (sdev->host->hostt->change_queue_depth)
 
 890                 error = device_create_file(&sdev->sdev_gendev, &sdev_attr_queue_depth_rw);
 
 892                 error = device_create_file(&sdev->sdev_gendev, &dev_attr_queue_depth);
 
 894                 __scsi_remove_device(sdev);
 
 897         if (sdev->host->hostt->change_queue_type)
 
 898                 error = device_create_file(&sdev->sdev_gendev, &sdev_attr_queue_type_rw);
 
 900                 error = device_create_file(&sdev->sdev_gendev, &dev_attr_queue_type);
 
 902                 __scsi_remove_device(sdev);
 
 906         error = bsg_register_queue(rq, &sdev->sdev_gendev, NULL, NULL);
 
 909                 sdev_printk(KERN_INFO, sdev,
 
 910                             "Failed to register bsg queue, errno=%d\n", error);
 
 912         /* we're treating error on bsg register as non-fatal, so pretend
 
 913          * nothing went wrong */
 
 916         /* add additional host specific attributes */
 
 917         if (sdev->host->hostt->sdev_attrs) {
 
 918                 for (i = 0; sdev->host->hostt->sdev_attrs[i]; i++) {
 
 919                         error = device_create_file(&sdev->sdev_gendev,
 
 920                                         sdev->host->hostt->sdev_attrs[i]);
 
 922                                 __scsi_remove_device(sdev);
 
 928         transport_add_device(&sdev->sdev_gendev);
 
 933         scsi_device_set_state(sdev, SDEV_CANCEL);
 
 935         device_del(&sdev->sdev_gendev);
 
 936         transport_destroy_device(&sdev->sdev_gendev);
 
 937         put_device(&sdev->sdev_gendev);
 
 942 void __scsi_remove_device(struct scsi_device *sdev)
 
 944         struct device *dev = &sdev->sdev_gendev;
 
 946         if (scsi_device_set_state(sdev, SDEV_CANCEL) != 0)
 
 949         bsg_unregister_queue(sdev->request_queue);
 
 950         device_unregister(&sdev->sdev_dev);
 
 951         transport_remove_device(dev);
 
 953         scsi_device_set_state(sdev, SDEV_DEL);
 
 954         if (sdev->host->hostt->slave_destroy)
 
 955                 sdev->host->hostt->slave_destroy(sdev);
 
 956         transport_destroy_device(dev);
 
 961  * scsi_remove_device - unregister a device from the scsi bus
 
 962  * @sdev:       scsi_device to unregister
 
 964 void scsi_remove_device(struct scsi_device *sdev)
 
 966         struct Scsi_Host *shost = sdev->host;
 
 968         mutex_lock(&shost->scan_mutex);
 
 969         __scsi_remove_device(sdev);
 
 970         mutex_unlock(&shost->scan_mutex);
 
 972 EXPORT_SYMBOL(scsi_remove_device);
 
 974 static void __scsi_remove_target(struct scsi_target *starget)
 
 976         struct Scsi_Host *shost = dev_to_shost(starget->dev.parent);
 
 978         struct scsi_device *sdev;
 
 980         spin_lock_irqsave(shost->host_lock, flags);
 
 983         list_for_each_entry(sdev, &shost->__devices, siblings) {
 
 984                 if (sdev->channel != starget->channel ||
 
 985                     sdev->id != starget->id ||
 
 986                     sdev->sdev_state == SDEV_DEL)
 
 988                 spin_unlock_irqrestore(shost->host_lock, flags);
 
 989                 scsi_remove_device(sdev);
 
 990                 spin_lock_irqsave(shost->host_lock, flags);
 
 993         spin_unlock_irqrestore(shost->host_lock, flags);
 
 994         scsi_target_reap(starget);
 
 997 static int __remove_child (struct device * dev, void * data)
 
 999         if (scsi_is_target_device(dev))
 
1000                 __scsi_remove_target(to_scsi_target(dev));
 
1005  * scsi_remove_target - try to remove a target and all its devices
 
1006  * @dev: generic starget or parent of generic stargets to be removed
 
1008  * Note: This is slightly racy.  It is possible that if the user
 
1009  * requests the addition of another device then the target won't be
 
1012 void scsi_remove_target(struct device *dev)
 
1014         struct device *rdev;
 
1016         if (scsi_is_target_device(dev)) {
 
1017                 __scsi_remove_target(to_scsi_target(dev));
 
1021         rdev = get_device(dev);
 
1022         device_for_each_child(dev, NULL, __remove_child);
 
1025 EXPORT_SYMBOL(scsi_remove_target);
 
1027 int scsi_register_driver(struct device_driver *drv)
 
1029         drv->bus = &scsi_bus_type;
 
1031         return driver_register(drv);
 
1033 EXPORT_SYMBOL(scsi_register_driver);
 
1035 int scsi_register_interface(struct class_interface *intf)
 
1037         intf->class = &sdev_class;
 
1039         return class_interface_register(intf);
 
1041 EXPORT_SYMBOL(scsi_register_interface);
 
1044  * scsi_sysfs_add_host - add scsi host to subsystem
 
1045  * @shost:     scsi host struct to add to subsystem
 
1046  * @dev:       parent struct device pointer
 
1048 int scsi_sysfs_add_host(struct Scsi_Host *shost)
 
1052         /* add host specific attributes */
 
1053         if (shost->hostt->shost_attrs) {
 
1054                 for (i = 0; shost->hostt->shost_attrs[i]; i++) {
 
1055                         error = device_create_file(&shost->shost_dev,
 
1056                                         shost->hostt->shost_attrs[i]);
 
1062         transport_register_device(&shost->shost_gendev);
 
1063         transport_configure_device(&shost->shost_gendev);
 
1067 static struct device_type scsi_dev_type = {
 
1068         .name =         "scsi_device",
 
1069         .release =      scsi_device_dev_release,
 
1070         .groups =       scsi_sdev_attr_groups,
 
1073 void scsi_sysfs_device_initialize(struct scsi_device *sdev)
 
1075         unsigned long flags;
 
1076         struct Scsi_Host *shost = sdev->host;
 
1077         struct scsi_target  *starget = sdev->sdev_target;
 
1079         device_initialize(&sdev->sdev_gendev);
 
1080         sdev->sdev_gendev.bus = &scsi_bus_type;
 
1081         sdev->sdev_gendev.type = &scsi_dev_type;
 
1082         sprintf(sdev->sdev_gendev.bus_id,"%d:%d:%d:%d",
 
1083                 sdev->host->host_no, sdev->channel, sdev->id,
 
1086         device_initialize(&sdev->sdev_dev);
 
1087         sdev->sdev_dev.parent = &sdev->sdev_gendev;
 
1088         sdev->sdev_dev.class = &sdev_class;
 
1089         snprintf(sdev->sdev_dev.bus_id, BUS_ID_SIZE,
 
1090                  "%d:%d:%d:%d", sdev->host->host_no,
 
1091                  sdev->channel, sdev->id, sdev->lun);
 
1092         sdev->scsi_level = starget->scsi_level;
 
1093         transport_setup_device(&sdev->sdev_gendev);
 
1094         spin_lock_irqsave(shost->host_lock, flags);
 
1095         list_add_tail(&sdev->same_target_siblings, &starget->devices);
 
1096         list_add_tail(&sdev->siblings, &shost->__devices);
 
1097         spin_unlock_irqrestore(shost->host_lock, flags);
 
1100 int scsi_is_sdev_device(const struct device *dev)
 
1102         return dev->type == &scsi_dev_type;
 
1104 EXPORT_SYMBOL(scsi_is_sdev_device);
 
1106 /* A blank transport template that is used in drivers that don't
 
1107  * yet implement Transport Attributes */
 
1108 struct scsi_transport_template blank_transport_template = { { { {NULL, }, }, }, };