From: Omar Sandoval <osandov@osandov.com>
To: Qu Wenruo <quwenruo.btrfs@gmx.com>
Cc: "Rebraca Dejan (BSOT/PJ-ES1-Bg)" <Dejan.Rebraca@rs.bosch.com>,
"linux-btrfs@vger.kernel.org" <linux-btrfs@vger.kernel.org>
Subject: Re: FIEMAP ioctl gets "wrong" address for the extent
Date: Mon, 6 Jul 2020 10:10:28 -0700 [thread overview]
Message-ID: <20200706171028.GA16070@vader> (raw)
In-Reply-To: <a18bcf27-4c65-6033-0ea7-45da2b521864@gmx.com>
On Thu, Jul 02, 2020 at 07:21:42PM +0800, Qu Wenruo wrote:
>
>
> On 2020/7/2 下午7:08, Rebraca Dejan (BSOT/PJ-ES1-Bg) wrote:
> > Hi Qu,
> >
> > I'm using this structure to get the address of file extent:
> >
> > struct fiemap_extent {
> > __u64 fe_logical; /* logical offset in bytes for the start of
> > * the extent */
> > __u64 fe_physical; /* physical offset in bytes for the start
> > * of the extent */
>
> fe_physical in btrfs is btrfs logical address.
>
> > __u64 fe_length; /* length in bytes for the extent */
> > __u64 fe_reserved64[2];
> > __u32 fe_flags; /* FIEMAP_EXTENT_* flags for this extent */
> > __u32 fe_reserved[3];
> > };
> >
> > And using fe_physical field I verified that it really reflects the offset in filesystem image - I can see that file content begins at this offset.
> > The problem is that I run into some specific case where file content doesn't begin at fe_physical, I rather have something else at this offset.
>
> As said, there is no guarantee that btrfs logical address is mapped 1:1
> on disk.
> It's possible, but never guaranteed.
>
> You need to pass that fe_physical number to btrfs-map-logical to find
> the real on-disk offset.
>
> Thanks,
> Qu
FYI, I have a utility that does this mapping for all extents in a file:
https://github.com/osandov/osandov-linux/blob/master/scripts/btrfs_map_physical.c
$ sudo ./btrfs_map_physical archlinux-2020.07.01-x86_64.iso | column -ts $'\t'
FILE OFFSET FILE SIZE EXTENT OFFSET EXTENT TYPE LOGICAL SIZE LOGICAL OFFSET PHYSICAL SIZE DEVID PHYSICAL OFFSET
0 6811648 0 regular 6815744 304680529920 6815744 1 89898610688
6811648 4096 0 regular 4096 304594616320 4096 1 89812697088
6815744 70250496 0 regular 70254592 419517255680 70254592 1 168228114432
77066240 4096 0 regular 4096 419587510272 4096 1 168298369024
77070336 127647744 0 regular 127647744 443648155648 127647744 1 209538883584
204718080 552960 0 regular 557056 304605401088 557056 1 89823481856
205271040 134217728 0 regular 134217728 491017764864 134217728 1 238654881792
339488768 43814912 0 regular 43814912 419587514368 43814912 1 168298373120
383303680 241664 0 regular 245760 304605958144 245760 1 89824038912
383545344 4096 0 regular 4096 304594620416 4096 1 89812701184
383549440 134217728 0 regular 134217728 517290700800 134217728 1 255264141312
517767168 78376960 0 regular 78381056 451287601152 78381056 1 213957103616
596144128 82284544 0 regular 82284544 517424918528 82284544 1 255398359040
next prev parent reply other threads:[~2020-07-06 17:10 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-02 9:11 FIEMAP ioctl gets "wrong" address for the extent Rebraca Dejan (BSOT/PJ-ES1-Bg)
2020-07-02 10:18 ` Qu Wenruo
2020-07-02 11:08 ` Rebraca Dejan (BSOT/PJ-ES1-Bg)
2020-07-02 11:21 ` Qu Wenruo
2020-07-03 7:13 ` Rebraca Dejan (BSOT/PJ-ES1-Bg)
2020-07-06 17:10 ` Omar Sandoval [this message]
2020-07-02 11:43 ` David Sterba
2020-07-07 9:43 ` Anand Jain
2020-07-07 11:38 ` 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=20200706171028.GA16070@vader \
--to=osandov@osandov.com \
--cc=Dejan.Rebraca@rs.bosch.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=quwenruo.btrfs@gmx.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.