Re: [PATCH] xfs_repair: junk leaf attribute if count == 0

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

 



On 12/13/16 4:52 AM, Libor Klepáč wrote:
> Hello,
> should this patch possibly fix errors i reported in this thread?
> https://www.spinics.net/lists/linux-xfs/msg01728.html
> 
> Is it safe to test it? (i do have backups)

It should be safe, yes.

(you could always run xfs_repair -n first to be extra careful).

Were those errors during mount/replay, though, or was it when the
filesystem was up and running?

I ask because I also sent a patch to ignore these empty attributes
in the verifier during log replay.

FWIW, Only some of your reported buffers look "empty" though, the one
at 514098.682726 may have had something else wrong.

Anyway, yes, probably worth checking with xfs_repair (-n) with this
patch added.  Let us know what you find! :)

-Eric

 
> Thanks,
> Libor
> 
> On čtvrtek 8. prosince 2016 12:06:03 CET Eric Sandeen wrote:
>> We have recently seen a case where, during log replay, the
>> attr3 leaf verifier reported corruption when encountering a
>> leaf attribute with a count of 0 in the header.
>>
>> We chalked this up to a transient state when a shortform leaf
>> was created, the attribute didn't fit, and we promoted the
>> (empty) attribute to the larger leaf form.
>>
>> I've recently been given a metadump of unknown provenance which actually
>> contains a leaf attribute with count 0 on disk.  This causes the
>> verifier to fire every time xfs_repair is run:
>>
>>  Metadata corruption detected at xfs_attr3_leaf block 0x480988/0x1000
>>
>> If this 0-count state is detected, we should just junk the leaf, same
>> as we would do if the count was too high.  With this change, we now
>> remedy the problem:
>>
>>  Metadata corruption detected at xfs_attr3_leaf block 0x480988/0x1000
>>  bad attribute count 0 in attr block 0, inode 12587828
>>  problem with attribute contents in inode 12587828
>>  clearing inode 12587828 attributes
>>  correcting nblocks for inode 12587828, was 2 - counted 1
>>
>> Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
>> ---
>>
>> diff --git a/repair/attr_repair.c b/repair/attr_repair.c
>> index 40cb5f7..b855a10 100644
>> --- a/repair/attr_repair.c
>> +++ b/repair/attr_repair.c
>> @@ -593,7 +593,8 @@ process_leaf_attr_block(
>>  	stop = xfs_attr3_leaf_hdr_size(leaf);
>>  
>>  	/* does the count look sorta valid? */
>> -	if (leafhdr.count * sizeof(xfs_attr_leaf_entry_t) + stop >
>> +	if (!leafhdr.count ||
>> +	    leafhdr.count * sizeof(xfs_attr_leaf_entry_t) + stop >
>>  						mp->m_sb.sb_blocksize) {
>>  		do_warn(
>>  	_("bad attribute count %d in attr block %u, inode %" PRIu64 "\n"),
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[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