From 153793714ec92bd3a3aa4a3b2d26861c54dd03c4 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Fri, 11 Aug 2017 01:00:09 +0200 Subject: [PATCH] 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. --- sys/src/cmd/nusb/disk/disk.c | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/sys/src/cmd/nusb/disk/disk.c b/sys/src/cmd/nusb/disk/disk.c index 0e817fc62..40d337975 100644 --- a/sys/src/cmd/nusb/disk/disk.c +++ b/sys/src/cmd/nusb/disk/disk.c @@ -208,14 +208,6 @@ int exabyte, force6bytecmds; int diskdebug; -static void -ding(void *, char *msg) -{ - if(strstr(msg, "alarm") != nil) - noted(NCONT); - noted(NDFLT); -} - static int getmaxlun(void) { @@ -243,6 +235,7 @@ umsreset(void) fprint(2, "disk: reset: %r\n"); return -1; } + sleep(100); return 0; } @@ -253,14 +246,12 @@ umsrecover(void) return -1; if(unstall(dev, ums->epin, Ein) < 0) dprint(2, "disk: unstall epin: %r\n"); - /* do we need this when epin == epout? */ if(unstall(dev, ums->epout, Eout) < 0) dprint(2, "disk: unstall epout: %r\n"); return 0; } - static int ispow2(uvlong ul) { @@ -379,7 +370,7 @@ umsrequest(Umsc *umsc, ScsiPtr *cmd, ScsiPtr *data, int *status) { Cbw cbw; Csw csw; - int n, nio, left; + int n, nio; Ums *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); else{ n = read(ums->epin->dfd, data->p, nio); - left = nio - n; - if (n >= 0 && left > 0) /* didn't fill data->p? */ - memset(data->p + n, 0, left); + if (n >= 0 && n < nio) /* didn't fill data->p? */ + memset(data->p + n, 0, nio - n); } nio = n; if(diskdebug) @@ -1047,7 +1037,6 @@ main(int argc, char **argv) }ARGEND if(argc != 1) usage(); - dev = getdev(*argv); if(dev == nil) sysfatal("getdev: %r");