xfs
[Top] [All Lists]

Re: 128 bits extent bmap for file format 2

To: Dave Chinner <david@xxxxxxxxxxxxx>
Subject: Re: 128 bits extent bmap for file format 2
From: Pradeep Kumar <praks411@xxxxxxxxx>
Date: Tue, 22 Oct 2013 13:25:04 +0200
Cc: xfs@xxxxxxxxxxx
Delivered-to: xfs@xxxxxxxxxxx
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=10Bcz0MU3YSYjQdlWRiOh8E/BCz0oDJdO4eJU9D/VOs=; b=fVj7Hu27Z3+viwhI0mcMFBpqwNcoQjUxYWf/XAGLb+XxIkCOXOH6NnT3LwR0SnTv9d +SnJyifqwgH/7tBSgHmP968NC+SzgtY0VOzEMM1l6KVpIjJPWpRp+3q/y20+50cTL6ol pMR7sunP26R6S03f47eRsD0fBmmrOX+Oym7Vyngr+YSu3pnMpPWBouqc1ciaaYrm4Uqq t5z/IMEXfDSznzbLmSthEpsr0IC0i5Cc3dm3tR7fmKHnIYZkg6m9whIp/hB0X1f1msbl BQRHXwtl9G+vifx5nDSWf7U/oX57WSmFaecGkV2m4UCfzrMOUy8RwGOGJs/Rpm52ChvL GpYg==
In-reply-to: <CAPU9cc2EsoeNE+mMQSwmLVXyyPoE9jLVhDRcQLJxvWYTNU-33w@xxxxxxxxxxxxxx>
References: <CAPU9cc3rV+E79HBE95=nsjgoC5=s85jBBZgcxL+d8KijVa0LyA@xxxxxxxxxxxxxx> <20131022001218.GH4446@dastard> <CAPU9cc2EsoeNE+mMQSwmLVXyyPoE9jLVhDRcQLJxvWYTNU-33w@xxxxxxxxxxxxxx>
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(mp,fsbno) 
2.#define 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(mp,sec) ((sec) << (mp)->m_sectbb_log).
2. #define XFS_BB_TO_FSBT(mp,bb) ((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

Thanks and Regards,
Pradeep





On 22 October 2013 10:08, Pradeep Kumar <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> 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


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