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: Spelling fix in btrfs_lookup_first_block_group comments Btrfs: make show_options result match actual option names Btrfs: remove outdated comment in btrfs_ioctl_resize() Btrfs: remove some WARN_ONs in the IO failure path Btrfs: Don't loop forever on metadata IO failures Btrfs: init inode ordered_data_close flag properly
This commit is contained in:
commit
5732c46849
|
@ -1469,6 +1469,7 @@ read_block_for_search(struct btrfs_trans_handle *trans,
|
||||||
u32 blocksize;
|
u32 blocksize;
|
||||||
struct extent_buffer *b = *eb_ret;
|
struct extent_buffer *b = *eb_ret;
|
||||||
struct extent_buffer *tmp;
|
struct extent_buffer *tmp;
|
||||||
|
int ret;
|
||||||
|
|
||||||
blocknr = btrfs_node_blockptr(b, slot);
|
blocknr = btrfs_node_blockptr(b, slot);
|
||||||
gen = btrfs_node_ptr_generation(b, slot);
|
gen = btrfs_node_ptr_generation(b, slot);
|
||||||
|
@ -1476,6 +1477,10 @@ read_block_for_search(struct btrfs_trans_handle *trans,
|
||||||
|
|
||||||
tmp = btrfs_find_tree_block(root, blocknr, blocksize);
|
tmp = btrfs_find_tree_block(root, blocknr, blocksize);
|
||||||
if (tmp && btrfs_buffer_uptodate(tmp, gen)) {
|
if (tmp && btrfs_buffer_uptodate(tmp, gen)) {
|
||||||
|
/*
|
||||||
|
* we found an up to date block without sleeping, return
|
||||||
|
* right away
|
||||||
|
*/
|
||||||
*eb_ret = tmp;
|
*eb_ret = tmp;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1483,7 +1488,9 @@ read_block_for_search(struct btrfs_trans_handle *trans,
|
||||||
/*
|
/*
|
||||||
* reduce lock contention at high levels
|
* reduce lock contention at high levels
|
||||||
* of the btree by dropping locks before
|
* of the btree by dropping locks before
|
||||||
* we read.
|
* we read. Don't release the lock on the current
|
||||||
|
* level because we need to walk this node to figure
|
||||||
|
* out which blocks to read.
|
||||||
*/
|
*/
|
||||||
btrfs_unlock_up_safe(p, level + 1);
|
btrfs_unlock_up_safe(p, level + 1);
|
||||||
btrfs_set_path_blocking(p);
|
btrfs_set_path_blocking(p);
|
||||||
|
@ -1494,10 +1501,21 @@ read_block_for_search(struct btrfs_trans_handle *trans,
|
||||||
reada_for_search(root, p, level, slot, key->objectid);
|
reada_for_search(root, p, level, slot, key->objectid);
|
||||||
|
|
||||||
btrfs_release_path(NULL, p);
|
btrfs_release_path(NULL, p);
|
||||||
|
|
||||||
|
ret = -EAGAIN;
|
||||||
tmp = read_tree_block(root, blocknr, blocksize, gen);
|
tmp = read_tree_block(root, blocknr, blocksize, gen);
|
||||||
if (tmp)
|
if (tmp) {
|
||||||
|
/*
|
||||||
|
* If the read above didn't mark this buffer up to date,
|
||||||
|
* it will never end up being up to date. Set ret to EIO now
|
||||||
|
* and give up so that our caller doesn't loop forever
|
||||||
|
* on our EAGAINs.
|
||||||
|
*/
|
||||||
|
if (!btrfs_buffer_uptodate(tmp, 0))
|
||||||
|
ret = -EIO;
|
||||||
free_extent_buffer(tmp);
|
free_extent_buffer(tmp);
|
||||||
return -EAGAIN;
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1696,6 +1714,9 @@ cow_done:
|
||||||
if (ret == -EAGAIN)
|
if (ret == -EAGAIN)
|
||||||
goto again;
|
goto again;
|
||||||
|
|
||||||
|
if (ret == -EIO)
|
||||||
|
goto done;
|
||||||
|
|
||||||
if (!p->skip_locking) {
|
if (!p->skip_locking) {
|
||||||
int lret;
|
int lret;
|
||||||
|
|
||||||
|
@ -1738,6 +1759,8 @@ done:
|
||||||
*/
|
*/
|
||||||
if (!p->leave_spinning)
|
if (!p->leave_spinning)
|
||||||
btrfs_set_path_blocking(p);
|
btrfs_set_path_blocking(p);
|
||||||
|
if (ret < 0)
|
||||||
|
btrfs_release_path(root, p);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4212,6 +4235,11 @@ again:
|
||||||
if (ret == -EAGAIN)
|
if (ret == -EAGAIN)
|
||||||
goto again;
|
goto again;
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
btrfs_release_path(root, path);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
if (!path->skip_locking) {
|
if (!path->skip_locking) {
|
||||||
ret = btrfs_try_spin_lock(next);
|
ret = btrfs_try_spin_lock(next);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
|
@ -4246,6 +4274,11 @@ again:
|
||||||
if (ret == -EAGAIN)
|
if (ret == -EAGAIN)
|
||||||
goto again;
|
goto again;
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
btrfs_release_path(root, path);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
if (!path->skip_locking) {
|
if (!path->skip_locking) {
|
||||||
btrfs_assert_tree_locked(path->nodes[level]);
|
btrfs_assert_tree_locked(path->nodes[level]);
|
||||||
ret = btrfs_try_spin_lock(next);
|
ret = btrfs_try_spin_lock(next);
|
||||||
|
|
|
@ -848,8 +848,6 @@ struct extent_buffer *read_tree_block(struct btrfs_root *root, u64 bytenr,
|
||||||
|
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
set_bit(EXTENT_BUFFER_UPTODATE, &buf->bflags);
|
set_bit(EXTENT_BUFFER_UPTODATE, &buf->bflags);
|
||||||
else
|
|
||||||
WARN_ON(1);
|
|
||||||
return buf;
|
return buf;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -312,7 +312,7 @@ btrfs_lookup_first_block_group(struct btrfs_fs_info *info, u64 bytenr)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* return the block group that contains teh given bytenr
|
* return the block group that contains the given bytenr
|
||||||
*/
|
*/
|
||||||
struct btrfs_block_group_cache *btrfs_lookup_block_group(
|
struct btrfs_block_group_cache *btrfs_lookup_block_group(
|
||||||
struct btrfs_fs_info *info,
|
struct btrfs_fs_info *info,
|
||||||
|
|
|
@ -3122,6 +3122,7 @@ static noinline void init_btrfs_i(struct inode *inode)
|
||||||
bi->flags = 0;
|
bi->flags = 0;
|
||||||
bi->index_cnt = (u64)-1;
|
bi->index_cnt = (u64)-1;
|
||||||
bi->last_unlink_trans = 0;
|
bi->last_unlink_trans = 0;
|
||||||
|
bi->ordered_data_close = 0;
|
||||||
extent_map_tree_init(&BTRFS_I(inode)->extent_tree, GFP_NOFS);
|
extent_map_tree_init(&BTRFS_I(inode)->extent_tree, GFP_NOFS);
|
||||||
extent_io_tree_init(&BTRFS_I(inode)->io_tree,
|
extent_io_tree_init(&BTRFS_I(inode)->io_tree,
|
||||||
inode->i_mapping, GFP_NOFS);
|
inode->i_mapping, GFP_NOFS);
|
||||||
|
@ -4295,7 +4296,6 @@ out:
|
||||||
}
|
}
|
||||||
if (err) {
|
if (err) {
|
||||||
free_extent_map(em);
|
free_extent_map(em);
|
||||||
WARN_ON(1);
|
|
||||||
return ERR_PTR(err);
|
return ERR_PTR(err);
|
||||||
}
|
}
|
||||||
return em;
|
return em;
|
||||||
|
|
|
@ -437,10 +437,6 @@ out_unlock:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Called inside transaction, so use GFP_NOFS
|
|
||||||
*/
|
|
||||||
|
|
||||||
static int btrfs_ioctl_resize(struct btrfs_root *root, void __user *arg)
|
static int btrfs_ioctl_resize(struct btrfs_root *root, void __user *arg)
|
||||||
{
|
{
|
||||||
u64 new_size;
|
u64 new_size;
|
||||||
|
|
|
@ -436,9 +436,9 @@ static int btrfs_show_options(struct seq_file *seq, struct vfsmount *vfs)
|
||||||
if (btrfs_test_opt(root, SSD))
|
if (btrfs_test_opt(root, SSD))
|
||||||
seq_puts(seq, ",ssd");
|
seq_puts(seq, ",ssd");
|
||||||
if (btrfs_test_opt(root, NOTREELOG))
|
if (btrfs_test_opt(root, NOTREELOG))
|
||||||
seq_puts(seq, ",no-treelog");
|
seq_puts(seq, ",notreelog");
|
||||||
if (btrfs_test_opt(root, FLUSHONCOMMIT))
|
if (btrfs_test_opt(root, FLUSHONCOMMIT))
|
||||||
seq_puts(seq, ",flush-on-commit");
|
seq_puts(seq, ",flushoncommit");
|
||||||
if (!(root->fs_info->sb->s_flags & MS_POSIXACL))
|
if (!(root->fs_info->sb->s_flags & MS_POSIXACL))
|
||||||
seq_puts(seq, ",noacl");
|
seq_puts(seq, ",noacl");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue