From: Joseph Qi <joseph.qi@linux.alibaba.com>
To: Anna Schumaker <anna@kernel.org>
Cc: Trond Myklebust <trondmy@kernel.org>,
linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] NFS: don't raise i_size for DEALLOCATE in _nfs42_proc_fallocate()
Date: Wed, 4 Nov 2026 09:45:16 +0800 [thread overview]
Message-ID: <50188292-83d9-4721-8f1f-76e4759ddb80@linux.alibaba.com> (raw)
In-Reply-To: <0c67f568-586b-456a-be28-65d2ea16b633@app.fastmail.com>
Hi,
On 11/4/26 4:11 AM, Anna Schumaker wrote:
> Hi Joseph,
>
> On Tue, Nov 3, 2026, at 1:16 AM, Joseph Qi wrote:
>> _nfs42_proc_fallocate() raises i_size to offset + len on success, so
>> that the cached size is not left stale when a delegation blocks the
>> post-op attribute refresh. The helper is shared by all three
>> fallocate modes, but DEALLOCATE always carries FALLOC_FL_KEEP_SIZE
>> and never extends the file on the server, so punching a hole that
>> reaches past EOF now wrongly enlarges the cached i_size.
>>
>> The post-op update would normally restore the size from the returned
>> attributes, but nfs_update_inode() applies a differing size only when
>> no delegation is held, and then only when no write is in flight or the
>> new size is larger:
>>
>> if (new_isize != cur_isize && !have_delegation) {
>> if (!nfs_have_writebacks(inode) || new_isize > cur_isize)
>> i_size_write(inode, new_isize);
>> }
>>
>> With a concurrent mmap writer (nrequests != 0) or any outstanding
>> delegation, the shrinking server size is therefore ignored and the
>> client keeps reporting a file larger than the server has, in violation
>> of KEEP_SIZE, until some later revalidation without writebacks happens
>> to fix it up.
>>
>> Skip the i_size bump for the DEALLOCATE procedure. ALLOCATE (mode 0)
>> and ZERO_RANGE (which nfs42_fallocate() accepts only without
>> FALLOC_FL_KEEP_SIZE) do extend the file when the range reaches past
>> EOF, so they keep the update.
>>
>> Fixes: 35168eb947f2 ("NFS: fix eof updates after NFSv4.2 fallocate/zero-range")
>> Cc: stable@vger.kernel.org
>> Signed-off-by: Joseph Qi <joseph.qi@linux.alibaba.com>
>> ---
>> fs/nfs/nfs42proc.c | 11 ++++++++++-
>> 1 file changed, 10 insertions(+), 1 deletion(-)
>>
>> diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c
>> index ab86246fc364f..914499d30d47e 100644
>> --- a/fs/nfs/nfs42proc.c
>> +++ b/fs/nfs/nfs42proc.c
>> @@ -84,7 +84,16 @@ static int _nfs42_proc_fallocate(struct rpc_message
>> *msg, struct file *filep,
>> loff_t newsize = offset + len;
>>
>> spin_lock(&inode->i_lock);
>> - if (newsize > i_size_read(inode))
>> + /*
>> + * DEALLOCATE always carries FALLOC_FL_KEEP_SIZE and never
>> + * extends the file on the server, so only ALLOCATE and
>> + * ZERO_RANGE may raise i_size here. A wrongly raised size
>> + * can persist: nfs_update_inode() ignores a shrinking
>> + * post-op size while writebacks are outstanding or a
>> + * delegation is held.
>> + */
>
> Is the comment really necessary? It's just restating things from the commit
> message, and could quickly go stale if the behavior of nfs_update_inode()
> ever needs to change in the future.
>
Thanks for reviewing this.
So any review comments on the code change? I'll update the comments and
send v2 if you're fine with fix.
Thanks,
Joseph
prev parent reply other threads:[~2026-11-04 1:45 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-03 6:16 Joseph Qi
2026-11-03 20:11 ` Anna Schumaker
2026-11-04 1:45 ` Joseph Qi [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=50188292-83d9-4721-8f1f-76e4759ddb80@linux.alibaba.com \
--to=joseph.qi@linux.alibaba.com \
--cc=anna@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=trondmy@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®