From: Kent Overstreet Date: Thu, 17 Oct 2024 05:10:49 +0000 (-0400) Subject: bcachefs: Fix data corruption on -ENOSPC in buffered write path X-Git-Tag: dma-mapping-6.13-2024-11-19~40^2~13 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=97535cd84f189248ea0fe14544628d480908e99b;p=users%2Fhch%2Fdma-mapping.git bcachefs: Fix data corruption on -ENOSPC in buffered write path Found by generic/299: When we have to truncate a write due to -ENOSPC, we may have to read in the folio we're writing to if we're now no longer doing a complete write to a !uptodate folio. Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/fs-io-buffered.c b/fs/bcachefs/fs-io-buffered.c index 48a1ab9a649b..95972809e76d 100644 --- a/fs/bcachefs/fs-io-buffered.c +++ b/fs/bcachefs/fs-io-buffered.c @@ -856,6 +856,12 @@ static int __bch2_buffered_write(struct bch_inode_info *inode, folios_trunc(&fs, fi); end = min(end, folio_end_pos(darray_last(fs))); } else { + if (!folio_test_uptodate(f)) { + ret = bch2_read_single_folio(f, mapping); + if (ret) + goto out; + } + folios_trunc(&fs, fi + 1); end = f_pos + f_reserved; }