summarylogtreecommitdiffstats
path: root/linux-5.6-compat-struct-proc_ops.patch
diff options
context:
space:
mode:
authorArchzfs Buildbot2020-04-06 21:09:43 +0000
committerArchzfs Buildbot2020-04-06 21:09:43 +0000
commit2868c09d558ef8c8b20fd431243164577fe6da3c (patch)
treee8d865324766d21ee9448e1e2674484167d9b3d7 /linux-5.6-compat-struct-proc_ops.patch
parentb5618cc5c86a3dcc20a3b450aabb7b9c3fd90a67 (diff)
downloadaur-2868c09d558ef8c8b20fd431243164577fe6da3c.tar.gz
Semi-automated update for kernel 5.6.2.arch1-2 + zfs 0.8.3
Diffstat (limited to 'linux-5.6-compat-struct-proc_ops.patch')
-rw-r--r--linux-5.6-compat-struct-proc_ops.patch226
1 files changed, 226 insertions, 0 deletions
diff --git a/linux-5.6-compat-struct-proc_ops.patch b/linux-5.6-compat-struct-proc_ops.patch
new file mode 100644
index 00000000000..117902ca735
--- /dev/null
+++ b/linux-5.6-compat-struct-proc_ops.patch
@@ -0,0 +1,226 @@
+diff --git a/config/kernel-proc-operations.m4 b/config/kernel-proc-operations.m4
+new file mode 100644
+index 00000000000..df216222ecc
+--- /dev/null
++++ b/config/kernel-proc-operations.m4
+@@ -0,0 +1,41 @@
++dnl #
++dnl # 5.6 API Change
++dnl # The proc_ops structure was introduced to replace the use of
++dnl # of the file_operations structure when registering proc handlers.
++dnl #
++AC_DEFUN([ZFS_AC_KERNEL_SRC_PROC_OPERATIONS], [
++ ZFS_LINUX_TEST_SRC([proc_ops_struct], [
++ #include <linux/proc_fs.h>
++
++ int test_open(struct inode *ip, struct file *fp) { return 0; }
++ ssize_t test_read(struct file *fp, char __user *ptr,
++ size_t size, loff_t *offp) { return 0; }
++ ssize_t test_write(struct file *fp, const char __user *ptr,
++ size_t size, loff_t *offp) { return 0; }
++ loff_t test_lseek(struct file *fp, loff_t off, int flag)
++ { return 0; }
++ int test_release(struct inode *ip, struct file *fp)
++ { return 0; }
++
++ const struct proc_ops test_ops __attribute__ ((unused)) = {
++ .proc_open = test_open,
++ .proc_read = test_read,
++ .proc_write = test_write,
++ .proc_lseek = test_lseek,
++ .proc_release = test_release,
++ };
++ ], [
++ struct proc_dir_entry *entry __attribute__ ((unused)) =
++ proc_create_data("test", 0444, NULL, &test_ops, NULL);
++ ])
++])
++
++AC_DEFUN([ZFS_AC_KERNEL_PROC_OPERATIONS], [
++ AC_MSG_CHECKING([whether proc_ops structure exists])
++ ZFS_LINUX_TEST_RESULT([proc_ops_struct], [
++ AC_MSG_RESULT(yes)
++ AC_DEFINE(HAVE_PROC_OPS_STRUCT, 1, [proc_ops structure exists])
++ ], [
++ AC_MSG_RESULT(no)
++ ])
++])
+diff --git a/config/kernel.m4 b/config/kernel.m4
+index dce619729d4..780de331800 100644
+--- a/config/kernel.m4
++++ b/config/kernel.m4
+@@ -54,6 +54,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
+ ZFS_AC_KERNEL_SRC_CURRENT_BIO_TAIL
+ ZFS_AC_KERNEL_SRC_SUPER_USER_NS
+ ZFS_AC_KERNEL_SRC_SUBMIT_BIO
++ ZFS_AC_KERNEL_SRC_PROC_OPERATIONS
+ ZFS_AC_KERNEL_SRC_BLOCK_DEVICE_OPERATIONS
+ ZFS_AC_KERNEL_SRC_BLKDEV_GET_BY_PATH
+ ZFS_AC_KERNEL_SRC_BLKDEV_REREAD_PART
+@@ -170,6 +171,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
+ ZFS_AC_KERNEL_CURRENT_BIO_TAIL
+ ZFS_AC_KERNEL_SUPER_USER_NS
+ ZFS_AC_KERNEL_SUBMIT_BIO
++ ZFS_AC_KERNEL_PROC_OPERATIONS
+ ZFS_AC_KERNEL_BLOCK_DEVICE_OPERATIONS
+ ZFS_AC_KERNEL_BLKDEV_GET_BY_PATH
+ ZFS_AC_KERNEL_BLKDEV_REREAD_PART
+diff --git a/include/spl/sys/kstat.h b/include/spl/sys/kstat.h
+index 3ce47424887..c93c53171d8 100644
+--- a/include/spl/sys/kstat.h
++++ b/include/spl/sys/kstat.h
+@@ -152,6 +152,12 @@ typedef struct kstat_named_s {
+ #define KSTAT_NAMED_STR_PTR(knptr) ((knptr)->value.string.addr.ptr)
+ #define KSTAT_NAMED_STR_BUFLEN(knptr) ((knptr)->value.string.len)
+
++#ifdef HAVE_PROC_OPS_STRUCT
++typedef struct proc_ops kstat_proc_op_t;
++#else
++typedef struct file_operations kstat_proc_op_t;
++#endif
++
+ typedef struct kstat_intr {
+ uint_t intrs[KSTAT_NUM_INTRS];
+ } kstat_intr_t;
+@@ -197,7 +203,7 @@ extern void kstat_proc_entry_init(kstat_proc_entry_t *kpep,
+ const char *module, const char *name);
+ extern void kstat_proc_entry_delete(kstat_proc_entry_t *kpep);
+ extern void kstat_proc_entry_install(kstat_proc_entry_t *kpep, mode_t mode,
+- const struct file_operations *file_ops, void *data);
++ const kstat_proc_op_t *file_ops, void *data);
+
+ extern void __kstat_install(kstat_t *ksp);
+ extern void __kstat_delete(kstat_t *ksp);
+diff --git a/module/spl/spl-kstat.c b/module/spl/spl-kstat.c
+index c97b6d6cbcb..c54378acec5 100644
+--- a/module/spl/spl-kstat.c
++++ b/module/spl/spl-kstat.c
+@@ -507,12 +507,20 @@ proc_kstat_write(struct file *filp, const char __user *buf, size_t len,
+ return (len);
+ }
+
+-static struct file_operations proc_kstat_operations = {
++static const kstat_proc_op_t proc_kstat_operations = {
++#ifdef HAVE_PROC_OPS_STRUCT
++ .proc_open = proc_kstat_open,
++ .proc_write = proc_kstat_write,
++ .proc_read = seq_read,
++ .proc_lseek = seq_lseek,
++ .proc_release = seq_release,
++#else
+ .open = proc_kstat_open,
+ .write = proc_kstat_write,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = seq_release,
++#endif
+ };
+
+ void
+@@ -656,7 +664,7 @@ kstat_detect_collision(kstat_proc_entry_t *kpep)
+ */
+ void
+ kstat_proc_entry_install(kstat_proc_entry_t *kpep, mode_t mode,
+- const struct file_operations *file_ops, void *data)
++ const kstat_proc_op_t *proc_ops, void *data)
+ {
+ kstat_module_t *module;
+ kstat_proc_entry_t *tmp = NULL;
+@@ -690,7 +698,7 @@ kstat_proc_entry_install(kstat_proc_entry_t *kpep, mode_t mode,
+
+ kpep->kpe_owner = module;
+ kpep->kpe_proc = proc_create_data(kpep->kpe_name, mode,
+- module->ksm_proc, file_ops, data);
++ module->ksm_proc, proc_ops, data);
+ if (kpep->kpe_proc == NULL) {
+ list_del_init(&kpep->kpe_list);
+ if (list_empty(&module->ksm_kstat_list))
+diff --git a/module/spl/spl-proc.c b/module/spl/spl-proc.c
+index c0c13913cdf..40315ede317 100644
+--- a/module/spl/spl-proc.c
++++ b/module/spl/spl-proc.c
+@@ -532,11 +532,18 @@ proc_slab_open(struct inode *inode, struct file *filp)
+ return (seq_open(filp, &slab_seq_ops));
+ }
+
+-static struct file_operations proc_slab_operations = {
+- .open = proc_slab_open,
+- .read = seq_read,
+- .llseek = seq_lseek,
++static const kstat_proc_op_t proc_slab_operations = {
++#ifdef HAVE_PROC_OPS_STRUCT
++ .proc_open = proc_slab_open,
++ .proc_read = seq_read,
++ .proc_lseek = seq_lseek,
++ .proc_release = seq_release,
++#else
++ .open = proc_slab_open,
++ .read = seq_read,
++ .llseek = seq_lseek,
+ .release = seq_release,
++#endif
+ };
+
+ static void
+@@ -571,18 +578,32 @@ proc_taskq_open(struct inode *inode, struct file *filp)
+ return (seq_open(filp, &taskq_seq_ops));
+ }
+
+-static struct file_operations proc_taskq_all_operations = {
++static const kstat_proc_op_t proc_taskq_all_operations = {
++#ifdef HAVE_PROC_OPS_STRUCT
++ .proc_open = proc_taskq_all_open,
++ .proc_read = seq_read,
++ .proc_lseek = seq_lseek,
++ .proc_release = seq_release,
++#else
+ .open = proc_taskq_all_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = seq_release,
++#endif
+ };
+
+-static struct file_operations proc_taskq_operations = {
++static const kstat_proc_op_t proc_taskq_operations = {
++#ifdef HAVE_PROC_OPS_STRUCT
++ .proc_open = proc_taskq_open,
++ .proc_read = seq_read,
++ .proc_lseek = seq_lseek,
++ .proc_release = seq_release,
++#else
+ .open = proc_taskq_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = seq_release,
++#endif
+ };
+
+ static struct ctl_table spl_kmem_table[] = {
+diff --git a/module/spl/spl-procfs-list.c b/module/spl/spl-procfs-list.c
+index f6a00da5c91..189d6a7c608 100644
+--- a/module/spl/spl-procfs-list.c
++++ b/module/spl/spl-procfs-list.c
+@@ -185,13 +185,20 @@ procfs_list_write(struct file *filp, const char __user *buf, size_t len,
+ return (len);
+ }
+
+-static struct file_operations procfs_list_operations = {
+- .owner = THIS_MODULE,
++static const kstat_proc_op_t procfs_list_operations = {
++#ifdef HAVE_PROC_OPS_STRUCT
++ .proc_open = procfs_list_open,
++ .proc_write = procfs_list_write,
++ .proc_read = seq_read,
++ .proc_lseek = seq_lseek,
++ .proc_release = seq_release_private,
++#else
+ .open = procfs_list_open,
+ .write = procfs_list_write,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = seq_release_private,
++#endif
+ };
+
+ /*