For a non-crc filesystem, make write/fuzz -c and -d work properly
instead of bailing out. Since there's no checksum to update, both
cases collapse to setting the field value without calling the write
verifier.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
return 0;
}
- if (invalid_data && iocur_top->typ->crc_off == TYP_F_NO_CRC_OFF) {
+ if (invalid_data &&
+ iocur_top->typ->crc_off == TYP_F_NO_CRC_OFF &&
+ xfs_sb_version_hascrc(&mp->m_sb)) {
dbprintf(_("Cannot recalculate CRCs on this type of object\n"));
return 0;
}
local_ops.verify_read = stashed_ops->verify_read;
iocur_top->bp->b_ops = &local_ops;
- if (corrupt) {
+ if (!xfs_sb_version_hascrc(&mp->m_sb)) {
+ local_ops.verify_write = xfs_dummy_verify;
+ } else if (corrupt) {
local_ops.verify_write = xfs_dummy_verify;
dbprintf(_("Allowing fuzz of corrupted data and bad CRC\n"));
} else if (iocur_top->typ->crc_off == TYP_F_CRC_FUNC) {
}
if (invalid_data &&
- iocur_top->typ->crc_off == TYP_F_NO_CRC_OFF) {
+ iocur_top->typ->crc_off == TYP_F_NO_CRC_OFF &&
+ xfs_sb_version_hascrc(&mp->m_sb)) {
dbprintf(_("Cannot recalculate CRCs on this type of object\n"));
return 0;
}
local_ops.verify_read = stashed_ops->verify_read;
iocur_top->bp->b_ops = &local_ops;
- if (corrupt) {
+ if (!xfs_sb_version_hascrc(&mp->m_sb)) {
+ local_ops.verify_write = xfs_dummy_verify;
+ } else if (corrupt) {
local_ops.verify_write = xfs_dummy_verify;
dbprintf(_("Allowing write of corrupted data and bad CRC\n"));
} else if (iocur_top->typ->crc_off == TYP_F_CRC_FUNC) {