lkml.org 
[lkml]   [2020]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.9 220/255] io_uring: round-up cq size before comparing with rounded sq size
    Date
    From: Jens Axboe <axboe@kernel.dk>

    commit 88ec3211e46344a7d10cf6cb5045f839f7785f8e upstream.

    If an application specifies IORING_SETUP_CQSIZE to set the CQ ring size
    to a specific size, we ensure that the CQ size is at least that of the
    SQ ring size. But in doing so, we compare the already rounded up to power
    of two SQ size to the as-of yet unrounded CQ size. This means that if an
    application passes in non power of two sizes, we can return -EINVAL when
    the final value would've been fine. As an example, an application passing
    in 100/100 for sq/cq size should end up with 128 for both. But since we
    round the SQ size first, we compare the CQ size of 100 to 128, and return
    -EINVAL as that is too small.

    Cc: stable@vger.kernel.org
    Fixes: 33a107f0a1b8 ("io_uring: allow application controlled CQ ring size")
    Reported-by: Dan Melnic <dmm@fb.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/io_uring.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/fs/io_uring.c
    +++ b/fs/io_uring.c
    @@ -8878,6 +8878,7 @@ static int io_uring_create(unsigned entr
    * to a power-of-two, if it isn't already. We do NOT impose
    * any cq vs sq ring sizing.
    */
    + p->cq_entries = roundup_pow_of_two(p->cq_entries);
    if (p->cq_entries < p->sq_entries)
    return -EINVAL;
    if (p->cq_entries > IORING_MAX_CQ_ENTRIES) {
    @@ -8885,7 +8886,6 @@ static int io_uring_create(unsigned entr
    return -EINVAL;
    p->cq_entries = IORING_MAX_CQ_ENTRIES;
    }
    - p->cq_entries = roundup_pow_of_two(p->cq_entries);
    } else {
    p->cq_entries = 2 * p->sq_entries;
    }

    \
     
     \ /
      Last update: 2020-11-17 15:10    [W:4.039 / U:0.256 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site