All of lore.kernel.org
 help / color / mirror / Atom feed
From: Qu Wenruo <quwenruo@cn.fujitsu.com>
To: Liu Bo <bo.li.liu@oracle.com>, <linux-btrfs@vger.kernel.org>
Cc: David Sterba <dsterba@suse.cz>
Subject: Re: [PATCH] Btrfs-progs: fix btrfs-map-logical to only print extent mapping info
Date: Fri, 15 Jul 2016 10:22:52 +0800	[thread overview]
Message-ID: <f12ae244-0b15-fb93-eda1-8f758694afde@cn.fujitsu.com> (raw)
In-Reply-To: <1468546827-28501-1-git-send-email-bo.li.liu@oracle.com>



At 07/15/2016 09:40 AM, Liu Bo wrote:
> I have a valid btrfs image which contains,
> ...
>         item 10 key (1103101952 BLOCK_GROUP_ITEM 1288372224) itemoff 15947 itemsize 24
>                 block group used 655360 chunk_objectid 256 flags DATA|RAID5
>         item 11 key (1103364096 EXTENT_ITEM 131072) itemoff 15894 itemsize 53
>                 extent refs 1 gen 11 flags DATA
>                 extent data backref root 5 objectid 258 offset 0 count 1
>         item 12 key (1103888384 EXTENT_ITEM 262144) itemoff 15841 itemsize 53
>                 extent refs 1 gen 15 flags DATA
>                 extent data backref root 1 objectid 256 offset 0 count 1
>         item 13 key (1104281600 EXTENT_ITEM 262144) itemoff 15788 itemsize 53
>                 extent refs 1 gen 15 flags DATA
>                 extent data backref root 1 objectid 257 offset 0 count 1
> ...
>
> The extent [1103364096, 131072) has length 131072, but if we run
>
> "btrfs-map-logical -l 1103364096 -b $((65536 * 3)) /dev/sda"
>
> it will return mapping info 's of  non-existing extents.
>
> It's because it assumes that extents's are contiguous on logical address,
> when it's not true, after one loop (cur_logical += cur_len) and mapping
> the next extent, we can get an extent that is out of our search range and
> we end up with a negative @real_len and printing all mapping infos till
> the disk end.
>
> Signed-off-by: Liu Bo <bo.li.liu@oracle.com>

Reviewed-by: Qu Wenruo <quwenruo@cn.fujitsu.com>

Yes, the assumption of all extents are contiguous is quite wrong.
So your check is needed.

Thanks,
Qu
> ---
>  btrfs-map-logical.c | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/btrfs-map-logical.c b/btrfs-map-logical.c
> index fd0286d..f421a50 100644
> --- a/btrfs-map-logical.c
> +++ b/btrfs-map-logical.c
> @@ -329,6 +329,11 @@ int main(int argc, char **argv)
>  			goto out_close_fd;
>  		if (ret > 0)
>  			break;
> +		/* check again if there is overlap. */
> +		if (cur_logical + cur_len < logical ||
> +		    cur_logical >= logical + bytes)
> +			break;
> +
>  		real_logical = max(logical, cur_logical);
>  		real_len = min(logical + bytes, cur_logical + cur_len) -
>  			   real_logical;
>



  reply	other threads:[~2016-07-15  2:23 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-15  1:40 [PATCH] Btrfs-progs: fix btrfs-map-logical to only print extent mapping info Liu Bo
2016-07-15  2:22 ` Qu Wenruo [this message]
2016-07-15  9:45   ` David Sterba

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=f12ae244-0b15-fb93-eda1-8f758694afde@cn.fujitsu.com \
    --to=quwenruo@cn.fujitsu.com \
    --cc=bo.li.liu@oracle.com \
    --cc=dsterba@suse.cz \
    --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.