io_mem_alloc() returns a pointer on success and a pointer-encoded error otherwise. However, it can only fail with -ENOMEM, just return NULL on failure. PTR_ERR is usually pretty error prone. Signed-off-by: Pavel Begunkov <asml.silence@xxxxxxxxx> --- io_uring/io_uring.c | 14 +++++--------- io_uring/kbuf.c | 4 ++-- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index e7d7a456b489..1d0eac0cc8aa 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -2802,12 +2802,8 @@ static void io_rings_free(struct io_ring_ctx *ctx) void *io_mem_alloc(size_t size) { gfp_t gfp = GFP_KERNEL_ACCOUNT | __GFP_ZERO | __GFP_NOWARN | __GFP_COMP; - void *ret; - ret = (void *) __get_free_pages(gfp, get_order(size)); - if (ret) - return ret; - return ERR_PTR(-ENOMEM); + return (void *) __get_free_pages(gfp, get_order(size)); } static unsigned long rings_size(struct io_ring_ctx *ctx, unsigned int sq_entries, @@ -3762,8 +3758,8 @@ static __cold int io_allocate_scq_urings(struct io_ring_ctx *ctx, else rings = io_rings_map(ctx, p->cq_off.user_addr, size); - if (IS_ERR(rings)) - return PTR_ERR(rings); + if (!rings) + return -ENOMEM; ctx->rings = rings; if (!(ctx->flags & IORING_SETUP_NO_SQARRAY)) @@ -3787,9 +3783,9 @@ static __cold int io_allocate_scq_urings(struct io_ring_ctx *ctx, else ptr = io_sqes_map(ctx, p->sq_off.user_addr, size); - if (IS_ERR(ptr)) { + if (!ptr) { io_rings_free(ctx); - return PTR_ERR(ptr); + return -ENOMEM; } ctx->sq_sqes = ptr; diff --git a/io_uring/kbuf.c b/io_uring/kbuf.c index 9be42bff936b..0677eae92e79 100644 --- a/io_uring/kbuf.c +++ b/io_uring/kbuf.c @@ -627,8 +627,8 @@ static int io_alloc_pbuf_ring(struct io_ring_ctx *ctx, ibf = io_lookup_buf_free_entry(ctx, ring_size); if (!ibf) { ptr = io_mem_alloc(ring_size); - if (IS_ERR(ptr)) - return PTR_ERR(ptr); + if (!ptr) + return -ENOMEM; /* Allocate and store deferred free entry */ ibf = kmalloc(sizeof(*ibf), GFP_KERNEL_ACCOUNT); -- 2.43.0