• J
    io_uring: ensure openat sets O_LARGEFILE if needed · 85158b61
    Jens Axboe 提交于
    to #28170604
    
    commit 08a1d26eb894a9dcf79f674558a284ad1ffef517 upstream
    
    OPENAT2 correctly sets O_LARGEFILE if it has to, but that escaped the
    OPENAT opcode. Dmitry reports that his test case that compares openat()
    and IORING_OP_OPENAT sees failures on large files:
    
    *** sync openat
    openat succeeded
    sync write at offset 0
    write succeeded
    sync write at offset 4294967296
    write succeeded
    
    *** sync openat
    openat succeeded
    io_uring write at offset 0
    write succeeded
    io_uring write at offset 4294967296
    write succeeded
    
    *** io_uring openat
    openat succeeded
    sync write at offset 0
    write succeeded
    sync write at offset 4294967296
    write failed: File too large
    
    *** io_uring openat
    openat succeeded
    io_uring write at offset 0
    write succeeded
    io_uring write at offset 4294967296
    write failed: File too large
    
    Ensure we set O_LARGEFILE, if force_o_largefile() is true.
    
    Cc: stable@vger.kernel.org # v5.6
    Fixes: 15b71abe7b52 ("io_uring: add support for IORING_OP_OPENAT")
    Reported-by: NDmitry Kadashev <dkadashev@gmail.com>
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    Acked-by: NJoseph Qi <joseph.qi@linux.alibaba.com>
    Signed-off-by: NXiaoguang Wang <xiaoguang.wang@linux.alibaba.com>
    85158b61
io_uring.c 190.0 KB