nusb/disk: add a 100ms sleep after ums reset, remove unused note handler, cleanup
my pretec usb stick sometimes hangs on the first inquiry request, waiting for the inquiry response forever. adding a 100ms delay after the reset command seems to fix it. getting rid of unused "ding()" note handler and simplify umsrequest() incomplete read handling.
This commit is contained in:
parent
0daed9edea
commit
153793714e
1 changed files with 4 additions and 15 deletions
|
@ -208,14 +208,6 @@ int exabyte, force6bytecmds;
|
||||||
|
|
||||||
int diskdebug;
|
int diskdebug;
|
||||||
|
|
||||||
static void
|
|
||||||
ding(void *, char *msg)
|
|
||||||
{
|
|
||||||
if(strstr(msg, "alarm") != nil)
|
|
||||||
noted(NCONT);
|
|
||||||
noted(NDFLT);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
getmaxlun(void)
|
getmaxlun(void)
|
||||||
{
|
{
|
||||||
|
@ -243,6 +235,7 @@ umsreset(void)
|
||||||
fprint(2, "disk: reset: %r\n");
|
fprint(2, "disk: reset: %r\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
sleep(100);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,14 +246,12 @@ umsrecover(void)
|
||||||
return -1;
|
return -1;
|
||||||
if(unstall(dev, ums->epin, Ein) < 0)
|
if(unstall(dev, ums->epin, Ein) < 0)
|
||||||
dprint(2, "disk: unstall epin: %r\n");
|
dprint(2, "disk: unstall epin: %r\n");
|
||||||
|
|
||||||
/* do we need this when epin == epout? */
|
/* do we need this when epin == epout? */
|
||||||
if(unstall(dev, ums->epout, Eout) < 0)
|
if(unstall(dev, ums->epout, Eout) < 0)
|
||||||
dprint(2, "disk: unstall epout: %r\n");
|
dprint(2, "disk: unstall epout: %r\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ispow2(uvlong ul)
|
ispow2(uvlong ul)
|
||||||
{
|
{
|
||||||
|
@ -379,7 +370,7 @@ umsrequest(Umsc *umsc, ScsiPtr *cmd, ScsiPtr *data, int *status)
|
||||||
{
|
{
|
||||||
Cbw cbw;
|
Cbw cbw;
|
||||||
Csw csw;
|
Csw csw;
|
||||||
int n, nio, left;
|
int n, nio;
|
||||||
Ums *ums;
|
Ums *ums;
|
||||||
|
|
||||||
ums = umsc->ums;
|
ums = umsc->ums;
|
||||||
|
@ -418,9 +409,8 @@ umsrequest(Umsc *umsc, ScsiPtr *cmd, ScsiPtr *data, int *status)
|
||||||
n = write(ums->epout->dfd, data->p, nio);
|
n = write(ums->epout->dfd, data->p, nio);
|
||||||
else{
|
else{
|
||||||
n = read(ums->epin->dfd, data->p, nio);
|
n = read(ums->epin->dfd, data->p, nio);
|
||||||
left = nio - n;
|
if (n >= 0 && n < nio) /* didn't fill data->p? */
|
||||||
if (n >= 0 && left > 0) /* didn't fill data->p? */
|
memset(data->p + n, 0, nio - n);
|
||||||
memset(data->p + n, 0, left);
|
|
||||||
}
|
}
|
||||||
nio = n;
|
nio = n;
|
||||||
if(diskdebug)
|
if(diskdebug)
|
||||||
|
@ -1047,7 +1037,6 @@ main(int argc, char **argv)
|
||||||
}ARGEND
|
}ARGEND
|
||||||
if(argc != 1)
|
if(argc != 1)
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
dev = getdev(*argv);
|
dev = getdev(*argv);
|
||||||
if(dev == nil)
|
if(dev == nil)
|
||||||
sysfatal("getdev: %r");
|
sysfatal("getdev: %r");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue