[PATCH] cciss: SCSI tape info for /proc
Add SCSI host and device info not elsewhere available to /proc/scsi/cciss/* Namely, connect cciss device instance with scsi host number, and give scsi host number, bus, target, lun, devicetype, and 8-byte cciss LUNID for each tapedrive/medium changer attached to a controller For instance: # cat /proc/scsi/cciss/2 cciss0: SCSI host: 2 c2b0t0l0 01 0x0000000000000001 Signed-off-by: Stephen M. Cameron <steve.cameron@hp.com> Signed-off-by: Mike Miller <mike.miller@hp.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
47922d068e
commit
b9f0bd0895
1 changed files with 23 additions and 2 deletions
|
@ -1144,6 +1144,7 @@ cciss_scsi_proc_info(struct Scsi_Host *sh,
|
|||
|
||||
int buflen, datalen;
|
||||
ctlr_info_t *ci;
|
||||
int i;
|
||||
int cntl_num;
|
||||
|
||||
|
||||
|
@ -1154,8 +1155,28 @@ cciss_scsi_proc_info(struct Scsi_Host *sh,
|
|||
cntl_num = ci->ctlr; /* Get our index into the hba[] array */
|
||||
|
||||
if (func == 0) { /* User is reading from /proc/scsi/ciss*?/?* */
|
||||
buflen = sprintf(buffer, "hostnum=%d\n", sh->host_no);
|
||||
buflen = sprintf(buffer, "cciss%d: SCSI host: %d\n",
|
||||
cntl_num, sh->host_no);
|
||||
|
||||
/* this information is needed by apps to know which cciss
|
||||
device corresponds to which scsi host number without
|
||||
having to open a scsi target device node. The device
|
||||
information is not a duplicate of /proc/scsi/scsi because
|
||||
the two may be out of sync due to scsi hotplug, rather
|
||||
this info is for an app to be able to use to know how to
|
||||
get them back in sync. */
|
||||
|
||||
for (i=0;i<ccissscsi[cntl_num].ndevices;i++) {
|
||||
struct cciss_scsi_dev_t *sd = &ccissscsi[cntl_num].dev[i];
|
||||
buflen += sprintf(&buffer[buflen], "c%db%dt%dl%d %02d "
|
||||
"0x%02x%02x%02x%02x%02x%02x%02x%02x\n",
|
||||
sh->host_no, sd->bus, sd->target, sd->lun,
|
||||
sd->devtype,
|
||||
sd->scsi3addr[0], sd->scsi3addr[1],
|
||||
sd->scsi3addr[2], sd->scsi3addr[3],
|
||||
sd->scsi3addr[4], sd->scsi3addr[5],
|
||||
sd->scsi3addr[6], sd->scsi3addr[7]);
|
||||
}
|
||||
datalen = buflen - offset;
|
||||
if (datalen < 0) { /* they're reading past EOF. */
|
||||
datalen = 0;
|
||||
|
@ -1417,7 +1438,7 @@ cciss_proc_tape_report(int ctlr, unsigned char *buffer, off_t *pos, off_t *len)
|
|||
|
||||
CPQ_TAPE_LOCK(ctlr, flags);
|
||||
size = sprintf(buffer + *len,
|
||||
" Sequential access devices: %d\n\n",
|
||||
"Sequential access devices: %d\n\n",
|
||||
ccissscsi[ctlr].ndevices);
|
||||
CPQ_TAPE_UNLOCK(ctlr, flags);
|
||||
*pos += size; *len += size;
|
||||
|
|
Loading…
Reference in a new issue