On Fri, Feb 12, 2016 at 02:03:15AM +0500, Михаил Гаврилов wrote: > Thanks guys, I appreciate your's work. > In which kernel this patch would landed?
You can try it on your 4.2.3 kernel or the latest 4.5, but I guess it doesn't not fix the real deadlock you're hitting... Thanks, -liubo > > -- > Best Regards, > Mike Gavrilov. > > > 2016-02-12 0:18 GMT+05:00 Liu Bo <bo.li....@oracle.com>: > > > > Really appreciate for collecting these, it should be helpful. > > > > Unfortunately I still could not figure out who's holding fs tree's root > > WRITE_LOCK so that others are blocked. > > > > A possible bug in log code (the follwing patch addressed it), > > > > - log_new_dir_dentries() is holding log tree's leaf READ_LOCK and may try > > to get fs tree's READ_LOCK via btrfs_iget() -> btrfs_lookup(). > > (This is shown in the backtrac) > > > > - btrfs_log_inode() can call btrfs_search_forward() to get fs tree's > > leaf READ_LOCK and then call copy_items() -> btrfs_insert_empty_items() > > to acquire WRITE_LOCK of log tree's leaf and leaf's parent. > > (In the backtrace, this is blocked by item 1 because log_new_dir_dentries > > is > > holding a log tree leaf's READ_LOCK() which happens to be sibling to > > the leaf that btrfs_insert_empty_items() is accessing, when doing > > split_leaf() it needs to get the sibling's WRITE_LOCK(). ) > > > > Thanks, > > > > -liubo > > > > diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c > > index 323e12c..4a64fdd 100644 > > --- a/fs/btrfs/tree-log.c > > +++ b/fs/btrfs/tree-log.c > > @@ -4956,6 +4956,7 @@ process_leaf: > > if (di_key.type == BTRFS_ROOT_ITEM_KEY) > > continue; > > > > + btrfs_release_path(path); > > di_inode = btrfs_iget(root->fs_info->sb, &di_key, > > root, NULL); > > if (IS_ERR(di_inode)) { > > @@ -4971,7 +4972,6 @@ process_leaf: > > ctx->log_new_dentries = false; > > if (type == BTRFS_FT_DIR) > > log_mode = LOG_INODE_ALL; > > - btrfs_release_path(path); > > ret = btrfs_log_inode(trans, root, di_inode, > > log_mode, 0, LLONG_MAX, ctx); > > iput(di_inode); > > > > -- 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