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. > > Any objection to adding your test cases to the liburing regression > suite? Feel free to! > > -- > Jens Axboe > -- Dmitry