Get rid of the attr_changed_internally(), and always create queue_type and
queue_depth as read/write, and then writes fail if not supported.

Signed-off-by: Patrick Mansfield <[EMAIL PROTECTED]>

--- linux-2.6.11/drivers/scsi/scsi_sysfs.c      2005-03-02 02:59:50.000000000 
-0800
+++ sattrs-linux-2.6.11/drivers/scsi/scsi_sysfs.c       2005-03-02 
09:27:15.000000000 -0800
@@ -312,7 +312,6 @@
  * Create the actual show/store functions and data structures.
  */
 sdev_rd_attr (device_blocked, "%d\n");
-sdev_rd_attr (queue_depth, "%d\n");
 sdev_rd_attr (type, "%d\n");
 sdev_rd_attr (scsi_level, "%d\n");
 sdev_rd_attr (vendor, "%.8s\n");
@@ -392,41 +391,9 @@
 
 static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, show_state_field, 
store_state_field);
 
-static ssize_t
-show_queue_type_field(struct device *dev, char *buf)
-{
-       struct scsi_device *sdev = to_scsi_device(dev);
-       const char *name = "none";
-
-       if (sdev->ordered_tags)
-               name = "ordered";
-       else if (sdev->simple_tags)
-               name = "simple";
-
-       return snprintf(buf, 20, "%s\n", name);
-}
-
-static DEVICE_ATTR(queue_type, S_IRUGO, show_queue_type_field, NULL);
-
-
-/* Default template for device attributes.  May NOT be modified */
-static struct device_attribute *scsi_sysfs_sdev_attrs[] = {
-       &dev_attr_device_blocked,
-       &dev_attr_queue_depth,
-       &dev_attr_queue_type,
-       &dev_attr_type,
-       &dev_attr_scsi_level,
-       &dev_attr_vendor,
-       &dev_attr_model,
-       &dev_attr_rev,
-       &dev_attr_rescan,
-       &dev_attr_delete,
-       &dev_attr_state,
-       &dev_attr_timeout,
-       NULL
-};
+sdev_show_function (queue_depth, "%d\n");
 
-static ssize_t sdev_store_queue_depth_rw(struct device *dev, const char *buf,
+static ssize_t sdev_store_queue_depth(struct device *dev, const char *buf,
                                         size_t count)
 {
        int depth, retval;
@@ -448,11 +415,25 @@
        return count;
 }
 
-static struct device_attribute sdev_attr_queue_depth_rw =
+static struct device_attribute dev_attr_queue_depth =
        __ATTR(queue_depth, S_IRUGO | S_IWUSR, sdev_show_queue_depth,
-              sdev_store_queue_depth_rw);
+              sdev_store_queue_depth);
 
-static ssize_t sdev_store_queue_type_rw(struct device *dev, const char *buf,
+static ssize_t
+show_queue_type_field(struct device *dev, char *buf)
+{
+       struct scsi_device *sdev = to_scsi_device(dev);
+       const char *name = "none";
+
+       if (sdev->ordered_tags)
+               name = "ordered";
+       else if (sdev->simple_tags)
+               name = "simple";
+
+       return snprintf(buf, 20, "%s\n", name);
+}
+
+static ssize_t sdev_store_queue_type(struct device *dev, const char *buf,
                                        size_t count)
 {
        struct scsi_device *sdev = to_scsi_device(dev);
@@ -480,23 +461,26 @@
        return count;
 }
 
-static struct device_attribute sdev_attr_queue_type_rw =
+static struct device_attribute dev_attr_queue_type =
        __ATTR(queue_type, S_IRUGO | S_IWUSR, show_queue_type_field,
-              sdev_store_queue_type_rw);
-
-static struct device_attribute *attr_changed_internally(
-               struct Scsi_Host *shost,
-               struct device_attribute * attr)
-{
-       if (!strcmp("queue_depth", attr->attr.name)
-           && shost->hostt->change_queue_depth)
-               return &sdev_attr_queue_depth_rw;
-       else if (!strcmp("queue_type", attr->attr.name)
-           && shost->hostt->change_queue_type)
-               return &sdev_attr_queue_type_rw;
-       return attr;
-}
+              sdev_store_queue_type);
 
+/* Default template for device attributes.  May NOT be modified */
+static struct device_attribute *scsi_sysfs_sdev_attrs[] = {
+       &dev_attr_device_blocked,
+       &dev_attr_queue_depth,
+       &dev_attr_queue_type,
+       &dev_attr_type,
+       &dev_attr_scsi_level,
+       &dev_attr_vendor,
+       &dev_attr_model,
+       &dev_attr_rev,
+       &dev_attr_rescan,
+       &dev_attr_delete,
+       &dev_attr_state,
+       &dev_attr_timeout,
+       NULL
+};
 
 static struct device_attribute *attr_overridden(
                struct device_attribute **attrs,
@@ -602,10 +586,8 @@
        for (i = 0; scsi_sysfs_sdev_attrs[i]; i++) {
                if (!attr_overridden(sdev->host->hostt->sdev_attrs,
                                        scsi_sysfs_sdev_attrs[i])) {
-                       struct device_attribute * attr = 
-                               attr_changed_internally(sdev->host, 
-                                                       
scsi_sysfs_sdev_attrs[i]);
-                       error = device_create_file(&sdev->sdev_gendev, attr);
+                       error = device_create_file(&sdev->sdev_gendev,
+                                                  scsi_sysfs_sdev_attrs[i]);
                        if (error) {
                                scsi_remove_device(sdev);
                                goto out;
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to