1 | // SPDX-License-Identifier: GPL-2.0 |
2 | /* |
3 | * Copyright (c) 2014 Red Hat, Inc. |
4 | * All Rights Reserved. |
5 | */ |
6 | |
7 | #ifndef __XFS_SYSFS_H__ |
8 | #define __XFS_SYSFS_H__ |
9 | |
10 | extern const struct kobj_type xfs_mp_ktype; /* xfs_mount */ |
11 | extern const struct kobj_type xfs_dbg_ktype; /* debug */ |
12 | extern const struct kobj_type xfs_log_ktype; /* xlog */ |
13 | extern const struct kobj_type xfs_stats_ktype; /* stats */ |
14 | |
15 | static inline struct xfs_kobj * |
16 | to_kobj(struct kobject *kobject) |
17 | { |
18 | return container_of(kobject, struct xfs_kobj, kobject); |
19 | } |
20 | |
21 | static inline void |
22 | xfs_sysfs_release(struct kobject *kobject) |
23 | { |
24 | struct xfs_kobj *kobj = to_kobj(kobject); |
25 | complete(&kobj->complete); |
26 | } |
27 | |
28 | static inline int |
29 | xfs_sysfs_init( |
30 | struct xfs_kobj *kobj, |
31 | const struct kobj_type *ktype, |
32 | struct xfs_kobj *parent_kobj, |
33 | const char *name) |
34 | { |
35 | struct kobject *parent; |
36 | int err; |
37 | |
38 | parent = parent_kobj ? &parent_kobj->kobject : NULL; |
39 | init_completion(x: &kobj->complete); |
40 | err = kobject_init_and_add(kobj: &kobj->kobject, ktype, parent, fmt: "%s" , name); |
41 | if (err) |
42 | kobject_put(kobj: &kobj->kobject); |
43 | |
44 | return err; |
45 | } |
46 | |
47 | static inline void |
48 | xfs_sysfs_del( |
49 | struct xfs_kobj *kobj) |
50 | { |
51 | kobject_del(kobj: &kobj->kobject); |
52 | kobject_put(kobj: &kobj->kobject); |
53 | wait_for_completion(&kobj->complete); |
54 | } |
55 | |
56 | int xfs_error_sysfs_init(struct xfs_mount *mp); |
57 | void xfs_error_sysfs_del(struct xfs_mount *mp); |
58 | |
59 | #endif /* __XFS_SYSFS_H__ */ |
60 | |