Re: git: ca39f23347e1 - main - ufs: do not leave around empty buffers shadowing disk content

From: Kyle Evans <kevans_at_FreeBSD.org>
Date: Sun, 17 Dec 2023 02:39:35 UTC
On 12/15/23 16:09, Konstantin Belousov wrote:
> The branch main has been updated by kib:
> 
> URL: https://cgit.FreeBSD.org/src/commit/?id=ca39f23347e1416a28dde13279bfe5841ad9a746
> 
> commit ca39f23347e1416a28dde13279bfe5841ad9a746
> Author:     Konstantin Belousov <kib@FreeBSD.org>
> AuthorDate: 2023-12-11 22:57:28 +0000
> Commit:     Konstantin Belousov <kib@FreeBSD.org>
> CommitDate: 2023-12-15 22:06:10 +0000
> 
>      ufs: do not leave around empty buffers shadowing disk content
>      
>      If the ffs_write() operation specified to overwrite the whole buffer,
>      ffs tries to save the read by not validating allocated buffer. Then
>      uiommove() might fail with EFAULT, in which case pages are left zeroed
>      and marked valid but not read from the disk. Then vn_io_fault() logic
>      retries the write after holding the user pages to avoid EFAULTs. In
>      erronous case of really faulty buffer, or in contrived case of writing
>      from file to itself, we are left with zeroed buffer instead of valid
>      content written back to disk.
>      
>      Handle the situation by releasing non-cached buffer on fault, instead
>      of clearing it. Note that buffers with alive dependencies cannot be
>      released, but also either they cannot have valid content on the disk
>      because dependency on data buffer means that it was not yet written, or
>      they were reallocated by fragment extension or ffs_reallocbks(), and are
>      already fully valid.
>      
>      Reported by:    kevans
>      Discussed with: mav
>      In collaboration with:  pho
>      Sponsored by:   The FreeBSD Foundation
>      MFC after:      1 week
>

Thanks!