[prev in list] [next in list] [prev in thread] [next in thread]
List: netbsd-port-alpha
Subject: Re: Rescanning SCSI bus?
From: der Mouse <mouse () Rodents ! Montreal ! QC ! CA>
Date: 1999-04-23 18:15:29
[Download RAW message or body]
>> Is there a way to rescan the SCSI bus under 1.3.3 or 1.4? For
>> instance, if I had a SCSI bus which could electrically support hot
>> swap, how can I get the kernel to recognize the new devices?
As Bill Sommerfeld says, under 1.4 (and somewhat-pre-1.4 -current)
there's scsictl to do that.
But even before that, SCIOCREPROBE provided the underlying support,
though I don't think /dev/scsibus* existed at the time (which means you
have to have an existing device on the bus in order to reprobe it).
Enclosed below is a program I wrote for the purpose, which you may be
able to adapt if you can't use 1.4.
One thing I wish scsictl scan did that it doesn't is remove devices
that have disappeared. As it stands, after adding a full bus of
devices, you have to reboot to add more even if you've taken off the
devices that were there. (Yeah, I know, it's a volunteer project.
This isn't a complaint; this item is something I've been meaning to
look at, in my Copious Spare Time.)
der Mouse
mouse@rodents.montreal.qc.ca
7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B
static const char *somescsidev = "/dev/rsd1c";
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/scsiio.h>
extern const char *__progname;
int main(void);
int main(void)
{
int fd;
struct scsi_addr a;
a.type = TYPE_SCSI;
a.addr.scsi.scbus = -1;
a.addr.scsi.target = -1;
a.addr.scsi.lun = -1;
fd = open(somescsidev,O_RDWR,0);
if (fd < 0)
{ fprintf(stderr,"%s: %s: %s\n",__progname,somescsidev,strerror(errno));
exit(1);
}
if (ioctl(fd,SCIOCREPROBE,&a) < 0)
{ fprintf(stderr,"%s: SCIOCREPROBE: %s\n",__progname,strerror(errno));
exit(1);
}
exit(0);
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic