btrfs: Adjust loop in free_extent_buffer
[sfrench/cifs-2.6.git] / fs / btrfs / extent_io.c
index 39a41e8777fc5dbd4062ad1026cfc7f171500117..e7cbd3f98404231db609b34abebd9ac965a0fe1c 100644 (file)
@@ -5074,7 +5074,9 @@ void free_extent_buffer(struct extent_buffer *eb)
 
        while (1) {
                refs = atomic_read(&eb->refs);
-               if (refs <= 3)
+               if ((!test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags) && refs <= 3)
+                   || (test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags) &&
+                       refs == 1))
                        break;
                old = atomic_cmpxchg(&eb->refs, refs, refs - 1);
                if (old == refs)