#include <stdlib.h>
#include <unistd.h>
#include <syslog.h>
+#include <time.h>
#include <inttypes.h>
#include <scsi/scsi.h>
#include <scsi/sg.h>
int code;
int sense_class;
int sense_key;
- int descriptor_format;
int asc, ascq;
#ifdef DUMP_SENSE
char out_buffer[256];
return -1;
}
if ((code == 0x0) || (code == 0x1)) {
- descriptor_format = 0;
sense_key = sense_buffer[2] & 0xf;
if (s < 14) {
/*
asc = sense_buffer[12];
ascq = sense_buffer[13];
} else if ((code == 0x2) || (code == 0x3)) {
- descriptor_format = 1;
sense_key = sense_buffer[1] & 0xf;
asc = sense_buffer[2];
ascq = sense_buffer[3];
/*
* XXX Some devices (IBM 3542) return all spaces for an identifier if
- * the LUN is not actually configured. This leads to identifers of
+ * the LUN is not actually configured. This leads to identifiers of
* the form: "1 ".
*/
memset(dev_scsi->serial, 0, len);
dbg(udev, "opening %s\n", devname);
while (--cnt) {
+ const struct timespec duration = { 0, 500 * 1000 * 1000 };
+
fd = open(devname, O_RDONLY | O_NONBLOCK);
if (fd >= 0)
break;
info(udev, "%s: cannot open %s: %s\n", dev_scsi->kernel, devname, strerror(errno));
if (errno != EBUSY)
break;
- usleep(500000 + (rand() % 100000) );
+ nanosleep(&duration, NULL);
}
if (fd < 0)
return 1;