On 6/11/20 8:30 PM, Jiufei Xue wrote: > poll events should be 32-bits to cover EPOLLEXCLUSIVE. > > Signed-off-by: Jiufei Xue <jiufei.xue@xxxxxxxxxxxxxxxxx> > --- > fs/io_uring.c | 4 ++-- > include/uapi/linux/io_uring.h | 2 +- > tools/io_uring/liburing.h | 2 +- > 3 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/fs/io_uring.c b/fs/io_uring.c > index 47790a2..6250227 100644 > --- a/fs/io_uring.c > +++ b/fs/io_uring.c > @@ -4602,7 +4602,7 @@ static void io_poll_queue_proc(struct file *file, struct wait_queue_head *head, > static int io_poll_add_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) > { > struct io_poll_iocb *poll = &req->poll; > - u16 events; > + u32 events; > > if (unlikely(req->ctx->flags & IORING_SETUP_IOPOLL)) > return -EINVAL; > @@ -8196,7 +8196,7 @@ static int __init io_uring_init(void) > BUILD_BUG_SQE_ELEM(28, /* compat */ int, rw_flags); > BUILD_BUG_SQE_ELEM(28, /* compat */ __u32, rw_flags); > BUILD_BUG_SQE_ELEM(28, __u32, fsync_flags); > - BUILD_BUG_SQE_ELEM(28, __u16, poll_events); > + BUILD_BUG_SQE_ELEM(28, __u32, poll_events); > BUILD_BUG_SQE_ELEM(28, __u32, sync_range_flags); > BUILD_BUG_SQE_ELEM(28, __u32, msg_flags); > BUILD_BUG_SQE_ELEM(28, __u32, timeout_flags); > diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h > index 92c2269..afc7edd 100644 > --- a/include/uapi/linux/io_uring.h > +++ b/include/uapi/linux/io_uring.h > @@ -31,7 +31,7 @@ struct io_uring_sqe { > union { > __kernel_rwf_t rw_flags; > __u32 fsync_flags; > - __u16 poll_events; > + __u32 poll_events; > __u32 sync_range_flags; > __u32 msg_flags; > __u32 timeout_flags; We obviously have the space in there as most other flag members are 32-bits, but I'd want to double check if we're not changing the ABI here. Is this always going to be safe, on any platform, regardless of endianess etc? -- Jens Axboe