#endif
 }
 
+static bool io_fadvise_force_async(struct io_fadvise *fa)
+{
+       switch (fa->advice) {
+       case POSIX_FADV_NORMAL:
+       case POSIX_FADV_RANDOM:
+       case POSIX_FADV_SEQUENTIAL:
+               return false;
+       default:
+               return true;
+       }
+}
+
 int io_fadvise_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
 {
        struct io_fadvise *fa = io_kiocb_to_cmd(req, struct io_fadvise);
        fa->offset = READ_ONCE(sqe->off);
        fa->len = READ_ONCE(sqe->len);
        fa->advice = READ_ONCE(sqe->fadvise_advice);
+       if (io_fadvise_force_async(fa))
+               req->flags |= REQ_F_FORCE_ASYNC;
        return 0;
 }
 
        struct io_fadvise *fa = io_kiocb_to_cmd(req, struct io_fadvise);
        int ret;
 
-       if (issue_flags & IO_URING_F_NONBLOCK) {
-               switch (fa->advice) {
-               case POSIX_FADV_NORMAL:
-               case POSIX_FADV_RANDOM:
-               case POSIX_FADV_SEQUENTIAL:
-                       break;
-               default:
-                       return -EAGAIN;
-               }
-       }
+       WARN_ON_ONCE(issue_flags & IO_URING_F_NONBLOCK && io_fadvise_force_async(fa));
 
        ret = vfs_fadvise(req->file, fa->offset, fa->len, fa->advice);
        if (ret < 0)