[PATCH] xfs_db: allow write -d to dqblks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Allow write -d to write bad data and recalculate CRC
for dqblks.

Inspired-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>
Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
---

diff --git a/db/io.c b/db/io.c
index 67ed5f9..9918a51 100644
--- a/db/io.c
+++ b/db/io.c
@@ -476,6 +476,17 @@ xfs_verify_recalc_inode_crc(
 }
 
 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)
 {
diff --git a/db/io.h b/db/io.h
index 12d96c2..b415b82 100644
--- a/db/io.h
+++ b/db/io.h
@@ -65,6 +65,7 @@ extern void     ring_add(void);
 extern void	set_iocur_type(const struct typ *t);
 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);
 
 /*
diff --git a/db/write.c b/db/write.c
index 70c9865..d24ea05 100644
--- a/db/write.c
+++ b/db/write.c
@@ -139,7 +139,8 @@ write_f(
 
 	if (invalid_data &&
 	    iocur_top->typ->crc_off == TYP_F_NO_CRC_OFF &&
-	    !iocur_top->ino_buf) {
+	    !iocur_top->ino_buf &&
+	    !iocur_top->dquot_buf) {
 		dbprintf(_("Cannot recalculate CRCs on this type of object\n"));
 		return 0;
 	}
@@ -169,6 +170,9 @@ write_f(
 	} 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 { /* invalid data */
 		local_ops.verify_write = xfs_verify_recalc_crc;
 		dbprintf(_("Allowing write of corrupted data with good CRC\n"));

--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux