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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.