* If block looks ok but CRC didn't match, make sure to
* recompute it.
*/
- if (!no_modify && bp->b_error == -EFSBADCRC)
- repair++;
+ if (bp->b_error == -EFSBADCRC) {
+ do_warn(
+ _("bad checksum for block %u in attribute fork for inode %" PRIu64 "\n"),
+ da_bno, ino);
+ if (!no_modify)
+ repair++;
+ }
if (repair && !no_modify) {
libxfs_buf_mark_dirty(bp);
return 1;
}
- if (bp->b_error == -EFSBADCRC)
+ if (bp->b_error == -EFSBADCRC) {
+ do_warn(
+ _("bad checksum for block 0 in attribute fork for inode %" PRIu64 "\n"),
+ ino);
(*repair)++;
+ }
/* is this block sane? */
if (__check_attr_header(mp, bp, ino)) {
FORKNAME(whichfork), dabno, cursor->ino);
return 1;
}
- if (bp->b_error == -EFSCORRUPTED || bp->b_error == -EFSBADCRC) {
+ if (bp->b_error == -EFSCORRUPTED) {
do_warn(
_("corrupt %s tree block %u for inode %" PRIu64 "\n"),
FORKNAME(whichfork), dabno, cursor->ino);
* If block looks ok but CRC didn't match, make sure to
* recompute it.
*/
- if (!no_modify &&
- cursor->level[this_level].bp->b_error == -EFSBADCRC)
- cursor->level[this_level].dirty = 1;
+ if (cursor->level[this_level].bp->b_error == -EFSBADCRC) {
+ do_warn(
+ _("bad checksum in %s tree block %u for inode %" PRIu64 "\n"),
+ FORKNAME(whichfork), dabno, cursor->ino);
+ if (!no_modify)
+ cursor->level[this_level].dirty = 1;
+ }
if (cursor->level[this_level].dirty && !no_modify) {
libxfs_buf_mark_dirty(cursor->level[this_level].bp);
rval = process_dir2_data(mp, ino, dip, ino_discovery, dirname, parent,
bp, dot, dotdot, mp->m_dir_geo->datablk, (char *)blp, &dirty);
/* If block looks ok but CRC didn't match, make sure to recompute it. */
- if (!rval && bp->b_error == -EFSBADCRC)
- dirty = 1;
+ if (bp->b_error == -EFSBADCRC) {
+ do_warn(
+ _("corrupt directory block %u for inode %" PRIu64 "\n"),
+ mp->m_dir_geo->datablk, ino);
+ if (!rval)
+ dirty = 1;
+ }
if (dirty && !no_modify) {
*repair = 1;
libxfs_buf_mark_dirty(bp);
* If block looks ok but CRC didn't match, make sure to
* recompute it.
*/
- if (!no_modify && bp->b_error == -EFSBADCRC)
- buf_dirty = 1;
+ if (bp->b_error == -EFSBADCRC) {
+ do_warn(
+ _("bad checksum for directory leafn block %u for inode %" PRIu64 "\n"),
+ da_bno, ino);
+ if (!no_modify)
+ buf_dirty = 1;
+ }
+
ASSERT(buf_dirty == 0 || (buf_dirty && !no_modify));
if (buf_dirty && !no_modify) {
*repair = 1;
i = process_dir2_data(mp, ino, dip, ino_discovery, dirname,
parent, bp, dot, dotdot, (xfs_dablk_t)dbno,
(char *)data + mp->m_dir_geo->blksize, &dirty);
- if (i == 0) {
+ if (i == 0)
good++;
- /* Maybe just CRC is wrong. Make sure we correct it. */
- if (bp->b_error == -EFSBADCRC)
+ if (bp->b_error == -EFSBADCRC) {
+ do_warn(
+ _("bad checksum in directory data block %" PRIu64 " for inode %" PRIu64 "\n"),
+ dbno, ino);
+ if (i == 0)
dirty = 1;
}
if (dirty && !no_modify) {