162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (c) 2014 Red Hat, Inc.
462306a36Sopenharmony_ci * All Rights Reserved.
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#ifndef __XFS_SYSFS_H__
862306a36Sopenharmony_ci#define __XFS_SYSFS_H__
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ciextern const struct kobj_type xfs_mp_ktype;	/* xfs_mount */
1162306a36Sopenharmony_ciextern const struct kobj_type xfs_dbg_ktype;	/* debug */
1262306a36Sopenharmony_ciextern const struct kobj_type xfs_log_ktype;	/* xlog */
1362306a36Sopenharmony_ciextern const struct kobj_type xfs_stats_ktype;	/* stats */
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cistatic inline struct xfs_kobj *
1662306a36Sopenharmony_cito_kobj(struct kobject *kobject)
1762306a36Sopenharmony_ci{
1862306a36Sopenharmony_ci	return container_of(kobject, struct xfs_kobj, kobject);
1962306a36Sopenharmony_ci}
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_cistatic inline void
2262306a36Sopenharmony_cixfs_sysfs_release(struct kobject *kobject)
2362306a36Sopenharmony_ci{
2462306a36Sopenharmony_ci	struct xfs_kobj *kobj = to_kobj(kobject);
2562306a36Sopenharmony_ci	complete(&kobj->complete);
2662306a36Sopenharmony_ci}
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_cistatic inline int
2962306a36Sopenharmony_cixfs_sysfs_init(
3062306a36Sopenharmony_ci	struct xfs_kobj		*kobj,
3162306a36Sopenharmony_ci	const struct kobj_type	*ktype,
3262306a36Sopenharmony_ci	struct xfs_kobj		*parent_kobj,
3362306a36Sopenharmony_ci	const char		*name)
3462306a36Sopenharmony_ci{
3562306a36Sopenharmony_ci	struct kobject		*parent;
3662306a36Sopenharmony_ci	int err;
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci	parent = parent_kobj ? &parent_kobj->kobject : NULL;
3962306a36Sopenharmony_ci	init_completion(&kobj->complete);
4062306a36Sopenharmony_ci	err = kobject_init_and_add(&kobj->kobject, ktype, parent, "%s", name);
4162306a36Sopenharmony_ci	if (err)
4262306a36Sopenharmony_ci		kobject_put(&kobj->kobject);
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci	return err;
4562306a36Sopenharmony_ci}
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_cistatic inline void
4862306a36Sopenharmony_cixfs_sysfs_del(
4962306a36Sopenharmony_ci	struct xfs_kobj	*kobj)
5062306a36Sopenharmony_ci{
5162306a36Sopenharmony_ci	kobject_del(&kobj->kobject);
5262306a36Sopenharmony_ci	kobject_put(&kobj->kobject);
5362306a36Sopenharmony_ci	wait_for_completion(&kobj->complete);
5462306a36Sopenharmony_ci}
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ciint	xfs_error_sysfs_init(struct xfs_mount *mp);
5762306a36Sopenharmony_civoid	xfs_error_sysfs_del(struct xfs_mount *mp);
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci#endif	/* __XFS_SYSFS_H__ */
60