On 4/8/20 9:12 AM, Dmitry Kadashev wrote: > On Wed, Apr 8, 2020 at 10:49 PM Jens Axboe <axboe@xxxxxxxxx> wrote: >> >> On 4/8/20 8:41 AM, Dmitry Kadashev wrote: >>> On Wed, Apr 8, 2020 at 10:36 PM Jens Axboe <axboe@xxxxxxxxx> wrote: >>>> >>>> On 4/8/20 8:30 AM, Dmitry Kadashev wrote: >>>>> On Wed, Apr 8, 2020 at 10:19 PM Jens Axboe <axboe@xxxxxxxxx> wrote: >>>>>> >>>>>> On 4/8/20 7:51 AM, Dmitry Kadashev wrote: >>>>>>> Hi, >>>>>>> >>>>>>> io_uring's openat seems to produce FDs that are incompatible with >>>>>>> large files (>2GB). If a file (smaller than 2GB) is opened using >>>>>>> io_uring's openat then writes -- both using io_uring and just sync >>>>>>> pwrite() -- past that threshold fail with EFBIG. If such a file is >>>>>>> opened with sync openat, then both io_uring's writes and sync writes >>>>>>> succeed. And if the file is larger than 2GB then io_uring's openat >>>>>>> fails right away, while the sync one works. >>>>>>> >>>>>>> Kernel versions: 5.6.0-rc2, 5.6.0. >>>>>>> >>>>>>> A couple of reproducers attached, one demos successful open with >>>>>>> failed writes afterwards, and another failing open (in comparison with >>>>>>> sync calls). >>>>>>> >>>>>>> The output of the former one for example: >>>>>>> >>>>>>> *** 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 >>>>>> >>>>>> Can you try with this one? Seems like only openat2 gets it set, >>>>>> not openat... >>>>> >>>>> I've tried specifying O_LARGEFILE explicitly, that did not change the >>>>> behavior. Is this good enough? Much faster for me to check this way >>>>> that rebuilding the kernel. But if necessary I can do that. >>>> >>>> Not sure O_LARGEFILE settings is going to do it for x86-64, the patch >>>> should fix it though. Might have worked on 32-bit, though. >>> >>> OK, will test. >> >> Great, thanks. FWIW, tested here, and it works for me. > > Great, will post results tomorrow. Thanks! >> Any objection to adding your test cases to the liburing regression >> suite? > > Feel free to! Great, done! -- Jens Axboe