On Tue 12-12-23 05:25:25, Christoph Hellwig wrote: > On Mon, Dec 11, 2023 at 10:07:53PM +0800, Yu Kuai wrote: > > +static __always_inline int buffer_uptodate_or_error(struct buffer_head *bh) > > +{ > > + /* > > + * If the buffer has the write error flag, data was failed to write > > + * out in the block. In this case, set buffer uptodate to prevent > > + * reading old data. > > + */ > > + if (buffer_write_io_error(bh)) > > + set_buffer_uptodate(bh); > > + return buffer_uptodate(bh); > > +} > > So - risking this blows up into a lot of nasty work: Why do we even > clear the uptodate flag on write errors? Doing so makes not sense to > me as the data isn't any less uptodate just because we failed to write > it.. Historic reasons I'd say (buffer_write_io_error isn't *that* old - from 2003 it seems). And yes, it would make a lot of sense to keep uptodate flag set and just rely on buffer_write_io_error() but it also means going through all buffer_uptodate() checks in filesystems and determining which need changing to buffer_write_io_error() which is something nobody is keen on doing ;) Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR