All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arne Jansen <sensille@gmx.net>
To: Josef Bacik <josef@redhat.com>
Cc: linux-btrfs@vger.kernel.org
Subject: Re: [PATCH] Btrfs: don't reserve metadata when we're using the delalloc reserve
Date: Wed, 13 Apr 2011 18:34:09 +0200	[thread overview]
Message-ID: <4DA5D081.4070108@gmx.net> (raw)
In-Reply-To: <1302710775-29602-1-git-send-email-josef@redhat.com>

On 13.04.2011 18:06, Josef Bacik wrote:
> There are a bunch of places where we do btrfs_join_transaction(root, 1), but
> really we set the block_rsv to the delalloc reserve because our metadata was
> reserved at delalloc time.  This means we don't need to reserve space at all,
> and can just join the transaction and go.  This patch also fixes a few places
> where we weren't actually setting the block_rsv to the delalloc reserve.
> Thanks,
> 
> Signed-off-by: Josef Bacik <josef@redhat.com>
> ---
>  fs/btrfs/inode.c |   27 +++++++++++++++++----------
>  1 files changed, 17 insertions(+), 10 deletions(-)
> 
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index c4b914e..e9bda50 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -420,7 +420,7 @@ again:
>  		}
>  	}
>  	if (start == 0) {
> -		trans = btrfs_join_transaction(root, 1);
> +		trans = btrfs_join_transaction(root, 0);

btrfs_join_transaction ignores the num_blocks parameter, so this
shouldn't change anything. Maybe it's cleaner to just eradicate
the parameter.

-Arne



>  		BUG_ON(IS_ERR(trans));
>  		btrfs_set_trans_block_group(trans, inode);
>  		trans->block_rsv = &root->fs_info->delalloc_block_rsv;
> @@ -617,8 +617,9 @@ retry:
>  			    async_extent->start + async_extent->ram_size - 1,
>  			    GFP_NOFS);
>  
> -		trans = btrfs_join_transaction(root, 1);
> +		trans = btrfs_join_transaction(root, 0);
>  		BUG_ON(IS_ERR(trans));
> +		trans->block_rsv = &root->fs_info->delalloc_block_rsv;
>  		ret = btrfs_reserve_extent(trans, root,
>  					   async_extent->compressed_size,
>  					   async_extent->compressed_size,
> @@ -778,7 +779,12 @@ static noinline int cow_file_range(struct inode *inode,
>  	int ret = 0;
>  
>  	BUG_ON(root == root->fs_info->tree_root);
> -	trans = btrfs_join_transaction(root, 1);
> +
> +	/*
> +	 * Our metadata reservations should have been taken care of in the
> +	 * delalloc stuff, so we don't need to reserve space here.
> +	 */
> +	trans = btrfs_join_transaction(root, 0);
>  	BUG_ON(IS_ERR(trans));
>  	btrfs_set_trans_block_group(trans, inode);
>  	trans->block_rsv = &root->fs_info->delalloc_block_rsv;
> @@ -1054,11 +1060,12 @@ static noinline int run_delalloc_nocow(struct inode *inode,
>  	BUG_ON(!path);
>  	if (root == root->fs_info->tree_root) {
>  		nolock = true;
> -		trans = btrfs_join_transaction_nolock(root, 1);
> +		trans = btrfs_join_transaction_nolock(root, 0);
>  	} else {
> -		trans = btrfs_join_transaction(root, 1);
> +		trans = btrfs_join_transaction(root, 0);
>  	}
>  	BUG_ON(IS_ERR(trans));
> +	trans->block_rsv = &root->fs_info->delalloc_block_rsv;
>  
>  	cow_start = (u64)-1;
>  	cur_offset = start;
> @@ -1715,9 +1722,9 @@ static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end)
>  		ret = btrfs_ordered_update_i_size(inode, 0, ordered_extent);
>  		if (!ret) {
>  			if (nolock)
> -				trans = btrfs_join_transaction_nolock(root, 1);
> +				trans = btrfs_join_transaction_nolock(root, 0);
>  			else
> -				trans = btrfs_join_transaction(root, 1);
> +				trans = btrfs_join_transaction(root, 0);
>  			BUG_ON(IS_ERR(trans));
>  			btrfs_set_trans_block_group(trans, inode);
>  			trans->block_rsv = &root->fs_info->delalloc_block_rsv;
> @@ -1732,9 +1739,9 @@ static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end)
>  			 0, &cached_state, GFP_NOFS);
>  
>  	if (nolock)
> -		trans = btrfs_join_transaction_nolock(root, 1);
> +		trans = btrfs_join_transaction_nolock(root, 0);
>  	else
> -		trans = btrfs_join_transaction(root, 1);
> +		trans = btrfs_join_transaction(root, 0);
>  	BUG_ON(IS_ERR(trans));
>  	btrfs_set_trans_block_group(trans, inode);
>  	trans->block_rsv = &root->fs_info->delalloc_block_rsv;
> @@ -5839,7 +5846,7 @@ again:
>  
>  	BUG_ON(!ordered);
>  
> -	trans = btrfs_join_transaction(root, 1);
> +	trans = btrfs_join_transaction(root, 0);
>  	if (IS_ERR(trans)) {
>  		err = -ENOMEM;
>  		goto out;


  reply	other threads:[~2011-04-13 16:34 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-04-13 16:06 [PATCH] Btrfs: don't reserve metadata when we're using the delalloc reserve Josef Bacik
2011-04-13 16:34 ` Arne Jansen [this message]
2011-04-13 16:41   ` Josef Bacik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4DA5D081.4070108@gmx.net \
    --to=sensille@gmx.net \
    --cc=josef@redhat.com \
    --cc=linux-btrfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.