xfs_db: make write/fuzz -c and -d work on non-crc filesystems
PATCH 1/1 xfs_db: make write/fuzz -c and -d work on non-crc filesystems
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.
--- db/fuzz.c | 8 ++++++-- db/write.c | 7 +++++-- 2 files changed, 11 insertions(+), 4 deletions(-)
db/fuzz.c +6 -2
@@ -125,7 +125,9 @@ fuzz_f(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 ; }
@@ -149,7 +151,9 @@ fuzz_f( 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 ) {
db/write.c +5 -2
@@ -138,7 +138,8 @@ write_f( }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 ; }
@@ -162,7 +163,9 @@ write_f( 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 ) {
Quoted 6 lines · Darrick J. Wong
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 <[email protected]>
Quoted 57 lines
--- db/fuzz.c | 8 ++++++-- db/write.c | 7 +++++-- 2 files changed, 11 insertions(+), 4 deletions(-)db/fuzz.c +6
-2@@ -125,7 +125,9 @@ fuzz_f(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 ; }@@ -149,7 +151,9 @@ fuzz_f( 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 ) {db/write.c +5
-2@@ -138,7 +138,8 @@ write_f( }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 ; }@@ -162,7 +163,9 @@ write_f( 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 ) {
Quoted 6 lines · Darrick J. Wong
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 <[email protected]>
Quoted 60 lines
--- db/fuzz.c | 8 ++++++-- db/write.c | 7 +++++-- 2 files changed, 11 insertions(+), 4 deletions(-)db/fuzz.c +6
-2@@ -125,7 +125,9 @@ fuzz_f(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 ; }@@ -149,7 +151,9 @@ fuzz_f( 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 ) {db/write.c +5
-3@@ -138,7 +138,8 @@ write_f( }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 ; }@@ -162,7 +163,9 @@ write_f( 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 ) { --To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Signature · 1 line
Carlos