Commit 71c086b3 authored by Filipe Manana's avatar Filipe Manana Committed by David Sterba
Browse files

btrfs: reorganize logic at free_extent_buffer() for better readability



It's hard to read the logic to break out of the while loop since it's a
very long expression consisting of a logical or of two composite
expressions, each one composed by a logical and. Further each one is also
testing for the EXTENT_BUFFER_UNMAPPED bit, making it more verbose than
necessary.

So change from this:

    if ((!test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags) && refs <= 3)
        || (test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags) &&
            refs == 1))
       break;

To this:

    if (test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags)) {
        if (refs == 1)
            break;
    } else if (refs <= 3) {
            break;
    }

At least on x86_64 using gcc 9.3.0, this doesn't change the object size.

Reviewed-by: default avatarBoris Burkov <boris@bur.io>
Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 41e4ea0b
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -3486,10 +3486,13 @@ void free_extent_buffer(struct extent_buffer *eb)

	refs = atomic_read(&eb->refs);
	while (1) {
		if ((!test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags) && refs <= 3)
		    || (test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags) &&
			refs == 1))
		if (test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags)) {
			if (refs == 1)
				break;
		} else if (refs <= 3) {
			break;
		}

		if (atomic_try_cmpxchg(&eb->refs, &refs, refs - 1))
			return;
	}