The patch below does not apply to the 4.4-stable tree. If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to stable@vger.kernel.org.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From f45c752b65af46bf42963295c332865d95f97fff Mon Sep 17 00:00:00 2001
From: Josef Bacik josef@toxicpanda.com Date: Fri, 28 Sep 2018 07:17:48 -0400 Subject: [PATCH] btrfs: release metadata before running delayed refs
We want to release the unused reservation we have since it refills the delayed refs reserve, which will make everything go smoother when running the delayed refs if we're short on our reservation.
CC: stable@vger.kernel.org # 4.4+ Reviewed-by: Omar Sandoval osandov@fb.com Reviewed-by: Liu Bo bo.liu@linux.alibaba.com Reviewed-by: Nikolay Borisov nborisov@suse.com Signed-off-by: Josef Bacik josef@toxicpanda.com Signed-off-by: David Sterba dsterba@suse.com
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index cadc747292d9..e7f618b17b07 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c @@ -1932,6 +1932,9 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans) return ret; }
+ btrfs_trans_release_metadata(trans); + trans->block_rsv = NULL; + /* make a pass through all the delayed refs we have so far * any runnings procs may add more while we are here */ @@ -1941,9 +1944,6 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans) return ret; }
- btrfs_trans_release_metadata(trans); - trans->block_rsv = NULL; - cur_trans = trans->transaction;
/*