[PATCH v3 2/2] ntdll: Use the F_PREALLOCATE fcntl(2) on Mac OS when posix_fallocate(2/3) isn't available.

Alexandre Julliard julliard at winehq.org
Wed Sep 15 03:52:35 CDT 2021


Huw Davies <huw at codeweavers.com> writes:

> On Tue, Sep 14, 2021 at 04:57:42PM -0500, Chip Davis wrote:
>> From: Charles Davis <cdavis5x at gmail.com>
>> 
>> Signed-off-by: Chip Davis <cdavis at codeweavers.com>
>> ---
>>  dlls/ntdll/unix/file.c | 16 ++++++++++++++++
>>  1 file changed, 16 insertions(+)
>> 
>> diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
>> index c92cbd1db4a..899cdc9868a 100644
>> --- a/dlls/ntdll/unix/file.c
>> +++ b/dlls/ntdll/unix/file.c
>> @@ -4581,6 +4581,22 @@ NTSTATUS WINAPI NtSetInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
>>                      if (err == EOPNOTSUPP) WARN( "posix_fallocate not supported on this filesystem\n" );
>>                      else status = errno_to_status( err );
>>                  }
>> +#elif defined(F_PREALLOCATE)
>> +                struct stat st;
>> +
>> +                if (fstat( fd, &st ) < 0)
>> +                    status = errno_to_status( errno );
>
> There's already a call to fstat() in the outer block so this seems
> unnecessary.
>
>> +                else
>> +                {
>> +                    struct fstore fst;
>> +
>> +                    fst.fst_flags = F_ALLOCATECONTIG|F_ALLOCATEALL;
>> +                    fst.fst_posmode = F_PEOFPOSMODE;
>> +                    fst.fst_offset = 0;
>> +                    fst.fst_length = (off_t)info->ValidDataLength.QuadPart - st.st_blocks * 512;
>
> Ignoring the potential for a race here, shouldn't you fetch the block
> size from fstatfs() rather than hard-coding it?
>
>> +                    if (fcntl( fd, F_PREALLOCATE, &fst ) < 0)
>> +                        status = errno_to_status( errno );
>> +                }

Do we actually need this in the first place? I thought posix_fallocate()
was supposed to be the portable solution <g>

-- 
Alexandre Julliard
julliard at winehq.org



More information about the wine-devel mailing list