xfs
[Top] [All Lists]

xfs_bmbt_rec_64 leading to wrong blocks

To: xfs@xxxxxxxxxxx
Subject: xfs_bmbt_rec_64 leading to wrong blocks
From: Felipe Monteiro de Carvalho <felipemonteiro.carvalho@xxxxxxxxx>
Date: Wed, 6 Aug 2014 12:12:12 +0200
Delivered-to: xfs@xxxxxxxxxxx
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=nF/Z+LMpOSiaaV5xJug8YkKM2xU7LjL7lwzA7/v9uc4=; b=j3pxrM+jF1PBxPgpvWMKbGOoyDJWNUuSTEqa22fCecD4UBg1Ammhg1URoubDzdfndv gZMu5nvg404anYkUTWMG6aAxIZehe76/1dklEPRtKYRuy5kfYb1DTY9VK/RqoxPUZDKB T6cTlqxvjAFS/pArBCTFaTEHUzRCuzHVZLDTNdW4aA2jB3rGiiVcCIrAmGEeasTa5b2P EhnEgSgZWNE/3y/8yHrDZP3PfOiUnJLf+J84NE0z5Rkv6qKOWgrFrUU3fekXozYq+msR jKbRY3zyfRVOeBwMIyocn1Kv8/btQkTIN0pr7OiZ0zOYww0hS+eJyMAa84peXFQuUO0T iztQ==
Hello,

I am writing a software which reads xfs partitions and it is working
well so far, but, at in a particular folder with 10k files, only 7k
files appear, the other ones don't.

I read an inode which has di_core.di_format = XFS_DINODE_FMT_BTREE

No problem here, the btree is trivial, it has only 1 element inside
it, which leads to a list of 82 extends.

Extends 0..52 aprox. are all great, and work fine.

Extent 53 (and other ones after that) point to very wierd memory areas
which don't match the pattern that I saw previously =(

Here is the hex data of the extents, the selected extent in nr 53:

http://magnifier.sourceforge.net/temp/xfs/extent_with_xfs_bmbt_rec_64.png

And here is debug information showing which values I extracted from this table:

i=0 FLocalExtent.StartOff=0 FLocalExtent.StartBlock=66748
FLocalExtent.BlockCount=1 lStartBlock=65212
i=1 FLocalExtent.StartOff=1 FLocalExtent.StartBlock=66758
FLocalExtent.BlockCount=2 lStartBlock=65222
i=2 FLocalExtent.StartOff=3 FLocalExtent.StartBlock=66772
FLocalExtent.BlockCount=1 lStartBlock=65236
....

i=51 FLocalExtent.StartOff=77 FLocalExtent.StartBlock=67468
FLocalExtent.BlockCount=1 lStartBlock=65932
i=52 FLocalExtent.StartOff=78 FLocalExtent.StartBlock=67479
FLocalExtent.BlockCount=1 lStartBlock=65943
i=53 FLocalExtent.StartOff=8388608 FLocalExtent.StartBlock=66749
FLocalExtent.BlockCount=1 lStartBlock=65213
i=54 FLocalExtent.StartOff=8388609 FLocalExtent.StartBlock=66783
FLocalExtent.BlockCount=2 lStartBlock=65247
...

Note how StartOff is suddenly so big! But I manually checked the bits
comparing to xfs_bmbt_rec_64 and the value written is that one. But
what sense does it make for StartOff to jump like that?

And why are the blocks pointing to a non-XD2D block?

Here is the block to which one of the valid extents point to:

http://magnifier.sourceforge.net/temp/xfs/correct_block_xd2d.png

And here is a block to which one of the extents that I cannot
interpretate point to:

http://magnifier.sourceforge.net/temp/xfs/wierd_block_xd2d.png
and another one:
http://magnifier.sourceforge.net/temp/xfs/wierd_xfs_dir2_data_entry.png

Any ideas???

I already worked so much on this, but I cannot figure out =(

thanks,
-- 
Felipe Monteiro de Carvalho

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