io_uring: add iopoll infrastructure for io_uring_cmd
[linux-2.6-block.git] / io_uring / rw.c
index 76ebcfebc9a6e32f93b78f42fab0da9ae38c9893..b6f9c756b7a1055248fb7eb034474c4407f26d93 100644 (file)
@@ -1011,7 +1011,13 @@ int io_do_iopoll(struct io_ring_ctx *ctx, bool force_nonspin)
                if (READ_ONCE(req->iopoll_completed))
                        break;
 
-               ret = rw->kiocb.ki_filp->f_op->iopoll(&rw->kiocb, &iob, poll_flags);
+               if (req->opcode == IORING_OP_URING_CMD) {
+                       struct io_uring_cmd *ioucmd = (struct io_uring_cmd *)rw;
+
+                       ret = req->file->f_op->uring_cmd_iopoll(ioucmd);
+               } else
+                       ret = rw->kiocb.ki_filp->f_op->iopoll(&rw->kiocb, &iob,
+                                                       poll_flags);
                if (unlikely(ret < 0))
                        return ret;
                else if (ret)