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:
cinap_lenrek 2017-08-11 01:00:09 +02:00
parent 0daed9edea
commit 153793714e

View file

@ -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");