Re: [PATCH] windows: fix pread/pwrite
Sitsofe Wheeler <[email protected]>
| Newsgroups | org.kernel.vger.fio |
|---|---|
| Message-ID | <CALjAwxiq+jeuvvhRF3CDv51ttb4Fa3seLNzorH=z8N56dxnhOw@mail.gmail.com> |
Hi Vincent, On Thu, 8 May 2025 at 18:33, Vincent Fu <[email protected]> wrote: > > On Thu, May 8, 2025 at 1:18 PM Jens Axboe <[email protected]> wrote: > > > > On 5/8/25 11:14 AM, Vincent Fu wrote: > > > The pread and pwrite functions for Windows posix emulation never actually seek > > > to the requested offset. Fix this so that the psync ioengine works correctly on > > > Windows. Oof! Good catch! [...] > > lol, how broken is that... Does windows have any offset read/write > > variants, or is lseek required? > > I could not find a better way to do this but I am hoping someone who > knows more about Windows than I do can weigh in. Sitsofe? Sadly (?) I'm not a Windows expert (even if I've occasionally played one) but according to an answer on https://stackoverflow.com/questions/3852758/equivalent-to-pread-pwrite-in-msvc the only thing that can take an offset with the request is ReadFile/WriteFile and this is done by passing an OVERLAPPED structure (https://learn.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-overlapped ) which in turn can specify an offset even for synchronous I/O (see https://learn.microsoft.com/en-gb/windows/win32/api/fileapi/nf-fileapi-writefile?redirectedfrom=MSDN#synchronization-and-file-position ). Unfortunately ReadFile/WriteFile only work with Windows handles but I think you can get one from a file descriptor via _get_osfhandle (see https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/get-osfhandle?view=msvc-170). -- Sitsofe