Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable
* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable: Btrfs: don't use spin_is_contended
This commit is contained in:
Коммит
4c098bcd55
|
@ -1530,8 +1530,7 @@ again:
|
|||
* for higher level blocks, try not to allocate blocks
|
||||
* with the block and the parent locks held.
|
||||
*/
|
||||
if (level > 0 && !prealloc_block.objectid &&
|
||||
btrfs_path_lock_waiting(p, level)) {
|
||||
if (level > 0 && !prealloc_block.objectid) {
|
||||
u32 size = b->len;
|
||||
u64 hint = b->start;
|
||||
|
||||
|
|
|
@ -236,25 +236,3 @@ int btrfs_tree_locked(struct extent_buffer *eb)
|
|||
return test_bit(EXTENT_BUFFER_BLOCKING, &eb->bflags) ||
|
||||
spin_is_locked(&eb->lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* btrfs_search_slot uses this to decide if it should drop its locks
|
||||
* before doing something expensive like allocating free blocks for cow.
|
||||
*/
|
||||
int btrfs_path_lock_waiting(struct btrfs_path *path, int level)
|
||||
{
|
||||
int i;
|
||||
struct extent_buffer *eb;
|
||||
|
||||
for (i = level; i <= level + 1 && i < BTRFS_MAX_LEVEL; i++) {
|
||||
eb = path->nodes[i];
|
||||
if (!eb)
|
||||
break;
|
||||
smp_mb();
|
||||
if (spin_is_contended(&eb->lock) ||
|
||||
waitqueue_active(&eb->lock_wq))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -26,8 +26,6 @@ int btrfs_tree_locked(struct extent_buffer *eb);
|
|||
int btrfs_try_tree_lock(struct extent_buffer *eb);
|
||||
int btrfs_try_spin_lock(struct extent_buffer *eb);
|
||||
|
||||
int btrfs_path_lock_waiting(struct btrfs_path *path, int level);
|
||||
|
||||
void btrfs_set_lock_blocking(struct extent_buffer *eb);
|
||||
void btrfs_clear_lock_blocking(struct extent_buffer *eb);
|
||||
#endif
|
||||
|
|
Загрузка…
Ссылка в новой задаче