diff options
author | Eric Sandeen <sandeen@redhat.com> | 2016-07-20 10:48:51 +1000 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2016-07-20 10:48:51 +1000 |
commit | e97f6c545f963abd7de56a58a29ba73a9edee015 (patch) | |
tree | bce2c2af291173af1894a1fbbe22892de51d6e03 /fs/xfs/xfs_sysfs.c | |
parent | 1a695a905c18548062509178b98bc91e67510864 (diff) | |
download | lwn-e97f6c545f963abd7de56a58a29ba73a9edee015.tar.gz lwn-e97f6c545f963abd7de56a58a29ba73a9edee015.zip |
xfs: fix xfs_error_get_cfg for negative errnos
xfs_error_get_cfg() is called with bp->b_error as an arg, which is
negative, so the switch statement won't ever find any matches.
This results in only the default error handler having any effect, as
EIO/ENOSPC/ENODEV get ignored due to the wrong sign.
It seems simplest to always flip the error sign to positive, so that
we can handle either negative errors in bp->b_error, or possibly a
positive errno via something like xfs_error_get_cfg(EIO) - this
future-proofs the function.
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
Diffstat (limited to 'fs/xfs/xfs_sysfs.c')
-rw-r--r-- | fs/xfs/xfs_sysfs.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/xfs/xfs_sysfs.c b/fs/xfs/xfs_sysfs.c index 4c2c55086208..79cfd3fc5324 100644 --- a/fs/xfs/xfs_sysfs.c +++ b/fs/xfs/xfs_sysfs.c @@ -634,6 +634,9 @@ xfs_error_get_cfg( { struct xfs_error_cfg *cfg; + if (error < 0) + error = -error; + switch (error) { case EIO: cfg = &mp->m_error_cfg[error_class][XFS_ERR_EIO]; |