All of lore.kernel.org
 help / color / mirror / Atom feed
From: Liu Bo <liubo2009@cn.fujitsu.com>
To: WeiFeng Liu <weifeng.liu@hushmail.com>
Cc: linux-btrfs <linux-btrfs@vger.kernel.org>
Subject: Re: Two questions about update_global_block_rsv()
Date: Mon, 11 Jun 2012 12:05:05 +0800	[thread overview]
Message-ID: <4FD56E71.9070101@cn.fujitsu.com> (raw)
In-Reply-To: <20120607144622.96FFDE674A@smtp.hushmail.com>

On 06/07/2012 10:46 PM, WeiFeng Liu wrote:

> Help two questions about update_global_block_rsv()
> 
> update_global_block_rsv(fs_info) {
> 
> ...
> block_rsv = &fs_info->global_block_rsv;
> sinfo = block_rsv->space_info;
> 
> num_bytes = sinfo->bytes_used + sinfo->bytes_pinned +
>             sinfo->bytes_reserved + sinfo->bytes_readonly +
>             sinfo->bytes_may_use;
>  
> if (sinfo->total_bytes > num_bytes) {
> 		num_bytes = sinfo->total_bytes - num_bytes;
> 		block_rsv->reserved += num_bytes;
> 		sinfo->bytes_may_use += num_bytes;
> }
> ...
> }
> 
> 1. I don't quite understand the lines:
> 	block_rsv->reserved += num_bytes;
> 	sinfo->bytes_may_use += num_bytes;
> 	
> why aren't they like these?
> 	block_rsv->reserved = num_bytes;
> 	sinfo->bytes_may_use = num_bytes;
> 

> assuming that nothing else is changed, and we just call
> update_global_block_rsv() for several times, then block_rsv->reserved will
> increase constantly, and so sinfo->bytes_may_use; can anyone tell me what it
> means? I mean if nothing else is changed the two variables should keep their
> values unchanged also, is that right? a bit puzzlement to me.
> 


the following if-statement tells the truth:

if (block_rsv->reserved >= block_rsv->size) {
	...
}

> 2. Is the meaning of sinfo->bytes_may_use that bytes which is available for use
> or that bytes which will likely/unlikely be used?
> 


You need to understand how a block_rsv works,

both block_rsv and space_info are a kind of _container_:

    Introducing metadata reseravtion contexts has two major advantages.
    First, it makes metadata reservation more traceable.
    Second, it can reclaim freed space and re-add them to the itself after transaction committed.


here is a basic model:

      +--+--->size          +--+--->size                       +--------------+
      |  |                  |  |                               |              |
      |  |                  |  |                               |              |
      +--+--->reserved      +--+--->reserved                   +--------------+-->may_used
      |  |                  |  |                               |              |
      |  |                  |  |                               |              |
      |  |                  |  |                               |              |
      +--+                  +--+                               +--------------+
    block_rsv          +   block_rsv          +   ...    =     space_info(flag=4)
       A                      B                    |
                                                   |
                                                   +--> reserved meta bytes


Hope that this helps.

thanks,
liubo

> thanks
> 
> WeiFeng Liu
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 



  reply	other threads:[~2012-06-11  3:58 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-07 14:46 Two questions about update_global_block_rsv() WeiFeng Liu
2012-06-11  4:05 ` Liu Bo [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-06-21 12:57 WeiFeng Liu

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=4FD56E71.9070101@cn.fujitsu.com \
    --to=liubo2009@cn.fujitsu.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=weifeng.liu@hushmail.com \
    /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.