]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_db: use TYP_F_CRC_FUNC for inodes & dquots
authorEric Sandeen <sandeen@redhat.com>
Fri, 4 Aug 2017 21:33:52 +0000 (16:33 -0500)
committerEric Sandeen <sandeen@redhat.com>
Fri, 4 Aug 2017 21:33:52 +0000 (16:33 -0500)
Now that typ_t has a ->set_crc method, use it for inodes & dquots
as well, rather than recognizing them as special types and calling
their crc functions directly by name.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
db/dquot.c
db/dquot.h
db/fuzz.c
db/inode.c
db/inode.h
db/io.c
db/io.h
db/type.c
db/write.c

index 061eca5dfdf7e870203284957f832103d444bed3..4e35df42b8d98bead376c94314fc338c1fd357ff 100644 (file)
@@ -170,6 +170,17 @@ dquot_f(
        return 0;
 }
 
+void
+xfs_dquot_set_crc(
+       struct xfs_buf *bp)
+{
+       ASSERT((iocur_top->dquot_buf));
+       ASSERT(iocur_top->bp == bp);
+
+       xfs_update_cksum(iocur_top->data, sizeof(struct xfs_dqblk),
+                        XFS_DQUOT_CRC_OFF);
+}
+
 void
 dquot_init(void)
 {
index 83a51189c9b917da6d744c0482c00449585f7d8d..12a724468980f78c31a879c16b1b834a6021b458 100644 (file)
@@ -20,4 +20,5 @@ extern const struct field     disk_dquot_flds[];
 extern const struct field      dqblk_flds[];
 extern const struct field      dqblk_hfld[];
 
+extern void    xfs_dquot_set_crc(struct xfs_buf *);
 extern void    dquot_init(void);
index e1c2045a4603aeb66dfd833cc5b062c7d26da43e..a9b1577030b270dae9f1e3a3041acd41f0e56424 100644 (file)
--- a/db/fuzz.c
+++ b/db/fuzz.c
@@ -125,8 +125,7 @@ fuzz_f(
                return 0;
        }
 
-       if (invalid_data && iocur_top->typ->crc_off == TYP_F_NO_CRC_OFF &&
-                       !iocur_top->ino_buf && !iocur_top->dquot_buf) {
+       if (invalid_data && iocur_top->typ->crc_off == TYP_F_NO_CRC_OFF) {
                dbprintf(_("Cannot recalculate CRCs on this type of object\n"));
                return 0;
        }
@@ -153,12 +152,6 @@ fuzz_f(
        if (corrupt) {
                local_ops.verify_write = xfs_dummy_verify;
                dbprintf(_("Allowing fuzz of corrupted data and bad CRC\n"));
-       } else if (iocur_top->ino_buf) {
-               local_ops.verify_write = xfs_verify_recalc_inode_crc;
-               dbprintf(_("Allowing fuzz of corrupted inode with good CRC\n"));
-       } else if (iocur_top->dquot_buf) {
-               local_ops.verify_write = xfs_verify_recalc_dquot_crc;
-               dbprintf(_("Allowing fuzz of corrupted dquot with good CRC\n"));
        } else if (iocur_top->typ->crc_off == TYP_F_CRC_FUNC) {
                local_ops.verify_write = iocur_top->typ->set_crc;
                dbprintf(_("Allowing fuzz of corrupted data with good CRC\n"));
index 6cc47d6a7f18b2543a447df57659e8b5940f12d5..6f971c63aaeb07d921fcf6801fc352546f6b0750 100644 (file)
@@ -711,3 +711,14 @@ _("Metadata CRC error detected for ino %lld\n"),
        /* track updated info in ring */
        ring_add();
 }
+
+void
+xfs_inode_set_crc(
+       struct xfs_buf *bp)
+{
+       ASSERT(iocur_top->ino_buf);
+       ASSERT(iocur_top->bp == bp);
+
+       libxfs_dinode_calc_crc(mp, iocur_top->data);
+       iocur_top->ino_crc_ok = 1;
+}
index 1624f1d58de83f40b71d792d9f5f25764f7b8e39..d79b0a4c7c5e064a169de8d8fbeb8c9df507aea0 100644 (file)
@@ -33,4 +33,5 @@ extern void   inode_init(void);
 extern typnm_t inode_next_type(void);
 extern int     inode_size(void *obj, int startoff, int idx);
 extern int     inode_u_size(void *obj, int startoff, int idx);
+extern void    xfs_inode_set_crc(struct xfs_buf *);
 extern void    set_cur_inode(xfs_ino_t ino);
diff --git a/db/io.c b/db/io.c
index fd9b9f4b0d5964c56cc4428b68b5a9d485ba32d0..2716255103328f3ec78795ad7a2f2f3fcbcccf6c 100644 (file)
--- a/db/io.c
+++ b/db/io.c
@@ -22,6 +22,7 @@
 #include "faddr.h"
 #include "fprint.h"
 #include "field.h"
+#include "dquot.h"
 #include "inode.h"
 #include "io.h"
 #include "output.h"
@@ -465,28 +466,6 @@ xfs_dummy_verify(
        return;
 }
 
-void
-xfs_verify_recalc_inode_crc(
-       struct xfs_buf *bp)
-{
-       ASSERT(iocur_top->ino_buf);
-       ASSERT(iocur_top->bp == bp);
-
-       libxfs_dinode_calc_crc(mp, iocur_top->data);
-       iocur_top->ino_crc_ok = 1;
-}
-
-void
-xfs_verify_recalc_dquot_crc(
-       struct xfs_buf *bp)
-{
-       ASSERT((iocur_top->dquot_buf));
-       ASSERT(iocur_top->bp == bp);
-
-       xfs_update_cksum(iocur_top->data, sizeof(struct xfs_dqblk),
-                        XFS_DQUOT_CRC_OFF);
-}
-
 void
 xfs_verify_recalc_crc(
        struct xfs_buf *bp)
@@ -510,14 +489,10 @@ write_cur(void)
                skip_crc = true;
 
        if (!skip_crc) {
-               if (iocur_top->ino_buf) {
-                       libxfs_dinode_calc_crc(mp, iocur_top->data);
-                       iocur_top->ino_crc_ok = 1;
-               } else if (iocur_top->dquot_buf) {
-                       xfs_update_cksum(iocur_top->data,
-                                        sizeof(struct xfs_dqblk),
-                                        XFS_DQUOT_CRC_OFF);
-               }
+               if (iocur_top->ino_buf)
+                       xfs_inode_set_crc(iocur_top->bp);
+               else if (iocur_top->dquot_buf)
+                       xfs_dquot_set_crc(iocur_top->bp);
        }
        if (iocur_top->bbmap)
                write_cur_bbs();
diff --git a/db/io.h b/db/io.h
index df0fdd758f9ecba31f87103ef7dbd46a21b620a0..374dd84bd1f8ac55813cfb07b7ad7f241b36edfe 100644 (file)
--- a/db/io.h
+++ b/db/io.h
@@ -64,8 +64,6 @@ extern void   set_cur(const struct typ *type, xfs_daddr_t blknum,
 extern void     ring_add(void);
 extern void    set_iocur_type(const struct typ *type);
 extern void    xfs_dummy_verify(struct xfs_buf *bp);
-extern void    xfs_verify_recalc_inode_crc(struct xfs_buf *bp);
-extern void    xfs_verify_recalc_dquot_crc(struct xfs_buf *bp);
 extern void    xfs_verify_recalc_crc(struct xfs_buf *bp);
 
 /*
index 740adc01423eb1b1f40426db98e688c6c4ef1473..0c1ed37c3b46c4fa866bf3916849474f594ac450 100644 (file)
--- a/db/type.c
+++ b/db/type.c
@@ -105,12 +105,12 @@ static const typ_t        __typtab_crc[] = {
        { TYP_DIR2, "dir3", handle_struct, dir3_hfld,
                &xfs_dir3_db_buf_ops, TYP_F_CRC_FUNC, xfs_dir3_set_crc },
        { TYP_DQBLK, "dqblk", handle_struct, dqblk_hfld,
-               &xfs_dquot_buf_ops, TYP_F_NO_CRC_OFF },
+               &xfs_dquot_buf_ops, TYP_F_CRC_FUNC, xfs_dquot_set_crc },
        { TYP_INOBT, "inobt", handle_struct, inobt_crc_hfld,
                &xfs_inobt_buf_ops, XFS_BTREE_SBLOCK_CRC_OFF },
        { TYP_INODATA, "inodata", NULL, NULL, NULL, TYP_F_NO_CRC_OFF },
        { TYP_INODE, "inode", handle_struct, inode_crc_hfld,
-               &xfs_inode_buf_ops, TYP_F_NO_CRC_OFF },
+               &xfs_inode_buf_ops, TYP_F_CRC_FUNC, xfs_inode_set_crc },
        { TYP_LOG, "log", NULL, NULL, NULL, TYP_F_NO_CRC_OFF },
        { TYP_RTBITMAP, "rtbitmap", NULL, NULL, NULL, TYP_F_NO_CRC_OFF },
        { TYP_RTSUMMARY, "rtsummary", NULL, NULL, NULL, TYP_F_NO_CRC_OFF },
@@ -149,12 +149,12 @@ static const typ_t        __typtab_spcrc[] = {
        { TYP_DIR2, "dir3", handle_struct, dir3_hfld,
                &xfs_dir3_db_buf_ops, TYP_F_CRC_FUNC, xfs_dir3_set_crc },
        { TYP_DQBLK, "dqblk", handle_struct, dqblk_hfld,
-               &xfs_dquot_buf_ops, TYP_F_NO_CRC_OFF },
+               &xfs_dquot_buf_ops, TYP_F_CRC_FUNC, xfs_dquot_set_crc },
        { TYP_INOBT, "inobt", handle_struct, inobt_spcrc_hfld,
                &xfs_inobt_buf_ops, XFS_BTREE_SBLOCK_CRC_OFF },
        { TYP_INODATA, "inodata", NULL, NULL, NULL, TYP_F_NO_CRC_OFF },
        { TYP_INODE, "inode", handle_struct, inode_crc_hfld,
-               &xfs_inode_buf_ops, TYP_F_NO_CRC_OFF },
+               &xfs_inode_buf_ops, TYP_F_CRC_FUNC, xfs_inode_set_crc },
        { TYP_LOG, "log", NULL, NULL, NULL, TYP_F_NO_CRC_OFF },
        { TYP_RTBITMAP, "rtbitmap", NULL, NULL, NULL, TYP_F_NO_CRC_OFF },
        { TYP_RTSUMMARY, "rtsummary", NULL, NULL, NULL, TYP_F_NO_CRC_OFF },
index 266bde470a9de7786ddcd1e7cfbf1f1357960cd6..9fc6d8eea58b3ef458809a399c6f5e1e450aa68e 100644 (file)
@@ -138,9 +138,7 @@ write_f(
        }
 
        if (invalid_data &&
-           iocur_top->typ->crc_off == TYP_F_NO_CRC_OFF &&
-           !iocur_top->ino_buf &&
-           !iocur_top->dquot_buf) {
+           iocur_top->typ->crc_off == TYP_F_NO_CRC_OFF) {
                dbprintf(_("Cannot recalculate CRCs on this type of object\n"));
                return 0;
        }
@@ -167,12 +165,6 @@ write_f(
        if (corrupt) {
                local_ops.verify_write = xfs_dummy_verify;
                dbprintf(_("Allowing write of corrupted data and bad CRC\n"));
-       } else if (iocur_top->ino_buf) {
-               local_ops.verify_write = xfs_verify_recalc_inode_crc;
-               dbprintf(_("Allowing write of corrupted inode with good CRC\n"));
-       } else if (iocur_top->dquot_buf) {
-               local_ops.verify_write = xfs_verify_recalc_dquot_crc;
-               dbprintf(_("Allowing write of corrupted dquot with good CRC\n"));
        } else if (iocur_top->typ->crc_off == TYP_F_CRC_FUNC) {
                local_ops.verify_write = iocur_top->typ->set_crc;
                dbprintf(_("Allowing write of corrupted data with good CRC\n"));