On Thu, Aug 08, 2013 at 09:23:06AM +0200, Jan Schmidt wrote: > > On Wed, August 07, 2013 at 23:11 (+0200), Josef Bacik wrote: > > There is no reason we can't just set the path to blocking and then do normal > > GFP_NOFS allocations for these extent buffers. Thanks, > > > > Signed-off-by: Josef Bacik <jba...@fusionio.com> > > --- > > fs/btrfs/ctree.c | 16 ++++++++++------ > > fs/btrfs/extent_io.c | 8 ++++---- > > 2 files changed, 14 insertions(+), 10 deletions(-) > > > > diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c > > index 1dd8a71..414a2d7 100644 > > --- a/fs/btrfs/ctree.c > > +++ b/fs/btrfs/ctree.c > > @@ -1191,8 +1191,8 @@ __tree_mod_log_rewind(struct btrfs_fs_info *fs_info, > > struct extent_buffer *eb, > > * is freed (its refcount is decremented). > > */ > > static struct extent_buffer * > > -tree_mod_log_rewind(struct btrfs_fs_info *fs_info, struct extent_buffer > > *eb, > > - u64 time_seq) > > +tree_mod_log_rewind(struct btrfs_fs_info *fs_info, struct btrfs_path *path, > > + struct extent_buffer *eb, u64 time_seq) > > { > > struct extent_buffer *eb_rewin; > > struct tree_mod_elem *tm; > > @@ -1207,12 +1207,15 @@ tree_mod_log_rewind(struct btrfs_fs_info *fs_info, > > struct extent_buffer *eb, > > if (!tm) > > return eb; > > > > + btrfs_set_path_blocking(path); > > + btrfs_set_lock_blocking_rw(eb, BTRFS_READ_LOCK); > > + > > if (tm->op == MOD_LOG_KEY_REMOVE_WHILE_FREEING) { > > BUG_ON(tm->slot != 0); > > eb_rewin = alloc_dummy_extent_buffer(eb->start, > > fs_info->tree_root->nodesize); > > if (!eb_rewin) { > > - btrfs_tree_read_unlock(eb); > > + btrfs_tree_read_unlock_blocking(eb); > > free_extent_buffer(eb); > > return NULL; > > } > > @@ -1224,13 +1227,14 @@ tree_mod_log_rewind(struct btrfs_fs_info *fs_info, > > struct extent_buffer *eb, > > } else { > > eb_rewin = btrfs_clone_extent_buffer(eb); > > if (!eb_rewin) { > > - btrfs_tree_read_unlock(eb); > > + btrfs_tree_read_unlock_blocking(eb); > > free_extent_buffer(eb); > > return NULL; > > } > > } > > > > - btrfs_tree_read_unlock(eb); > > + btrfs_clear_path_blocking(path, NULL, BTRFS_READ_LOCK); > > + btrfs_tree_read_unlock_blocking(eb); > > unlock_blocking? Rest looks ok to me. >
Yeah I change the lock to blocking above, so I have to do read_unlock_blocking here. Thanks, Josef -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html