Re: 128 bits extent bmap for file format 2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
> 

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs




[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux