Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=17eaaceef52b1ce5ca061d49a1ff9ae56ccce1e1
Commit:     17eaaceef52b1ce5ca061d49a1ff9ae56ccce1e1
Parent:     95e852e1ef165560e85d3012127068c8f08b19a1
Author:     Salyzyn, Mark <[EMAIL PROTECTED]>
AuthorDate: Tue Jan 8 12:23:49 2008 -0800
Committer:  James Bottomley <[EMAIL PROTECTED]>
CommitDate: Wed Jan 23 11:29:19 2008 -0600

    [SCSI] aacraid: add sysfs report of RAID level
    
    Report the RAID level string for the SCSI device representing the
    array. Report is in /sys/class/scsi_device/#:#:#:#/device/level.
    
    Signed-off-by: Mark Salyzyn <[EMAIL PROTECTED]>
    Signed-off-by: James Bottomley <[EMAIL PROTECTED]>
---
 drivers/scsi/aacraid/aachba.c  |    7 ++++++-
 drivers/scsi/aacraid/aacraid.h |    1 +
 drivers/scsi/aacraid/linit.c   |   25 +++++++++++++++++++++++++
 3 files changed, 32 insertions(+), 1 deletions(-)

diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
index 43d6aff..eee65c1 100644
--- a/drivers/scsi/aacraid/aachba.c
+++ b/drivers/scsi/aacraid/aachba.c
@@ -690,7 +690,12 @@ static char *container_types[] = {
         "Unknown"
 };
 
-
+char * get_container_type(unsigned tindex)
+{
+       if (tindex >= ARRAY_SIZE(container_types))
+               tindex = ARRAY_SIZE(container_types) - 1;
+       return container_types[tindex];
+}
 
 /* Function: setinqstr
  *
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
index 7bb3d9f..6d4e24c 100644
--- a/drivers/scsi/aacraid/aacraid.h
+++ b/drivers/scsi/aacraid/aacraid.h
@@ -1869,6 +1869,7 @@ int aac_probe_container(struct aac_dev *dev, int cid);
 int _aac_rx_init(struct aac_dev *dev);
 int aac_rx_select_comm(struct aac_dev *dev, int comm);
 int aac_rx_deliver_producer(struct fib * fib);
+char * get_container_type(unsigned type);
 extern int numacb;
 extern int acbsize;
 extern char aac_driver_version[];
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index b4ad9ef..e6bdc93 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -487,6 +487,30 @@ static int aac_change_queue_depth(struct scsi_device 
*sdev, int depth)
        return sdev->queue_depth;
 }
 
+static ssize_t aac_show_raid_level(struct device *dev, struct device_attribute 
*attr, char *buf)
+{
+       struct scsi_device * sdev = to_scsi_device(dev);
+       if (sdev_channel(sdev) != CONTAINER_CHANNEL)
+               return snprintf(buf, PAGE_SIZE, sdev->no_uld_attach
+                 ? "Hidden\n" : "JBOD");
+       return snprintf(buf, PAGE_SIZE, "%s\n",
+         get_container_type(((struct aac_dev *)(sdev->host->hostdata))
+           ->fsa_dev[sdev_id(sdev)].type));
+}
+
+static struct device_attribute aac_raid_level_attr = {
+       .attr = {
+               .name = "level",
+               .mode = S_IRUGO,
+       },
+       .show = aac_show_raid_level
+};
+
+static struct device_attribute *aac_dev_attrs[] = {
+       &aac_raid_level_attr,
+       NULL,
+};
+
 static int aac_ioctl(struct scsi_device *sdev, int cmd, void __user * arg)
 {
        struct aac_dev *dev = (struct aac_dev *)sdev->host->hostdata;
@@ -941,6 +965,7 @@ static struct scsi_host_template aac_driver_template = {
        .shost_attrs                    = aac_attrs,
        .slave_configure                = aac_slave_configure,
        .change_queue_depth             = aac_change_queue_depth,
+       .sdev_attrs                     = aac_dev_attrs,
        .eh_abort_handler               = aac_eh_abort,
        .eh_host_reset_handler          = aac_eh_reset,
        .can_queue                      = AAC_NUM_IO_FIB,       
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to