#include <linux/compat.h>
 #include <linux/fileattr.h>
 
+static ssize_t fuse_send_ioctl(struct fuse_mount *fm, struct fuse_args *args)
+{
+       ssize_t ret = fuse_simple_request(fm, args);
+
+       /* Translate ENOSYS, which shouldn't be returned from fs */
+       if (ret == -ENOSYS)
+               ret = -ENOTTY;
+
+       return ret;
+}
+
 /*
  * CUSE servers compiled on 32bit broke on 64bit kernels because the
  * ABI was defined to be 'struct iovec' which is different on 32bit
        ap.args.out_pages = true;
        ap.args.out_argvar = true;
 
-       transferred = fuse_simple_request(fm, &ap.args);
+       transferred = fuse_send_ioctl(fm, &ap.args);
        err = transferred;
        if (transferred < 0)
                goto out;
        args.out_args[1].size = inarg.out_size;
        args.out_args[1].value = ptr;
 
-       err = fuse_simple_request(fm, &args);
+       err = fuse_send_ioctl(fm, &args);
        if (!err) {
                if (outarg.result < 0)
                        err = outarg.result;