dpt_i2o: switch to ->show_info()
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 31 Mar 2013 07:21:50 +0000 (03:21 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 9 Apr 2013 18:13:24 +0000 (14:13 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/scsi/dpt_i2o.c

index b6e2700ec1c60fadda27306fcd39bdd375c00cad..19e1b422260a40ec648d3c2f548dfe198d9c1e07 100644 (file)
@@ -553,36 +553,14 @@ static const char *adpt_info(struct Scsi_Host *host)
        return (char *) (pHba->detail);
 }
 
-static int adpt_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t offset,
-                 int length, int inout)
+static int adpt_show_info(struct seq_file *m, struct Scsi_Host *host)
 {
        struct adpt_device* d;
        int id;
        int chan;
-       int len = 0;
-       int begin = 0;
-       int pos = 0;
        adpt_hba* pHba;
        int unit;
 
-       *start = buffer;
-       if (inout == TRUE) {
-               /*
-                * The user has done a write and wants us to take the
-                * data in the buffer and do something with it.
-                * proc_scsiwrite calls us with inout = 1
-                *
-                * Read data from buffer (writing to us) - NOT SUPPORTED
-                */
-               return -EINVAL;
-       }
-
-       /*
-        * inout = 0 means the user has done a read and wants information
-        * returned, so we write information about the cards into the buffer
-        * proc_scsiread() calls us with inout = 0
-        */
-
        // Find HBA (host bus adapter) we are looking for
        mutex_lock(&adpt_configuration_lock);
        for (pHba = hba_chain; pHba; pHba = pHba->next) {
@@ -596,86 +574,30 @@ static int adpt_proc_info(struct Scsi_Host *host, char *buffer, char **start, of
        }
        host = pHba->host;
 
-       len  = sprintf(buffer    , "Adaptec I2O RAID Driver Version: %s\n\n", DPT_I2O_VERSION);
-       len += sprintf(buffer+len, "%s\n", pHba->detail);
-       len += sprintf(buffer+len, "SCSI Host=scsi%d  Control Node=/dev/%s  irq=%d\n", 
+       seq_printf(m, "Adaptec I2O RAID Driver Version: %s\n\n", DPT_I2O_VERSION);
+       seq_printf(m, "%s\n", pHba->detail);
+       seq_printf(m, "SCSI Host=scsi%d  Control Node=/dev/%s  irq=%d\n", 
                        pHba->host->host_no, pHba->name, host->irq);
-       len += sprintf(buffer+len, "\tpost fifo size  = %d\n\treply fifo size = %d\n\tsg table size   = %d\n\n",
+       seq_printf(m, "\tpost fifo size  = %d\n\treply fifo size = %d\n\tsg table size   = %d\n\n",
                        host->can_queue, (int) pHba->reply_fifo_size , host->sg_tablesize);
 
-       pos = begin + len;
-
-       /* CHECKPOINT */
-       if(pos > offset + length) {
-               goto stop_output;
-       }
-       if(pos <= offset) {
-               /*
-                * If we haven't even written to where we last left
-                * off (the last time we were called), reset the 
-                * beginning pointer.
-                */
-               len = 0;
-               begin = pos;
-       }
-       len +=  sprintf(buffer+len, "Devices:\n");
+       seq_printf(m, "Devices:\n");
        for(chan = 0; chan < MAX_CHANNEL; chan++) {
                for(id = 0; id < MAX_ID; id++) {
                        d = pHba->channel[chan].device[id];
-                       while(d){
-                               len += sprintf(buffer+len,"\t%-24.24s", d->pScsi_dev->vendor);
-                               len += sprintf(buffer+len," Rev: %-8.8s\n", d->pScsi_dev->rev);
-                               pos = begin + len;
-
-
-                               /* CHECKPOINT */
-                               if(pos > offset + length) {
-                                       goto stop_output;
-                               }
-                               if(pos <= offset) {
-                                       len = 0;
-                                       begin = pos;
-                               }
+                       while(d) {
+                               seq_printf(m,"\t%-24.24s", d->pScsi_dev->vendor);
+                               seq_printf(m," Rev: %-8.8s\n", d->pScsi_dev->rev);
 
                                unit = d->pI2o_dev->lct_data.tid;
-                               len += sprintf(buffer+len, "\tTID=%d, (Channel=%d, Target=%d, Lun=%d)  (%s)\n\n",
+                               seq_printf(m, "\tTID=%d, (Channel=%d, Target=%d, Lun=%d)  (%s)\n\n",
                                               unit, (int)d->scsi_channel, (int)d->scsi_id, (int)d->scsi_lun,
                                               scsi_device_online(d->pScsi_dev)? "online":"offline"); 
-                               pos = begin + len;
-
-                               /* CHECKPOINT */
-                               if(pos > offset + length) {
-                                       goto stop_output;
-                               }
-                               if(pos <= offset) {
-                                       len = 0;
-                                       begin = pos;
-                               }
-
                                d = d->next_lun;
                        }
                }
        }
-
-       /*
-        * begin is where we last checked our position with regards to offset
-        * begin is always less than offset.  len is relative to begin.  It
-        * is the number of bytes written past begin
-        *
-        */
-stop_output:
-       /* stop the output and calculate the correct length */
-       *(buffer + len) = '\0';
-
-       *start = buffer + (offset - begin);     /* Start of wanted data */
-       len -= (offset - begin);
-       if(len > length) {
-               len = length;
-       } else if(len < 0){
-               len = 0;
-               **start = '\0';
-       }
-       return len;
+       return 0;
 }
 
 /*
@@ -3639,7 +3561,7 @@ static struct scsi_host_template driver_template = {
        .module                 = THIS_MODULE,
        .name                   = "dpt_i2o",
        .proc_name              = "dpt_i2o",
-       .proc_info              = adpt_proc_info,
+       .show_info              = adpt_show_info,
        .info                   = adpt_info,
        .queuecommand           = adpt_queue,
        .eh_abort_handler       = adpt_abort,