splice: if splicing fails with EINVAL, it's most likely missing fs support
[fio.git] / engines / splice.c
index 868f6e0d3b6977ee3b9b0dea52ba3c52045c90b8..03bc7ffcbc12d37e1360c05c5fefc9a132254f93 100644 (file)
@@ -130,6 +130,10 @@ restart:
                                        munmap(map, mmap_len);
                                        goto restart;
                                }
                                        munmap(map, mmap_len);
                                        goto restart;
                                }
+                               if (errno == EBADF) {
+                                       ret = -EBADF;
+                                       break;
+                               }
                                td_verror(td, errno, "vmsplice");
                                break;
                        } else if (!ret) {
                                td_verror(td, errno, "vmsplice");
                                break;
                        } else if (!ret) {
@@ -228,8 +232,12 @@ static int fio_spliceio_queue(struct thread_data *td, struct io_u *io_u)
                        io_u->error = errno;
        }
 
                        io_u->error = errno;
        }
 
-       if (io_u->error)
+       if (io_u->error) {
                td_verror(td, io_u->error, "xfer");
                td_verror(td, io_u->error, "xfer");
+               if (io_u->error == EINVAL)
+                       log_err("fio: looks like splice doesn't work on this"
+                                       " file system\n");
+       }
 
        return FIO_Q_COMPLETED;
 }
 
        return FIO_Q_COMPLETED;
 }
@@ -242,7 +250,6 @@ static void fio_spliceio_cleanup(struct thread_data *td)
                close(sd->pipe[0]);
                close(sd->pipe[1]);
                free(sd);
                close(sd->pipe[0]);
                close(sd->pipe[1]);
                free(sd);
-               td->io_ops->data = NULL;
        }
 }
 
        }
 }