]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
xfs: add configuration handlers for specific errors
authorCarlos Maiolino <cmaiolino@redhat.com>
Wed, 18 May 2016 01:09:28 +0000 (11:09 +1000)
committerDave Chinner <david@fromorbit.com>
Wed, 18 May 2016 01:09:28 +0000 (11:09 +1000)
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

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
fs/xfs/xfs_mount.h
fs/xfs/xfs_sysfs.c

index 2fafa9438bcf59172a636057d6ead6e75dafcc6b..72ec3e3c988e7bd408ec8dfafde2f2123c3880f8 100644 (file)
@@ -49,6 +49,9 @@ enum {
 };
 enum {
        XFS_ERR_DEFAULT,
+       XFS_ERR_EIO,
+       XFS_ERR_ENOSPC,
+       XFS_ERR_ENODEV,
        XFS_ERR_ERRNO_MAX,
 };
 
index 918d144febd9eb097b04b442be9eb5bcf7a4db78..084a606840a1c754adfea2582ba5169e181c2f20 100644 (file)
@@ -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;