Home Home > GIT Browse > SLE15
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Iliopoulos <ailiopoulos@suse.com>2019-05-18 01:23:52 +0200
committerAnthony Iliopoulos <ailiopoulos@suse.com>2019-05-18 01:23:52 +0200
commit71829d5e5c30ac797b6f070a960029a637bbd4cd (patch)
tree858835a696c8a1e46064f3dbf056d12f6033c0e4
parent7756cd38e8b5ef9d9a328d39693f6c8bb7683cbb (diff)
xfs: replace log_badcrc_factor knob with error injection tag
(bsc#1114427).
-rw-r--r--patches.fixes/xfs-replace-log_badcrc_factor-knob-with-error-inject.patch158
-rw-r--r--series.conf1
2 files changed, 159 insertions, 0 deletions
diff --git a/patches.fixes/xfs-replace-log_badcrc_factor-knob-with-error-inject.patch b/patches.fixes/xfs-replace-log_badcrc_factor-knob-with-error-inject.patch
new file mode 100644
index 0000000000..197d0a8b87
--- /dev/null
+++ b/patches.fixes/xfs-replace-log_badcrc_factor-knob-with-error-inject.patch
@@ -0,0 +1,158 @@
+From 3e88a0078ba8ef61816c85d33131827b4a307852 Mon Sep 17 00:00:00 2001
+From: Brian Foster <bfoster@redhat.com>
+Date: Tue, 27 Jun 2017 09:52:32 -0700
+Subject: [PATCH] xfs: replace log_badcrc_factor knob with error injection tag
+Git-commit: 3e88a0078ba8ef61816c85d33131827b4a307852
+Patch-mainline: v4.13-rc1
+References: bsc#1114427
+
+Now that error injection tags support dynamic frequency adjustment,
+replace the debug mode sysfs knob that controls log record CRC error
+injection with an error injection tag.
+
+Signed-off-by: Brian Foster <bfoster@redhat.com>
+Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
+Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
+Acked-by: Anthony Iliopoulos <ailiopoulos@suse.com>
+
+---
+ fs/xfs/xfs_error.c | 3 +++
+ fs/xfs/xfs_error.h | 4 +++-
+ fs/xfs/xfs_log.c | 5 +----
+ fs/xfs/xfs_sysfs.c | 36 ------------------------------------
+ 4 files changed, 7 insertions(+), 41 deletions(-)
+
+diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c
+index a2f23d2bab16..26c32bc5cd34 100644
+--- a/fs/xfs/xfs_error.c
++++ b/fs/xfs/xfs_error.c
+@@ -56,6 +56,7 @@ static unsigned int xfs_errortag_random_default[] = {
+ XFS_RANDOM_BMAP_FINISH_ONE,
+ XFS_RANDOM_AG_RESV_CRITICAL,
+ XFS_RANDOM_DROP_WRITES,
++ XFS_RANDOM_LOG_BAD_CRC,
+ };
+
+ struct xfs_errortag_attr {
+@@ -159,6 +160,7 @@ XFS_ERRORTAG_ATTR_RW(refcount_finish_one, XFS_ERRTAG_REFCOUNT_FINISH_ONE);
+ XFS_ERRORTAG_ATTR_RW(bmap_finish_one, XFS_ERRTAG_BMAP_FINISH_ONE);
+ XFS_ERRORTAG_ATTR_RW(ag_resv_critical, XFS_ERRTAG_AG_RESV_CRITICAL);
+ XFS_ERRORTAG_ATTR_RW(drop_writes, XFS_ERRTAG_DROP_WRITES);
++XFS_ERRORTAG_ATTR_RW(log_bad_crc, XFS_ERRTAG_LOG_BAD_CRC);
+
+ static struct attribute *xfs_errortag_attrs[] = {
+ XFS_ERRORTAG_ATTR_LIST(noerror),
+@@ -190,6 +192,7 @@ static struct attribute *xfs_errortag_attrs[] = {
+ XFS_ERRORTAG_ATTR_LIST(bmap_finish_one),
+ XFS_ERRORTAG_ATTR_LIST(ag_resv_critical),
+ XFS_ERRORTAG_ATTR_LIST(drop_writes),
++ XFS_ERRORTAG_ATTR_LIST(log_bad_crc),
+ NULL,
+ };
+
+diff --git a/fs/xfs/xfs_error.h b/fs/xfs/xfs_error.h
+index e0e4cf776fac..7577be5f09bc 100644
+--- a/fs/xfs/xfs_error.h
++++ b/fs/xfs/xfs_error.h
+@@ -105,7 +105,8 @@ extern void xfs_verifier_error(struct xfs_buf *bp);
+ * handling sequence.
+ */
+ #define XFS_ERRTAG_DROP_WRITES 28
+-#define XFS_ERRTAG_MAX 29
++#define XFS_ERRTAG_LOG_BAD_CRC 29
++#define XFS_ERRTAG_MAX 30
+
+ /*
+ * Random factors for above tags, 1 means always, 2 means 1/2 time, etc.
+@@ -139,6 +140,7 @@ extern void xfs_verifier_error(struct xfs_buf *bp);
+ #define XFS_RANDOM_BMAP_FINISH_ONE 1
+ #define XFS_RANDOM_AG_RESV_CRITICAL 4
+ #define XFS_RANDOM_DROP_WRITES 1
++#define XFS_RANDOM_LOG_BAD_CRC 1
+
+ #ifdef DEBUG
+ extern int xfs_errortag_init(struct xfs_mount *mp);
+diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
+index 2d1112ee1f86..31f11be42f01 100644
+--- a/fs/xfs/xfs_log.c
++++ b/fs/xfs/xfs_log.c
+@@ -1841,7 +1841,6 @@ xlog_sync(
+ /* calculcate the checksum */
+ iclog->ic_header.h_crc = xlog_cksum(log, &iclog->ic_header,
+ iclog->ic_datap, size);
+-#ifdef DEBUG
+ /*
+ * Intentionally corrupt the log record CRC based on the error injection
+ * frequency, if defined. This facilitates testing log recovery in the
+@@ -1849,15 +1848,13 @@ xlog_sync(
+ * write on I/O completion and shutdown the fs. The subsequent mount
+ * detects the bad CRC and attempts to recover.
+ */
+- if (log->l_badcrc_factor &&
+- (prandom_u32() % log->l_badcrc_factor == 0)) {
++ if (XFS_TEST_ERROR(false, log->l_mp, XFS_ERRTAG_LOG_BAD_CRC)) {
+ iclog->ic_header.h_crc &= cpu_to_le32(0xAAAAAAAA);
+ iclog->ic_state |= XLOG_STATE_IOABORT;
+ xfs_warn(log->l_mp,
+ "Intentionally corrupted log record at LSN 0x%llx. Shutdown imminent.",
+ be64_to_cpu(iclog->ic_header.h_lsn));
+ }
+-#endif
+
+ bp->b_io_length = BTOBB(count);
+ bp->b_fspriv = iclog;
+diff --git a/fs/xfs/xfs_sysfs.c b/fs/xfs/xfs_sysfs.c
+index 56610a973593..8b2ccc234f36 100644
+--- a/fs/xfs/xfs_sysfs.c
++++ b/fs/xfs/xfs_sysfs.c
+@@ -305,47 +305,11 @@ write_grant_head_show(
+ }
+ XFS_SYSFS_ATTR_RO(write_grant_head);
+
+-#ifdef DEBUG
+-STATIC ssize_t
+-log_badcrc_factor_store(
+- struct kobject *kobject,
+- const char *buf,
+- size_t count)
+-{
+- struct xlog *log = to_xlog(kobject);
+- int ret;
+- uint32_t val;
+-
+- ret = kstrtouint(buf, 0, &val);
+- if (ret)
+- return ret;
+-
+- log->l_badcrc_factor = val;
+-
+- return count;
+-}
+-
+-STATIC ssize_t
+-log_badcrc_factor_show(
+- struct kobject *kobject,
+- char *buf)
+-{
+- struct xlog *log = to_xlog(kobject);
+-
+- return snprintf(buf, PAGE_SIZE, "%d\n", log->l_badcrc_factor);
+-}
+-
+-XFS_SYSFS_ATTR_RW(log_badcrc_factor);
+-#endif /* DEBUG */
+-
+ static struct attribute *xfs_log_attrs[] = {
+ ATTR_LIST(log_head_lsn),
+ ATTR_LIST(log_tail_lsn),
+ ATTR_LIST(reserve_grant_head),
+ ATTR_LIST(write_grant_head),
+-#ifdef DEBUG
+- ATTR_LIST(log_badcrc_factor),
+-#endif
+ NULL,
+ };
+
+--
+2.16.4
+
diff --git a/series.conf b/series.conf
index d8e099dd7b..c972090291 100644
--- a/series.conf
+++ b/series.conf
@@ -3569,6 +3569,7 @@
patches.fixes/xfs-expose-errortag-knobs-via-sysfs.patch
patches.fixes/xfs-remove-unneeded-parameter-from-XFS_TEST_ERROR.patch
patches.fixes/xfs-convert-drop_writes-to-use-the-errortag-mechanis.patch
+ patches.fixes/xfs-replace-log_badcrc_factor-knob-with-error-inject.patch
patches.fixes/xfs-rewrite-xfs_dq_get_next_id-using-xfs_iext_lookup.patch
patches.fixes/vfs-Add-page_cache_seek_hole_data-helper.patch
patches.fixes/vfs-Add-iomap_seek_hole-and-iomap_seek_data-helpers.patch