[PATCH 6/7] xfs: add configuration handlers for specific errors
Carlos Maiolino
cmaiolino at redhat.com
Tue May 10 07:16:20 CDT 2016
now most of the infrastructure is in place, we can start adding
support for configuring specific errors such as ENODEV, ENOSPC, EIO,
etc. Add these error configurations and configure them all to have
appropriate behaviours. That is, all will be configured to retry forever by
default, except for ENODEV, which is an unrecoverable error, so it will be
configured to not retry on error
Changelog:
V3:
- Do not implement .fail_speed and .fail_at_unmount
- .fail_at_unmount will be implemented in a different patch
V4:
- ENODEV should fail immediately by default
- Use XFS_ERR_RETRY_FOREVER flag, instead of -1 directly
Signed-off-by: Dave Chinner <dchinner at redhat.com>
Signed-off-by: Carlos Maiolino <cmaiolino at redhat.com>
---
fs/xfs/xfs_mount.h | 3 +++
fs/xfs/xfs_sysfs.c | 22 +++++++++++++++++++++-
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
index 2fafa94..72ec3e3 100644
--- a/fs/xfs/xfs_mount.h
+++ b/fs/xfs/xfs_mount.h
@@ -49,6 +49,9 @@ enum {
};
enum {
XFS_ERR_DEFAULT,
+ XFS_ERR_EIO,
+ XFS_ERR_ENOSPC,
+ XFS_ERR_ENODEV,
XFS_ERR_ERRNO_MAX,
};
diff --git a/fs/xfs/xfs_sysfs.c b/fs/xfs/xfs_sysfs.c
index 918d144..084a606 100644
--- a/fs/xfs/xfs_sysfs.c
+++ b/fs/xfs/xfs_sysfs.c
@@ -478,9 +478,20 @@ struct xfs_error_init {
static const struct xfs_error_init xfs_error_meta_init[XFS_ERR_ERRNO_MAX] = {
{ .name = "default",
- .max_retries = -1,
+ .max_retries = XFS_ERR_RETRY_FOREVER,
.retry_timeout = 0,
},
+ { .name = "EIO",
+ .max_retries = XFS_ERR_RETRY_FOREVER,
+ .retry_timeout = 0,
+ },
+ { .name = "ENOSPC",
+ .max_retries = XFS_ERR_RETRY_FOREVER,
+ .retry_timeout = 0,
+ },
+ { .name = "ENODEV",
+ .max_retries = 0,
+ },
};
static int
@@ -578,6 +589,15 @@ xfs_error_get_cfg(
struct xfs_error_cfg *cfg;
switch (error) {
+ case EIO:
+ cfg = &mp->m_error_cfg[error_class][XFS_ERR_EIO];
+ break;
+ case ENOSPC:
+ cfg = &mp->m_error_cfg[error_class][XFS_ERR_ENOSPC];
+ break;
+ case ENODEV:
+ cfg = &mp->m_error_cfg[error_class][XFS_ERR_ENODEV];
+ break;
default:
cfg = &mp->m_error_cfg[error_class][XFS_ERR_DEFAULT];
break;
--
2.4.11
More information about the xfs
mailing list