xfs
[Top] [All Lists]

[PATCH 7/9] xfs: add configuration handles for specific errors

To: xfs@xxxxxxxxxxx
Subject: [PATCH 7/9] xfs: add configuration handles for specific errors
From: Dave Chinner <david@xxxxxxxxxxxxx>
Date: Fri, 5 Feb 2016 12:23:25 +1100
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1454635407-22276-1-git-send-email-david@xxxxxxxxxxxxx>
References: <1454635407-22276-1-git-send-email-david@xxxxxxxxxxxxx>
From: Dave Chinner <dchinner@xxxxxxxxxx>

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 use the "fail never, fail
at unmount" default except for ENODEV, which is an unrecoverable
error so it will be configured as a "fail fast" error.

Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
---
 fs/xfs/xfs_mount.h |  3 +++
 fs/xfs/xfs_sysfs.c | 24 ++++++++++++++++++++++++
 2 files changed, 27 insertions(+)

diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
index edeb0b6..c05b500 100644
--- a/fs/xfs/xfs_mount.h
+++ b/fs/xfs/xfs_mount.h
@@ -50,6 +50,9 @@ enum {
 };
 enum {
        XFS_ERR_DEFAULT,
+       XFS_ERR_EIO,
+       XFS_ERR_ENOSPC,
+       XFS_ERR_ENODEV,
        XFS_ERR_ERRNO_MAX,
 };
 enum {
diff --git a/fs/xfs/xfs_sysfs.c b/fs/xfs/xfs_sysfs.c
index a5b040a..d48dc46 100644
--- a/fs/xfs/xfs_sysfs.c
+++ b/fs/xfs/xfs_sysfs.c
@@ -507,6 +507,21 @@ static const struct xfs_error_init 
xfs_error_meta_init[XFS_ERR_ERRNO_MAX] = {
          .retry_timeout = 0,
          .fail_at_unmount = true,
        },
+       { .name = "EIO",
+         .fail_speed = XFS_ERR_FAIL_NEVER,
+         .max_retries = INT_MAX,
+         .retry_timeout = 0,
+         .fail_at_unmount = true,
+       },
+       { .name = "ENOSPC",
+         .fail_speed = XFS_ERR_FAIL_NEVER,
+         .max_retries = INT_MAX,
+         .retry_timeout = 0,
+         .fail_at_unmount = true,
+       },
+       { .name = "ENODEV",
+         .fail_speed = XFS_ERR_FAIL_FAST,
+       },
 };
 
 static int
@@ -606,6 +621,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.5.0

<Prev in Thread] Current Thread [Next in Thread>