Commit b2840e33 authored by Bart Van Assche's avatar Bart Van Assche Committed by David Sterba
Browse files

btrfs: add missing RCU unlock in error path in try_release_subpage_extent_buffer()



Call rcu_read_lock() before exiting the loop in
try_release_subpage_extent_buffer() because there is a rcu_read_unlock()
call past the loop.

This has been detected by the Clang thread-safety analyzer.

Fixes: ad580dfa ("btrfs: fix subpage deadlock in try_release_subpage_extent_buffer()")
CC: stable@vger.kernel.org # 6.18+
Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
Reviewed-by: default avatarBoris Burkov <boris@bur.io>
Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 5131fa07
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -4494,6 +4494,7 @@ static int try_release_subpage_extent_buffer(struct folio *folio)
		 */
		if (!test_and_clear_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) {
			spin_unlock(&eb->refs_lock);
			rcu_read_lock();
			break;
		}