-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Embed a base kobject into xfs_mount. This creates a kobject associated with each XFS mount and a subdirectory in sysfs with the name of the filesystem. The subdirectory lifecycle matches that of the mount. Also add the new xfs_sysfs.[c,h] source files with some XFS sysfs infrastructure to facilitate attribute creation. Note that there are currently no attributes exported as part of the xfs_mount kobject. It exists solely to serve as a per-mount container for child objects. Signed-off-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
- Loading branch information
Brian Foster
authored and
Dave Chinner
committed
Jul 14, 2014
1 parent
3d87122
commit a31b1d3
Showing
6 changed files
with
133 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
/* | ||
* Copyright (c) 2014 Red Hat, Inc. | ||
* All Rights Reserved. | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License as | ||
* published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it would be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
*/ | ||
|
||
#include "xfs.h" | ||
#include "xfs_sysfs.h" | ||
|
||
struct xfs_sysfs_attr { | ||
struct attribute attr; | ||
ssize_t (*show)(char *buf, void *data); | ||
ssize_t (*store)(const char *buf, size_t count, void *data); | ||
}; | ||
|
||
static inline struct xfs_sysfs_attr * | ||
to_attr(struct attribute *attr) | ||
{ | ||
return container_of(attr, struct xfs_sysfs_attr, attr); | ||
} | ||
|
||
#define XFS_SYSFS_ATTR_RW(name) \ | ||
static struct xfs_sysfs_attr xfs_sysfs_attr_##name = __ATTR_RW(name) | ||
#define XFS_SYSFS_ATTR_RO(name) \ | ||
static struct xfs_sysfs_attr xfs_sysfs_attr_##name = __ATTR_RO(name) | ||
|
||
#define ATTR_LIST(name) &xfs_sysfs_attr_##name.attr | ||
|
||
/* | ||
* xfs_mount kobject. This currently has no attributes and thus no need for show | ||
* and store helpers. The mp kobject serves as the per-mount parent object that | ||
* is identified by the fsname under sysfs. | ||
*/ | ||
|
||
struct kobj_type xfs_mp_ktype = { | ||
.release = xfs_sysfs_release, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
/* | ||
* Copyright (c) 2014 Red Hat, Inc. | ||
* All Rights Reserved. | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License as | ||
* published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it would be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write the Free Software Foundation, | ||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
*/ | ||
|
||
#ifndef __XFS_SYSFS_H__ | ||
#define __XFS_SYSFS_H__ | ||
|
||
extern struct kobj_type xfs_mp_ktype; /* xfs_mount */ | ||
|
||
static inline struct xfs_kobj * | ||
to_kobj(struct kobject *kobject) | ||
{ | ||
return container_of(kobject, struct xfs_kobj, kobject); | ||
} | ||
|
||
static inline void | ||
xfs_sysfs_release(struct kobject *kobject) | ||
{ | ||
struct xfs_kobj *kobj = to_kobj(kobject); | ||
complete(&kobj->complete); | ||
} | ||
|
||
static inline int | ||
xfs_sysfs_init( | ||
struct xfs_kobj *kobj, | ||
struct kobj_type *ktype, | ||
struct xfs_kobj *parent_kobj, | ||
const char *name) | ||
{ | ||
init_completion(&kobj->complete); | ||
return kobject_init_and_add(&kobj->kobject, ktype, | ||
&parent_kobj->kobject, "%s", name); | ||
} | ||
|
||
static inline void | ||
xfs_sysfs_del( | ||
struct xfs_kobj *kobj) | ||
{ | ||
kobject_del(&kobj->kobject); | ||
kobject_put(&kobj->kobject); | ||
wait_for_completion(&kobj->complete); | ||
} | ||
|
||
#endif /* __XFS_SYSFS_H__ */ |