]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
xfs: contain more sysfs code in xfs_sysfs.c
authorChristoph Hellwig <hch@lst.de>
Tue, 21 Jan 2025 05:30:27 +0000 (06:30 +0100)
committerChristoph Hellwig <hch@lst.de>
Mon, 3 Mar 2025 15:17:10 +0000 (08:17 -0700)
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>
fs/xfs/xfs_mount.c
fs/xfs/xfs_sysfs.c
fs/xfs/xfs_sysfs.h

index d8aba6a28ba7a954a815049c5ef1208a9e1b6b56..e65a659901d5ce50e0d51ef52d2531fca282376e 100644 (file)
@@ -765,27 +765,15 @@ xfs_mountfs(
        /* enable fail_at_unmount as default */
        mp->m_fail_unmount = true;
 
-       super_set_sysfs_name_id(mp->m_super);
-
-       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");
+       error = xfs_mount_sysfs_init(mp);
        if (error)
-               goto out_remove_sysfs;
+               goto out_remove_scrub_stats;
 
        xchk_stats_register(mp->m_scrub_stats, mp->m_debugfs);
 
-       error = xfs_error_sysfs_init(mp);
-       if (error)
-               goto out_remove_scrub_stats;
-
        error = xfs_errortag_init(mp);
        if (error)
-               goto out_remove_error_sysfs;
+               goto out_remove_sysfs;
 
        error = xfs_uuid_mount(mp);
        if (error)
@@ -1148,13 +1136,10 @@ xfs_mountfs(
        xfs_uuid_unmount(mp);
  out_remove_errortag:
        xfs_errortag_del(mp);
- out_remove_error_sysfs:
-       xfs_error_sysfs_del(mp);
+ out_remove_sysfs:
+       xfs_mount_sysfs_del(mp);
  out_remove_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:
        return error;
 }
@@ -1231,10 +1216,8 @@ xfs_unmountfs(
        xfs_free_rtgroups(mp, 0, mp->m_sb.sb_rgcount);
        xfs_free_perag_range(mp, 0, mp->m_sb.sb_agcount);
        xfs_errortag_del(mp);
-       xfs_error_sysfs_del(mp);
        xchk_stats_unregister(mp->m_scrub_stats);
-       xfs_sysfs_del(&mp->m_stats.xs_kobj);
-       xfs_sysfs_del(&mp->m_kobj);
+       xfs_mount_sysfs_del(mp);
 }
 
 /*
index 60cb5318fdae3cc246236fd988b4749df57f8bfc..c3bd7dff229d1685b11614e9bf613f212764d1c8 100644 (file)
@@ -69,7 +69,7 @@ static struct attribute *xfs_mp_attrs[] = {
 };
 ATTRIBUTE_GROUPS(xfs_mp);
 
-const struct kobj_type xfs_mp_ktype = {
+static const struct kobj_type xfs_mp_ktype = {
        .release = xfs_sysfs_release,
        .sysfs_ops = &xfs_sysfs_ops,
        .default_groups = xfs_mp_groups,
@@ -702,39 +702,58 @@ out_error:
 }
 
 int
-xfs_error_sysfs_init(
+xfs_mount_sysfs_init(
        struct xfs_mount        *mp)
 {
        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/ */
        error = xfs_sysfs_init(&mp->m_error_kobj, &xfs_error_ktype,
                                &mp->m_kobj, "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,
                                  ATTR_LIST(fail_at_unmount));
 
        if (error)
-               goto out_error;
+               goto out_remove_error_dir;
 
        /* .../xfs/<dev>/error/metadata/ */
        error = xfs_error_sysfs_init_class(mp, XFS_ERR_METADATA,
                                "metadata", &mp->m_error_meta_kobj,
                                xfs_error_meta_init);
        if (error)
-               goto out_error;
+               goto out_remove_error_dir;
 
        return 0;
 
-out_error:
+out_remove_error_dir:
        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;
 }
 
 void
-xfs_error_sysfs_del(
+xfs_mount_sysfs_del(
        struct xfs_mount        *mp)
 {
        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_kobj);
+       xfs_sysfs_del(&mp->m_stats.xs_kobj);
+       xfs_sysfs_del(&mp->m_kobj);
 }
 
 struct xfs_error_cfg *
index 148893ebfdefaba4abf5659361bafe0059e67f3e..1622fe80ad3ed4a9de73af54e8893384f025b180 100644 (file)
@@ -7,7 +7,6 @@
 #ifndef __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_log_ktype;   /* xlog */
 extern const struct kobj_type xfs_stats_ktype; /* stats */
@@ -53,7 +52,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);
+int    xfs_mount_sysfs_init(struct xfs_mount *mp);
+void   xfs_mount_sysfs_del(struct xfs_mount *mp);
 
 #endif /* __XFS_SYSFS_H__ */