#include <sys/ioctl.h>
#include <linux/fs.h>
#include <errno.h>
-#include <asm/unistd.h>
+#include <unistd.h>
#include <libaio.h>
#include "checkers.h"
ct->ptr = (unsigned char *) (((unsigned long)ct->buf + pgsize - 1) &
(~(pgsize - 1)));
- /* Sucessfully initialized, return the context. */
+ /* Successfully initialized, return the context. */
c->context = (void *) ct;
return 0;
if (ct->reset_flags) {
if ((flags = fcntl(c->fd, F_GETFL)) >= 0) {
+ int ret __attribute__ ((unused));
+
flags &= ~O_DIRECT;
/* No point in checking for errors */
- fcntl(c->fd, F_SETFL, flags);
+ ret = fcntl(c->fd, F_SETFL, flags);
}
}
free(ct);
}
+void libcheck_repair (struct checker * c)
+{
+ return;
+}
+
static int
check_state(int fd, struct directio_context *ct, int sync, int timeout_secs)
{
if (r < 0 ) {
LOG(3, "async io getevents returned %li (errno=%s)", r,
strerror(errno));
+ ct->running = 0;
rc = PATH_UNCHECKED;
} else if (r < 1L) {
if (ct->running > timeout_secs || sync) {
+ struct iocb *ios[1] = { &ct->io };
+
LOG(3, "abort check on timeout");
+ r = io_cancel(ct->ioctx, ios[0], &event);
+ /*
+ * Only reset ct->running if we really
+ * could abort the pending I/O
+ */
+ if (r)
+ LOG(3, "io_cancel error %i", errno);
+ else
+ ct->running = 0;
rc = PATH_DOWN;
} else {
LOG(3, "async io pending");