Message ID | 45e8576e-5fcc-bc52-8805-0b5cc3fc1a84@openvz.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | sparse: use force attribute for __kernel_rwf_t casts | expand |
On 5/14/22 10:23 AM, Vasily Averin wrote: > Fixes sparse warnings: > fs/io_uring.c: note: in included file (through include/trace/perf.h, > include/trace/define_trace.h, include/trace/events/io_uring.h): > ./include/trace/events/io_uring.h:488:1: sparse: > warning: incorrect type in assignment (different base types) > expected unsigned int [usertype] op_flags > got restricted __kernel_rwf_t const [usertype] rw_flags > fs/io_uring.c:3164:23: sparse: > warning: incorrect type in assignment (different base types) > expected unsigned int [usertype] flags > got restricted __kernel_rwf_t > fs/io_uring.c:3769:48: sparse: > warning: incorrect type in argument 2 (different base types) > expected restricted __kernel_rwf_t [usertype] flags > got unsigned int [usertype] flags Hand applied for 5.19, didn't apply directly. At some point it'd be nice to do the poll ones as they are the biggest issue wrt sparse, but honestly I've never really been very motivated to fix those sparse warnings as it would just be an unnecessary pain for backporting patches.
Please stop sprinkling random __force casts. 95% of them are simplify wrong, and the others need to go into properly documented helpers. The right fixes here are thing like: diff --git a/fs/io_uring.c b/fs/io_uring.c index 4479013854d20..a5d8b5109d3a7 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -585,7 +585,7 @@ struct io_rw { struct kiocb kiocb; u64 addr; u32 len; - u32 flags; + rwf_t flags; }; struct io_connect {
diff --git a/fs/io_uring.c b/fs/io_uring.c index 91de361ea9ab..5ca4a6e91884 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -3161,7 +3161,7 @@ static int io_prep_rw(struct io_kiocb *req, const struct io_uring_sqe *sqe) req->imu = NULL; req->rw.addr = READ_ONCE(sqe->addr); req->rw.len = READ_ONCE(sqe->len); - req->rw.flags = READ_ONCE(sqe->rw_flags); + req->rw.flags = (__force u32)READ_ONCE(sqe->rw_flags); req->buf_index = READ_ONCE(sqe->buf_index); return 0; } @@ -3766,7 +3766,7 @@ static int io_rw_init_file(struct io_kiocb *req, fmode_t mode) req->flags |= io_file_get_flags(file) << REQ_F_SUPPORT_NOWAIT_BIT; kiocb->ki_flags = iocb_flags(file); - ret = kiocb_set_rw_flags(kiocb, req->rw.flags); + ret = kiocb_set_rw_flags(kiocb, (__force rwf_t)req->rw.flags); if (unlikely(ret)) return ret; diff --git a/include/trace/events/io_uring.h b/include/trace/events/io_uring.h index cddf5b6fbeb4..df4b89a79764 100644 --- a/include/trace/events/io_uring.h +++ b/include/trace/events/io_uring.h @@ -520,7 +520,7 @@ TRACE_EVENT(io_uring_req_failed, __entry->off = sqe->off; __entry->addr = sqe->addr; __entry->len = sqe->len; - __entry->op_flags = sqe->rw_flags; + __entry->op_flags = (__force u32)sqe->rw_flags; __entry->buf_index = sqe->buf_index; __entry->personality = sqe->personality; __entry->file_index = sqe->file_index;
Fixes sparse warnings: fs/io_uring.c: note: in included file (through include/trace/perf.h, include/trace/define_trace.h, include/trace/events/io_uring.h): ./include/trace/events/io_uring.h:488:1: sparse: warning: incorrect type in assignment (different base types) expected unsigned int [usertype] op_flags got restricted __kernel_rwf_t const [usertype] rw_flags fs/io_uring.c:3164:23: sparse: warning: incorrect type in assignment (different base types) expected unsigned int [usertype] flags got restricted __kernel_rwf_t fs/io_uring.c:3769:48: sparse: warning: incorrect type in argument 2 (different base types) expected restricted __kernel_rwf_t [usertype] flags got unsigned int [usertype] flags __kernel_rwf_t type is bitwise and requires __force attribute for casts Signed-off-by: Vasily Averin <vvs@openvz.org> --- fs/io_uring.c | 4 ++-- include/trace/events/io_uring.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-)