xfs: contain more sysfs code in xfs_sysfs.c

Extend the error sysfs initialization helper to include the neighbouring
attributes as well.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
This commit is contained in:
Christoph Hellwig 2025-01-21 06:30:27 +01:00
parent 5443041b9c
commit 243f40d0c7
3 changed files with 37 additions and 34 deletions

View File

@ -765,27 +765,15 @@ xfs_mountfs(
/* enable fail_at_unmount as default */ /* enable fail_at_unmount as default */
mp->m_fail_unmount = true; mp->m_fail_unmount = true;
super_set_sysfs_name_id(mp->m_super); error = xfs_mount_sysfs_init(mp);
error = xfs_sysfs_init(&mp->m_kobj, &xfs_mp_ktype,
NULL, mp->m_super->s_id);
if (error)
goto out;
error = xfs_sysfs_init(&mp->m_stats.xs_kobj, &xfs_stats_ktype,
&mp->m_kobj, "stats");
if (error)
goto out_remove_sysfs;
xchk_stats_register(mp->m_scrub_stats, mp->m_debugfs);
error = xfs_error_sysfs_init(mp);
if (error) if (error)
goto out_remove_scrub_stats; goto out_remove_scrub_stats;
xchk_stats_register(mp->m_scrub_stats, mp->m_debugfs);
error = xfs_errortag_init(mp); error = xfs_errortag_init(mp);
if (error) if (error)
goto out_remove_error_sysfs; goto out_remove_sysfs;
error = xfs_uuid_mount(mp); error = xfs_uuid_mount(mp);
if (error) if (error)
@ -1148,13 +1136,10 @@ xfs_mountfs(
xfs_uuid_unmount(mp); xfs_uuid_unmount(mp);
out_remove_errortag: out_remove_errortag:
xfs_errortag_del(mp); xfs_errortag_del(mp);
out_remove_error_sysfs: out_remove_sysfs:
xfs_error_sysfs_del(mp); xfs_mount_sysfs_del(mp);
out_remove_scrub_stats: out_remove_scrub_stats:
xchk_stats_unregister(mp->m_scrub_stats); xchk_stats_unregister(mp->m_scrub_stats);
xfs_sysfs_del(&mp->m_stats.xs_kobj);
out_remove_sysfs:
xfs_sysfs_del(&mp->m_kobj);
out: out:
return error; return error;
} }
@ -1231,10 +1216,8 @@ xfs_unmountfs(
xfs_free_rtgroups(mp, 0, mp->m_sb.sb_rgcount); xfs_free_rtgroups(mp, 0, mp->m_sb.sb_rgcount);
xfs_free_perag_range(mp, 0, mp->m_sb.sb_agcount); xfs_free_perag_range(mp, 0, mp->m_sb.sb_agcount);
xfs_errortag_del(mp); xfs_errortag_del(mp);
xfs_error_sysfs_del(mp);
xchk_stats_unregister(mp->m_scrub_stats); xchk_stats_unregister(mp->m_scrub_stats);
xfs_sysfs_del(&mp->m_stats.xs_kobj); xfs_mount_sysfs_del(mp);
xfs_sysfs_del(&mp->m_kobj);
} }
/* /*

View File

@ -69,7 +69,7 @@ static struct attribute *xfs_mp_attrs[] = {
}; };
ATTRIBUTE_GROUPS(xfs_mp); ATTRIBUTE_GROUPS(xfs_mp);
const struct kobj_type xfs_mp_ktype = { static const struct kobj_type xfs_mp_ktype = {
.release = xfs_sysfs_release, .release = xfs_sysfs_release,
.sysfs_ops = &xfs_sysfs_ops, .sysfs_ops = &xfs_sysfs_ops,
.default_groups = xfs_mp_groups, .default_groups = xfs_mp_groups,
@ -702,39 +702,58 @@ xfs_error_sysfs_init_class(
} }
int int
xfs_error_sysfs_init( xfs_mount_sysfs_init(
struct xfs_mount *mp) struct xfs_mount *mp)
{ {
int error; int error;
super_set_sysfs_name_id(mp->m_super);
/* .../xfs/<dev>/ */
error = xfs_sysfs_init(&mp->m_kobj, &xfs_mp_ktype,
NULL, mp->m_super->s_id);
if (error)
return error;
/* .../xfs/<dev>/stats/ */
error = xfs_sysfs_init(&mp->m_stats.xs_kobj, &xfs_stats_ktype,
&mp->m_kobj, "stats");
if (error)
goto out_remove_fsdir;
/* .../xfs/<dev>/error/ */ /* .../xfs/<dev>/error/ */
error = xfs_sysfs_init(&mp->m_error_kobj, &xfs_error_ktype, error = xfs_sysfs_init(&mp->m_error_kobj, &xfs_error_ktype,
&mp->m_kobj, "error"); &mp->m_kobj, "error");
if (error) if (error)
return error; goto out_remove_stats_dir;
/* .../xfs/<dev>/error/fail_at_unmount */
error = sysfs_create_file(&mp->m_error_kobj.kobject, error = sysfs_create_file(&mp->m_error_kobj.kobject,
ATTR_LIST(fail_at_unmount)); ATTR_LIST(fail_at_unmount));
if (error) if (error)
goto out_error; goto out_remove_error_dir;
/* .../xfs/<dev>/error/metadata/ */ /* .../xfs/<dev>/error/metadata/ */
error = xfs_error_sysfs_init_class(mp, XFS_ERR_METADATA, error = xfs_error_sysfs_init_class(mp, XFS_ERR_METADATA,
"metadata", &mp->m_error_meta_kobj, "metadata", &mp->m_error_meta_kobj,
xfs_error_meta_init); xfs_error_meta_init);
if (error) if (error)
goto out_error; goto out_remove_error_dir;
return 0; return 0;
out_error: out_remove_error_dir:
xfs_sysfs_del(&mp->m_error_kobj); xfs_sysfs_del(&mp->m_error_kobj);
out_remove_stats_dir:
xfs_sysfs_del(&mp->m_stats.xs_kobj);
out_remove_fsdir:
xfs_sysfs_del(&mp->m_kobj);
return error; return error;
} }
void void
xfs_error_sysfs_del( xfs_mount_sysfs_del(
struct xfs_mount *mp) struct xfs_mount *mp)
{ {
struct xfs_error_cfg *cfg; struct xfs_error_cfg *cfg;
@ -749,6 +768,8 @@ xfs_error_sysfs_del(
} }
xfs_sysfs_del(&mp->m_error_meta_kobj); xfs_sysfs_del(&mp->m_error_meta_kobj);
xfs_sysfs_del(&mp->m_error_kobj); xfs_sysfs_del(&mp->m_error_kobj);
xfs_sysfs_del(&mp->m_stats.xs_kobj);
xfs_sysfs_del(&mp->m_kobj);
} }
struct xfs_error_cfg * struct xfs_error_cfg *

View File

@ -7,7 +7,6 @@
#ifndef __XFS_SYSFS_H__ #ifndef __XFS_SYSFS_H__
#define __XFS_SYSFS_H__ #define __XFS_SYSFS_H__
extern const struct kobj_type xfs_mp_ktype; /* xfs_mount */
extern const struct kobj_type xfs_dbg_ktype; /* debug */ extern const struct kobj_type xfs_dbg_ktype; /* debug */
extern const struct kobj_type xfs_log_ktype; /* xlog */ extern const struct kobj_type xfs_log_ktype; /* xlog */
extern const struct kobj_type xfs_stats_ktype; /* stats */ extern const struct kobj_type xfs_stats_ktype; /* stats */
@ -53,7 +52,7 @@ xfs_sysfs_del(
wait_for_completion(&kobj->complete); wait_for_completion(&kobj->complete);
} }
int xfs_error_sysfs_init(struct xfs_mount *mp); int xfs_mount_sysfs_init(struct xfs_mount *mp);
void xfs_error_sysfs_del(struct xfs_mount *mp); void xfs_mount_sysfs_del(struct xfs_mount *mp);
#endif /* __XFS_SYSFS_H__ */ #endif /* __XFS_SYSFS_H__ */