mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-25 18:59:33 +03:00
Linux 5.18 compat: kobj_type.default_attrs replaced with default_groups
Upstream-commit: cdb4f26a63c391317e335e6e683a614358e70aeb ("kobject: kobj_type: remove default_attrs") Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz> Closes #13357
This commit is contained in:
parent
520a7c8a85
commit
0cdda2edb3
37
config/kernel-sysfs.m4
Normal file
37
config/kernel-sysfs.m4
Normal file
@ -0,0 +1,37 @@
|
||||
dnl #
|
||||
dnl # Linux 5.2/5.18 API
|
||||
dnl #
|
||||
dnl # In cdb4f26a63c391317e335e6e683a614358e70aeb ("kobject: kobj_type: remove default_attrs")
|
||||
dnl # struct kobj_type.default_attrs
|
||||
dnl # was finally removed in favour of
|
||||
dnl # struct kobj_type.default_groups
|
||||
dnl #
|
||||
dnl # This was added in aa30f47cf666111f6bbfd15f290a27e8a7b9d854 ("kobject: Add support for default attribute groups to kobj_type"),
|
||||
dnl # if both are present (5.2-5.17), we prefer default_groups; they're otherwise equivalent
|
||||
dnl #
|
||||
AC_DEFUN([ZFS_AC_KERNEL_SRC_SYSFS_DEFAULT_GROUPS], [
|
||||
ZFS_LINUX_TEST_SRC([sysfs_default_groups], [
|
||||
#include <linux/kobject.h>
|
||||
],[
|
||||
struct kobj_type __attribute__ ((unused)) kt = {
|
||||
.default_groups = (const struct attribute_group **)NULL };
|
||||
])
|
||||
])
|
||||
|
||||
AC_DEFUN([ZFS_AC_KERNEL_SYSFS_DEFAULT_GROUPS], [
|
||||
AC_MSG_CHECKING([for struct kobj_type.default_groups])
|
||||
ZFS_LINUX_TEST_RESULT([sysfs_default_groups],[
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE([HAVE_SYSFS_DEFAULT_GROUPS], 1, [struct kobj_type has default_groups])
|
||||
],[
|
||||
AC_MSG_RESULT(no)
|
||||
])
|
||||
])
|
||||
|
||||
AC_DEFUN([ZFS_AC_KERNEL_SRC_SYSFS], [
|
||||
ZFS_AC_KERNEL_SRC_SYSFS_DEFAULT_GROUPS
|
||||
])
|
||||
|
||||
AC_DEFUN([ZFS_AC_KERNEL_SYSFS], [
|
||||
ZFS_AC_KERNEL_SYSFS_DEFAULT_GROUPS
|
||||
])
|
@ -133,6 +133,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
|
||||
ZFS_AC_KERNEL_SRC_BIO_MAX_SEGS
|
||||
ZFS_AC_KERNEL_SRC_SIGNAL_STOP
|
||||
ZFS_AC_KERNEL_SRC_SIGINFO
|
||||
ZFS_AC_KERNEL_SRC_SYSFS
|
||||
ZFS_AC_KERNEL_SRC_SET_SPECIAL_STATE
|
||||
ZFS_AC_KERNEL_SRC_VFS_READPAGES
|
||||
ZFS_AC_KERNEL_SRC_VFS_SET_PAGE_DIRTY_NOBUFFERS
|
||||
@ -247,6 +248,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
|
||||
ZFS_AC_KERNEL_BIO_MAX_SEGS
|
||||
ZFS_AC_KERNEL_SIGNAL_STOP
|
||||
ZFS_AC_KERNEL_SIGINFO
|
||||
ZFS_AC_KERNEL_SYSFS
|
||||
ZFS_AC_KERNEL_SET_SPECIAL_STATE
|
||||
ZFS_AC_KERNEL_VFS_READPAGES
|
||||
ZFS_AC_KERNEL_VFS_SET_PAGE_DIRTY_NOBUFFERS
|
||||
|
@ -65,16 +65,15 @@
|
||||
/*
|
||||
* A zfs_mod_kobj_t represents a zfs kobject under '/sys/module/zfs'
|
||||
*/
|
||||
struct zfs_mod_kobj;
|
||||
typedef struct zfs_mod_kobj zfs_mod_kobj_t;
|
||||
|
||||
struct zfs_mod_kobj {
|
||||
struct kobject zko_kobj;
|
||||
struct kobj_type zko_kobj_type;
|
||||
struct sysfs_ops zko_sysfs_ops;
|
||||
size_t zko_attr_count;
|
||||
struct attribute *zko_attr_list; /* allocated */
|
||||
struct attribute **zko_default_attrs; /* allocated */
|
||||
struct attribute_group zko_default_group; /* .attrs allocated */
|
||||
const struct attribute_group *zko_default_groups[2];
|
||||
size_t zko_child_count;
|
||||
zfs_mod_kobj_t *zko_children; /* allocated */
|
||||
};
|
||||
@ -127,10 +126,10 @@ zfs_kobj_release(struct kobject *kobj)
|
||||
zkobj->zko_attr_list = NULL;
|
||||
}
|
||||
|
||||
if (zkobj->zko_default_attrs != NULL) {
|
||||
kmem_free(zkobj->zko_default_attrs,
|
||||
if (zkobj->zko_default_group.attrs != NULL) {
|
||||
kmem_free(zkobj->zko_default_group.attrs,
|
||||
DEFAULT_ATTR_SIZE(zkobj->zko_attr_count));
|
||||
zkobj->zko_default_attrs = NULL;
|
||||
zkobj->zko_default_group.attrs = NULL;
|
||||
}
|
||||
|
||||
if (zkobj->zko_child_count != 0) {
|
||||
@ -154,11 +153,12 @@ zfs_kobj_add_attr(zfs_mod_kobj_t *zkobj, int attr_num, const char *attr_name)
|
||||
{
|
||||
VERIFY3U(attr_num, <, zkobj->zko_attr_count);
|
||||
ASSERT(zkobj->zko_attr_list);
|
||||
ASSERT(zkobj->zko_default_attrs);
|
||||
ASSERT(zkobj->zko_default_group.attrs);
|
||||
|
||||
zkobj->zko_attr_list[attr_num].name = attr_name;
|
||||
zkobj->zko_attr_list[attr_num].mode = 0444;
|
||||
zkobj->zko_default_attrs[attr_num] = &zkobj->zko_attr_list[attr_num];
|
||||
zkobj->zko_default_group.attrs[attr_num] =
|
||||
&zkobj->zko_attr_list[attr_num];
|
||||
sysfs_attr_init(&zkobj->zko_attr_list[attr_num]);
|
||||
}
|
||||
|
||||
@ -176,9 +176,9 @@ zfs_kobj_init(zfs_mod_kobj_t *zkobj, int attr_cnt, int child_cnt,
|
||||
return (ENOMEM);
|
||||
}
|
||||
/* this will always have at least one slot for NULL termination */
|
||||
zkobj->zko_default_attrs = kmem_zalloc(DEFAULT_ATTR_SIZE(attr_cnt),
|
||||
KM_SLEEP);
|
||||
if (zkobj->zko_default_attrs == NULL) {
|
||||
zkobj->zko_default_group.attrs =
|
||||
kmem_zalloc(DEFAULT_ATTR_SIZE(attr_cnt), KM_SLEEP);
|
||||
if (zkobj->zko_default_group.attrs == NULL) {
|
||||
if (zkobj->zko_attr_list != NULL) {
|
||||
kmem_free(zkobj->zko_attr_list,
|
||||
ATTR_TABLE_SIZE(attr_cnt));
|
||||
@ -186,14 +186,19 @@ zfs_kobj_init(zfs_mod_kobj_t *zkobj, int attr_cnt, int child_cnt,
|
||||
return (ENOMEM);
|
||||
}
|
||||
zkobj->zko_attr_count = attr_cnt;
|
||||
zkobj->zko_kobj_type.default_attrs = zkobj->zko_default_attrs;
|
||||
zkobj->zko_default_groups[0] = &zkobj->zko_default_group;
|
||||
#ifdef HAVE_SYSFS_DEFAULT_GROUPS
|
||||
zkobj->zko_kobj_type.default_groups = zkobj->zko_default_groups;
|
||||
#else
|
||||
zkobj->zko_kobj_type.default_attrs = zkobj->zko_default_group.attrs;
|
||||
#endif
|
||||
|
||||
if (child_cnt > 0) {
|
||||
zkobj->zko_children = kmem_zalloc(CHILD_TABLE_SIZE(child_cnt),
|
||||
KM_SLEEP);
|
||||
if (zkobj->zko_children == NULL) {
|
||||
if (zkobj->zko_default_attrs != NULL) {
|
||||
kmem_free(zkobj->zko_default_attrs,
|
||||
if (zkobj->zko_default_group.attrs != NULL) {
|
||||
kmem_free(zkobj->zko_default_group.attrs,
|
||||
DEFAULT_ATTR_SIZE(attr_cnt));
|
||||
}
|
||||
if (zkobj->zko_attr_list != NULL) {
|
||||
@ -215,9 +220,9 @@ zfs_kobj_init(zfs_mod_kobj_t *zkobj, int attr_cnt, int child_cnt,
|
||||
static int
|
||||
zfs_kobj_add(zfs_mod_kobj_t *zkobj, struct kobject *parent, const char *name)
|
||||
{
|
||||
/* zko_default_attrs must be NULL terminated */
|
||||
ASSERT(zkobj->zko_default_attrs != NULL);
|
||||
ASSERT(zkobj->zko_default_attrs[zkobj->zko_attr_count] == NULL);
|
||||
/* zko_default_group.attrs must be NULL terminated */
|
||||
ASSERT(zkobj->zko_default_group.attrs != NULL);
|
||||
ASSERT(zkobj->zko_default_group.attrs[zkobj->zko_attr_count] == NULL);
|
||||
|
||||
kobject_init(&zkobj->zko_kobj, &zkobj->zko_kobj_type);
|
||||
return (kobject_add(&zkobj->zko_kobj, parent, name));
|
||||
|
Loading…
Reference in New Issue
Block a user