xfs
[Top] [All Lists]

Re: 128 bits extent bmap for file format 2

To: Pradeep Kumar <praks411@xxxxxxxxx>
Subject: Re: 128 bits extent bmap for file format 2
From: Eric Sandeen <sandeen@xxxxxxxxxxx>
Date: Tue, 22 Oct 2013 10:03:31 -0500
Cc: Dave Chinner <david@xxxxxxxxxxxxx>, xfs@xxxxxxxxxxx
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <CAPU9cc3JXedegmC3MgzjtOaRLTtMZoT5C=gkS0zwTCySBqQhew@xxxxxxxxxxxxxx>
References: <CAPU9cc3rV+E79HBE95=nsjgoC5=s85jBBZgcxL+d8KijVa0LyA@xxxxxxxxxxxxxx> <20131022001218.GH4446@dastard> <CAPU9cc2EsoeNE+mMQSwmLVXyyPoE9jLVhDRcQLJxvWYTNU-33w@xxxxxxxxxxxxxx> <CAPU9cc3JXedegmC3MgzjtOaRLTtMZoT5C=gkS0zwTCySBqQhew@xxxxxxxxxxxxxx>
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130801 Thunderbird/17.0.8
On 10/22/13 6:25 AM, Pradeep Kumar wrote:
> I was able to resolve the issue. This was indeed related to conversion 
> between FSB to actual data block in image file. I would like to thanks Dave 
> for showing the direction. 
> So to summarize the extent data (128 bits, format =2) gives absolute block 
> number which is in term of XFS file system block this need to be converted 
> into actual disk block.
> 
> I've used two macros for it.
> 1. #define XFS_FSB_TO_AGNO 
> <http://lxr.free-electrons.com/ident?i=XFS_FSB_TO_AGNO>(mp,fsbno) 
> 2.#define XFS_FSB_TO_AGBNO 
> <http://lxr.free-electrons.com/ident?i=XFS_FSB_TO_AGBNO>(mp,fsbno).
> 
> First one give the actual AG number and the second one gives the block number 
> in that AG.
> 
> Now coming back to my previous example which I posted
> My extent data was.
>  00 00 00 00 00 00 00 00 00 00 00 04 99 80 00 01 (LSB)
> 
> After unpacking, absolute block number = 9420 (0x24cc).
> Converting to actual data block using above two macros gives me AG No. = 1, 
> AG Block No = 1228. So final block (1*6400 + 1228 = 7628) which is correct.(I 
> was able to get correct file contents)
> Please let me know if above computation is correct. It seems correct to me as 
> I'm able to retrieve all the files.
> 
> Still I couldn't get two macros.
> 1. #define XFS_FSS_TO_BB 
> <http://lxr.free-electrons.com/ident?i=XFS_FSS_TO_BB>(mp,sec 
> <http://lxr.free-electrons.com/ident?i=sec>) ((sec 
> <http://lxr.free-electrons.com/ident?i=sec>) << (mp)->m_sectbb_log).
> *2. *#define XFS_BB_TO_FSBT 
> <http://lxr.free-electrons.com/ident?i=XFS_BB_TO_FSBT>(mp,bb 
> <http://lxr.free-electrons.com/ident?i=bb>) ((bb 
> <http://lxr.free-electrons.com/ident?i=bb>) >> (mp)->m_blkbb_log).
> 
> I couldn't find m_sectbb_log and m_blkbb_log fields. Please someone share 
> more knowledge on above 
> macros like where they are used and also description of input and output field

Use the source, Luke:


[linux-2.6]$ grep m_blkbb_log fs/xfs/*.h
fs/xfs/xfs_mount.h:     __uint8_t               m_blkbb_log;    /* blocklog - 
BBSHIFT */

linux-2.6]$ grep m_sectbb_log fs/xfs/*.h
...
fs/xfs/xfs_mount.h:     __uint8_t               m_sectbb_log;   /* sectlog - 
BBSHIFT */

it's the log of the (block/sector) size, minus the basic block (512) shift (9)

/*
 * Block I/O parameterization.  A basic block (BB) is the lowest size of
 * filesystem allocation, and must equal 512.  Length units given to bio
 * routines are in BB's.
 */
#define BBSHIFT         9

-Eric

> Thanks and Regards,
> Pradeep
> 
> 
> 
> 
> 
> On 22 October 2013 10:08, Pradeep Kumar <praks411@xxxxxxxxx 
> <mailto:praks411@xxxxxxxxx>> wrote:
> 
>     Hi Dave,
> 
>     Thanks for the reply. I think I may get my solution. Can you explain the 
> difference between the two?
>     I've created sample xfs file using mkfs.xfs with mostly default parameter 
>     1. Sector Size = 512
>     2. Block size = 4096
>     3. AG Number = 2
>     4. Number of blocks per AG = 6400.
> 
>     So when I get absolute block 9420 from file extent data  I'm going to 
> (6400 + 3020) , 3020 block of second AG which is wrong. The file start from 
> 7628 absolute block or (6400 + 1228), 1228 block of second AG. 
>     Please describe in some detail above the conversion which you are talking 
> about.
> 
>     Thanks and Regards,
>     Pradeep
> 
> 
> 
>     On 22 October 2013 02:12, Dave Chinner <david@xxxxxxxxxxxxx 
> <mailto:david@xxxxxxxxxxxxx>> wrote:
> 
>         On Tue, Oct 22, 2013 at 01:32:22AM +0200, Pradeep Kumar wrote:
>         > Hi,
>         >
>         > I'm writing a small utility to parse XFS fs image on windows.
>         > I'm able to fetch the files in the first AG (0).
>         > However when it comes to the files which are in different AG I'm 
> facing
>         > some problem in parsing extent bmap 128bits data of file inode 
> (format ==
>         > 2).
> 
>         Extents use filesystem block encodings, not disk addresses. Look up
>         the macros XFS_DADDR_TO_FSB and XFS_FSB_TO_DADDR.
> 
>         Cheers,
> 
>         Dave.
>         --
>         Dave Chinner
>         david@xxxxxxxxxxxxx <mailto:david@xxxxxxxxxxxxx>
> 
> 
> 
> 
> 
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs
> 

<Prev in Thread] Current Thread [Next in Thread>