-+ * readahead errors are silent and simply leave the buffer as !done so a real
-+ * read will then be run with the xfs_dquot_buf_ops verifier. See
-+ * xfs_inode_buf_verify() for why we use EIO and ~XBF_DONE here rather than
-+ * reporting the failure.
-+ */
-+static void
-+xfs_dquot_buf_readahead_verify(
-+ struct xfs_buf *bp)
-+{
-+ struct xfs_mount *mp = bp->b_target->bt_mount;
-+
-+ if (!xfs_dquot_buf_verify_crc(mp, bp) ||
-+ !xfs_dquot_buf_verify(mp, bp, 0)) {
-+ xfs_buf_ioerror(bp, -EIO);
-+ bp->b_flags &= ~XBF_DONE;
-+ }
-+}
-+
-+/*
- * we don't calculate the CRC here as that is done when the dquot is flushed to
- * the buffer after the update is done. This ensures that the dquot in the
- * buffer always has an up-to-date CRC value.
-@@ -274,7 +293,7 @@ xfs_dquot_buf_write_verify(
- {
- struct xfs_mount *mp = bp->b_target->bt_mount;
-
-- if (!xfs_dquot_buf_verify(mp, bp)) {
-+ if (!xfs_dquot_buf_verify(mp, bp, XFS_QMOPT_DOWARN)) {
- xfs_buf_ioerror(bp, -EFSCORRUPTED);
- xfs_verifier_error(bp);
- return;
-@@ -287,3 +306,8 @@ const struct xfs_buf_ops xfs_dquot_buf_ops = {
- .verify_write = xfs_dquot_buf_write_verify,
- };
-
-+const struct xfs_buf_ops xfs_dquot_buf_ra_ops = {
-+
-+ .verify_read = xfs_dquot_buf_readahead_verify,
-+ .verify_write = xfs_dquot_buf_write_verify,
-+};
-diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
-index ff17c48..1aabfda 100644
---- a/fs/xfs/libxfs/xfs_inode_buf.c
-+++ b/fs/xfs/libxfs/xfs_inode_buf.c
-@@ -68,6 +68,8 @@ xfs_inobp_check(
- * recovery and we don't get unnecssary panics on debug kernels. We use EIO here
- * because all we want to do is say readahead failed; there is no-one to report
- * the error to, so this will distinguish it from a non-ra verifier failure.
-+ * Changes to this readahead error behavour also need to be reflected in
-+ * xfs_dquot_buf_readahead_verify().
- */
- static void
- xfs_inode_buf_verify(
-diff --git a/fs/xfs/libxfs/xfs_quota_defs.h b/fs/xfs/libxfs/xfs_quota_defs.h
-index 1b0a083..f51078f 100644
---- a/fs/xfs/libxfs/xfs_quota_defs.h
-+++ b/fs/xfs/libxfs/xfs_quota_defs.h
-@@ -153,7 +153,7 @@ typedef __uint16_t xfs_qwarncnt_t;
- #define XFS_QMOPT_RESBLK_MASK (XFS_QMOPT_RES_REGBLKS | XFS_QMOPT_RES_RTBLKS)
-
- extern int xfs_dqcheck(struct xfs_mount *mp, xfs_disk_dquot_t *ddq,
-- xfs_dqid_t id, uint type, uint flags, char *str);
-+ xfs_dqid_t id, uint type, uint flags, const char *str);
- extern int xfs_calc_dquots_per_chunk(unsigned int nbblks);
-
- #endif /* __XFS_QUOTA_H__ */
-diff --git a/fs/xfs/libxfs/xfs_shared.h b/fs/xfs/libxfs/xfs_shared.h
-index 5be5297..15c3ceb 100644
---- a/fs/xfs/libxfs/xfs_shared.h
-+++ b/fs/xfs/libxfs/xfs_shared.h
-@@ -49,6 +49,7 @@ extern const struct xfs_buf_ops xfs_inobt_buf_ops;
- extern const struct xfs_buf_ops xfs_inode_buf_ops;
- extern const struct xfs_buf_ops xfs_inode_buf_ra_ops;
- extern const struct xfs_buf_ops xfs_dquot_buf_ops;
-+extern const struct xfs_buf_ops xfs_dquot_buf_ra_ops;
- extern const struct xfs_buf_ops xfs_sb_buf_ops;
- extern const struct xfs_buf_ops xfs_sb_quiet_buf_ops;
- extern const struct xfs_buf_ops xfs_symlink_buf_ops;
-diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
-index c5ecaac..5991cdc 100644
---- a/fs/xfs/xfs_log_recover.c
-+++ b/fs/xfs/xfs_log_recover.c
-@@ -3204,6 +3204,7 @@ xlog_recover_dquot_ra_pass2(
- struct xfs_disk_dquot *recddq;
- struct xfs_dq_logformat *dq_f;
- uint type;
-+ int len;
-