There is a set checks for corruption in block map btrees in process_bmbt_reclist_int that we identify but currently do not fix. It appears that the author's intent in this function was to set error = 1, and then only clear it when all of the checks were completed successfully. Unfortunately error can be cleared when it is used for the return value of blkmap_set_ext. Some kinds of corruption are not being fixed, including duplicate extents, claiming free blocks, claiming metadata blocks, and multiply used blocks. Fix this by shadowing error for blkmap_set_ext. Signed-off-by: Ben Myers <bpm@xxxxxxx> --- repair/dinode.c | 1 + 1 file changed, 1 insertion(+) Index: b/repair/dinode.c =================================================================== --- a/repair/dinode.c 2013-12-03 15:43:59.895287548 -0600 +++ b/repair/dinode.c 2013-12-03 15:44:09.315225645 -0600 @@ -663,6 +663,7 @@ _("inode %" PRIu64 " - extent offset too } if (blkmapp && *blkmapp) { + int error; error = blkmap_set_ext(blkmapp, irec.br_startoff, irec.br_startblock, irec.br_blockcount); if (error) { _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs