Re: [PATCH v4 0/7] smb/client: fix fallocate and allocation accounting
hehuiwen <[email protected]>
| Newsgroups | org.kernel.vger.linux-cifs |
|---|---|
| Message-ID | <[email protected]> |
Hi Steve,
After looking at this more, I think the key issue is not only which
xfstests pass, but whether we need to implement real fallocate(mode=0)
preallocation semantics in the CIFS client.
For fallocate(mode=0), CIFS currently relies on SetEOF in some paths.
SetEOF only changes the logical file size and does not request real
space allocation from the server.
For servers that can actually preallocate space, such as Samba with
`strict allocate=yes` or ksmbd, the client probably needs to use the
SMB allocation request and update i_blocks from server-reported
AllocationSize.
So I think we may need to separate two topics:
1. preserving Samba `strict allocate=no` compatibility;
2. implementing real fallocate preallocation semantics when the
server supportsit.
However, these two goals can conflict in some tests. For example,
generic/228 expects `falloc 0 50m` to succeed, which matches the old
Samba `strict allocate=no` behavior, while generic/496 needs a
fallocated swapfile to have real allocated blocks, which requires
server-side allocation.
So using FILE_ALLOCATION_INFORMATION without verifying the resulting
AllocationSize may preserve compatibility, but it would still not
guarantee real fallocate preallocation semantics.
Thanks,
Huiwen
在 2026/6/28 02:13, Steve French 写道:
> With all patches (including smb/client: preserve errors from
> smb2_set_sparse) except
> smb/client: verify allocation after EOF-extending fallocate
> tests 496 and 701 fail
>
> On Sat, Jun 27, 2026 at 1:06 PM Steve French <[email protected]> wrote:
>>
>> Everything passes with six of these seven as long as I leave out:
>>
>> smb/client: verify allocation after EOF-extending fallocate
>>
>> and revert the earlier patch:
>>
>> smb/client: preserve errors from smb2_set_sparse()
>>
>> On Fri, Jun 26, 2026 at 8:47 AM Huiwen He <[email protected]> wrote:
>>>
>>> From: Huiwen He <[email protected]>
>>>
>>> Changes in v4:
>>>
>>> - Add new patch 1 to refresh i_blocks after successful duplicate-extents.
>>> This fixes stale st_blocks after reflink and avoids the generic/370
>>> swapon hole-check regression.
>>>
>>> The following patches from v2 have already been merged into cifs-2.6.git for-next:
>>> - smb/client: do not account EOF extension as allocation
>>> - smb/client: preserve errors from smb2_set_sparse()
>>> - smb/client: name the default fallocate mode
>>>
>>> Link to v3:
>>> https://lore.kernel.org/linux-cifs/[email protected]
>>>
>>> Link to v2:
>>> https://lore.kernel.org/linux-cifs/[email protected]
>>>
>>> Thanks,
>>> Huiwen
>>>
>>> Huiwen He (7):
>>> smb/client: refresh allocation size after duplicate extents
>>> smb/client: handle smb2_set_sparse() failure in EOF-extending
>>> fallocate
>>> smb/client: handle smb2_set_sparse() failure in non-extending
>>> fallocate
>>> smb/client: handle overlapping allocated ranges in fallocate
>>> smb/client: reduce fallocate zero buffer allocation
>>> smb/client: emulate small mode 0 fallocate ranges at or past EOF
>>> smb/client: verify allocation after EOF-extending fallocate
>>>
>>> fs/smb/client/smb2ops.c | 169 +++++++++++++++++++++++++++++++++-----
>>> fs/smb/client/smb2pdu.c | 19 +++++
>>> fs/smb/client/smb2proto.h | 3 +
>>> fs/smb/common/fscc.h | 5 ++
>>> 4 files changed, 175 insertions(+), 21 deletions(-)
>>>
>>> --
>>> 2.43.0
>>>
>>
>>
>> --
>> Thanks,
>>
>> Steve
>
>
>