On Wed, May 04, 2016 at 05:43:14PM +0200, Carlos Maiolino wrote: > We need to be able to change the way XFS behaviours in error > conditions depending on the type of underlying storage. This is > necessary for handling non-traditional block devices with extended > error cases, such as thin provisioned devices that can return ENOSPC > as an IO error. > > Introduce the basic sysfs infrastructure needed to define and > configure error behaviours. This is done to be generic enough to > extend to configuring behaviour in other error conditions, such as > ENOMEM, which also has different desired behaviours according to > machine configuration. > > Changelog: > > V3: > - Rebase patch on top of linux-xfs tree > - Remove XFS_ERR_FAIL enums, once we are not using them > to control the fail speed, but base it on max_retries value > - Get rid of xfs_error_cfg.fail_speed field. We will use only > .max_retries to control the failure speed for each error > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> > Signed-off-by: Carlos Maiolino <cmaiolino@xxxxxxxxxx> > --- > fs/xfs/xfs_mount.c | 10 +++++++++- > fs/xfs/xfs_mount.h | 20 ++++++++++++++++++++ > fs/xfs/xfs_sysfs.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++- > fs/xfs/xfs_sysfs.h | 3 +++ > 4 files changed, 84 insertions(+), 2 deletions(-) > ... > diff --git a/fs/xfs/xfs_sysfs.c b/fs/xfs/xfs_sysfs.c > index 6ced4f1..b971113 100644 > --- a/fs/xfs/xfs_sysfs.c > +++ b/fs/xfs/xfs_sysfs.c > @@ -17,10 +17,11 @@ > */ > > #include "xfs.h" > -#include "xfs_sysfs.h" > +#include "xfs_shared.h" > #include "xfs_format.h" > #include "xfs_log_format.h" > #include "xfs_trans_resv.h" > +#include "xfs_sysfs.h" > #include "xfs_log.h" > #include "xfs_log_priv.h" > #include "xfs_stats.h" > @@ -362,3 +363,53 @@ struct kobj_type xfs_log_ktype = { > .sysfs_ops = &xfs_sysfs_ops, > .default_attrs = xfs_log_attrs, > }; > + > +/* > + * Metadata IO error configuration > + * > + * The sysfs structure here is: > + * ...xfs/<dev>/error/<class>/<errno>/<error_attrs> > + * > + * where <class> allows use to discriminate between data IO and metadata IO, Spelling: us Otherwise looks fine: Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx> > + * and any other future type of IO (e.g. special inode or directory error > + * handling) we care to support. > + */ > +static struct attribute *xfs_error_attrs[] = { > + NULL, > +}; > + > +static inline struct xfs_error_cfg * > +to_error_cfg(struct kobject *kobject) > +{ > + struct xfs_kobj *kobj = to_kobj(kobject); > + return container_of(kobj, struct xfs_error_cfg, kobj); > +} > + > +struct kobj_type xfs_error_cfg_ktype = { > + .release = xfs_sysfs_release, > + .sysfs_ops = &xfs_sysfs_ops, > + .default_attrs = xfs_error_attrs, > +}; > + > +struct kobj_type xfs_error_ktype = { > + .release = xfs_sysfs_release, > +}; > + > +int > +xfs_error_sysfs_init( > + struct xfs_mount *mp) > +{ > + int error; > + > + /* .../xfs/<dev>/error/ */ > + error = xfs_sysfs_init(&mp->m_error_kobj, &xfs_error_ktype, > + &mp->m_kobj, "error"); > + return error; > +} > + > +void > +xfs_error_sysfs_del( > + struct xfs_mount *mp) > +{ > + xfs_sysfs_del(&mp->m_error_kobj); > +} > diff --git a/fs/xfs/xfs_sysfs.h b/fs/xfs/xfs_sysfs.h > index be692e5..d046371 100644 > --- a/fs/xfs/xfs_sysfs.h > +++ b/fs/xfs/xfs_sysfs.h > @@ -58,4 +58,7 @@ xfs_sysfs_del( > wait_for_completion(&kobj->complete); > } > > +int xfs_error_sysfs_init(struct xfs_mount *mp); > +void xfs_error_sysfs_del(struct xfs_mount *mp); > + > #endif /* __XFS_SYSFS_H__ */ > -- > 2.4.11 > > _______________________________________________ > xfs mailing list > xfs@xxxxxxxxxxx > http://oss.sgi.com/mailman/listinfo/xfs _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs