From: Carlos Maiolino Date: Wed, 18 May 2016 01:09:28 +0000 (+1000) Subject: xfs: add configuration handlers for specific errors X-Git-Tag: v4.1.12-104.0.20170618_1145~224 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=43b0ffd3cfb2687d83a0686fa967316f11912d7a;p=users%2Fjedix%2Flinux-maple.git xfs: add configuration handlers for specific errors 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 Signed-off-by: Carlos Maiolino Reviewed-by: Brian Foster Signed-off-by: Dave Chinner (cherry picked from commit e0a431b3a3cc3d0a4c38ccfca8c7320fde40efb6) Orabug: 26130728 Signed-off-by: Kirtikar Kashyap Reviewed-by: Jack Vogel --- diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index 90da00b3e1784..ad4ba7898848b 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 604863f60f760..fb2f3069291d2 100644 --- a/fs/xfs/xfs_sysfs.c +++ b/fs/xfs/xfs_sysfs.c @@ -387,9 +387,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 @@ -487,6 +498,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;