On Sun, Aug 14, 2016 at 07:30:51PM -0500, Eric Sandeen wrote: > This adds a new "crc" command to xfs_db for CRC-enabled filesystems. > > If a structure has a CRC field, we can validate it, invalidate/corrupt > it, or revalidate/rewrite it: > > xfs_db> sb 0 > xfs_db> crc -v > crc = 0x796c814f (correct) > xfs_db> crc -i > Metadata CRC error detected at block 0x0/0x200 > crc = 0x796c8150 (bad) > xfs_db> crc -r > crc = 0x796c814f (correct) > > (-i and -r require "expert" write-capable mode) > > This requires temporarily replacing the write verifier with > a dummy which won't recalculate the CRC on the way to disk. > > It also required me to write a new flist function, which is > totally foreign to me, so hopefully done right - but it seems > to work here. > > Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx> Actually, this need more help.... > @@ -473,12 +474,15 @@ xfs_verify_recalc_crc( > void > write_cur(void) > { > + int skip_crc = (iocur_top->bp->b_ops->verify_write == xfs_dummy_verify); > + bool, and we can't use the iocur until we've checked if it's valid. i.e. after this first check: > if (iocur_sp < 0) { > dbprintf(_("nothing to write\n")); > return; > } > > - if (xfs_sb_version_hascrc(&mp->m_sb) && iocur_top->ino_buf) { > + if (xfs_sb_version_hascrc(&mp->m_sb) && iocur_top->ino_buf && > + !skip_crc) { > libxfs_dinode_calc_crc(mp, iocur_top->data); > iocur_top->ino_crc_ok = 1; > } The line of code below this calculates CRCs for dquot buffers, so it seems kind of broken to be skipping crc update for an inode but not a dquot given they are updated in the same way.... Shouldn't this "skip_crc" condition also be applied to dquot buffers, too? Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs