Re: [PATCH] xfs_db: Scan entire file system when using 'frag'

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

 



On 4/26/19 10:32 PM, Jorge Guerra wrote:
> Thanks Eric,
> 
> I'll update the title.

No need, I can add the fixes tag when I queue it up.

> We are using the frag command to quickly scan the file system and
> obtain info such as file size distribution and overheads.  I'll send
> that change out for review soon :)
> 
> Hopefully that will make the frag command great again! :D

;) ok, if it becomes less meaningless, you may want to remove the printf
which claims that it is meaningless.  :)

-Eric

> On Fri, Apr 26, 2019 at 5:13 PM Eric Sandeen <sandeen@xxxxxxxxxxx> wrote:
>>
>> On 4/26/19 5:59 PM, Jorge Guerra wrote:
>>> From: Jorge Guerra <jorgeguerra@xxxxxx>
>>>
>>> While running the 'frag' command of 'xfs_db' we noticed that the
>>> tool is not scanning all the files in the file system.  We noticed
>>> this when we modified the tool to print the inodes of all the files
>>> scanned.  For example:
>>>
>>>  $ find /mnt/xfsdisk -type f | wc -l
>>>  1782674
>>>  $ xfs_db -r -c frag /dev/sdXX  | grep MB | awk '{print $5}' | paste -s -d+ | bc
>>>  656818
>>>
>>> Upon inspecting the code we noticed that the scanfunc_ino function
>>> stops processing a given inode block once it encounters a free leaf.
>>> However, in practice we see that inodes are necessarily always layed
>>> out contiguously on the leaf node.  This resulted in the 'frag'
>>> command skipping some valid inodes.
>>>
>>> In this change we modify the scanfunc_ino function to skip freed
>>> inodes.  With the change in place we ran the same experiment again
>>> and noticed a more accurate file count:
>>>
>>>  $ find /mnt/d0 -type f | wc -l
>>>  1810442
>>>  $ xfs_db -r -c frag /dev/sdXX  | grep MB | awk '{print $5}' | paste -s -d+ | bc
>>>  1810442
>>>
>>> Signed-off-by: Jorge Guerra <jorgeguerra@xxxxxx>
>>
>> This looks right, but I'll warn you that xfs_db's frag command is largely
>> useless in the first place.  ;)
>>
>> Also, I think:
>>
>> Fixes: 2a5eb70c ("xfs_db: teach the frag command about sparse inode chunks")
>>
>> Reviewed-by: Eric Sandeen <sandeen@xxxxxxxxxx>
>>
>> Thanks!
>>
>>> ---
>>>  db/frag.c | 2 +-
>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/db/frag.c b/db/frag.c
>>> index 5f33cb73..91395234 100644
>>> --- a/db/frag.c
>>> +++ b/db/frag.c
>>> @@ -507,7 +507,7 @@ scanfunc_ino(
>>>
>>>                               for (j = 0; j < inodes_per_buf; j++) {
>>>                                       if (XFS_INOBT_IS_FREE_DISK(&rp[i], ioff + j))
>>> -                                             goto next_buf;
>>> +                                             continue;
>>>                                       dip = (xfs_dinode_t *)((char *)iocur_top->data +
>>>                                               ((off + j) << mp->m_sb.sb_inodelog));
>>>                                       process_inode(agf, agino + ioff + j, dip);
>>>
> 
> 
> 



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux