Skip to content

Commit

Permalink
Btrfs: fix unreleased path in btrfs_orphan_cleanup()
Browse files Browse the repository at this point in the history
When we did stress test for the space relocation, the deadlock happened.
By debugging, We found it was caused by the carelessness that we forgot
to unlock the read lock of the extent buffers in btrfs_orphan_cleanup()
before we end the transaction handle, so the transaction commit task waited
the task, which called btrfs_orphan_cleanup(), to unlock the extent buffer,
but that task waited the commit task to end the transaction commit, and
the deadlock happened. Fix it.

Signed-ff-by: Miao Xie <miaox@cn.fujitsu.com>

Signed-off-by: Chris Mason <chris.mason@oracle.com>
  • Loading branch information
Miao Xie authored and Chris Mason committed Nov 11, 2011
1 parent ba38eb4 commit 3254c87
Showing 1 changed file with 3 additions and 0 deletions.
3 changes: 3 additions & 0 deletions fs/btrfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -2201,6 +2201,9 @@ int btrfs_orphan_cleanup(struct btrfs_root *root)
if (ret)
goto out;
}
/* release the path since we're done with it */
btrfs_release_path(path);

root->orphan_cleanup_state = ORPHAN_CLEANUP_DONE;

if (root->orphan_block_rsv)
Expand Down

0 comments on commit 3254c87

Please sign in to comment.