btrfs: warn if EXTENT_BUFFER_UPTODATE is set while reading
authorTavian Barnes <tavianator@tavianator.com>
Mon, 18 Mar 2024 13:56:54 +0000 (09:56 -0400)
committerDavid Sterba <dsterba@suse.com>
Tue, 7 May 2024 19:31:00 +0000 (21:31 +0200)
commitf32f20e2bd1f3b83925f703704840eebb56faedb
tree5e5139c315a25e56fcb98bcd10fd8aeb4b6cd907
parent1e2d1837091bf70f204802bcac48495358e75673
btrfs: warn if EXTENT_BUFFER_UPTODATE is set while reading

We recently tracked down a race condition that triggered a read for an
extent buffer with EXTENT_BUFFER_UPTODATE already set.  While this read
was in progress, other concurrent readers would see the UPTODATE bit and
return early as if the read was already complete, making accesses to the
extent buffer conflict with the read operation that was overwriting it.

Add a WARN_ON() to end_bbio_meta_read() for this situation to make
similar races easier to spot in the future.

Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Tavian Barnes <tavianator@tavianator.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c