* [gentoo-commits] gentoo-x86 commit in sys-kernel/spl/files: spl-0.6.1-linux-3.10-compat.patch spl-0.6.1-builtin-fix.patch
@ 2013-07-14 11:49 Richard Yao (ryao)
0 siblings, 0 replies; only message in thread
From: Richard Yao (ryao) @ 2013-07-14 11:49 UTC (permalink / raw
To: gentoo-commits
ryao 13/07/14 11:49:46
Added: spl-0.6.1-linux-3.10-compat.patch
spl-0.6.1-builtin-fix.patch
Log:
Linux 3.10 compatibility; Fix kernel builtin support
(Portage version: 2.2.0_alpha187/cvs/Linux x86_64, signed Manifest commit with key 0xBEE84C64)
Revision Changes Path
1.1 sys-kernel/spl/files/spl-0.6.1-linux-3.10-compat.patch
file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-kernel/spl/files/spl-0.6.1-linux-3.10-compat.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-kernel/spl/files/spl-0.6.1-linux-3.10-compat.patch?rev=1.1&content-type=text/plain
Index: spl-0.6.1-linux-3.10-compat.patch
===================================================================
diff --git a/config/spl-build.m4 b/config/spl-build.m4
index 8a8e3ba..da179e3 100644
--- a/config/spl-build.m4
+++ b/config/spl-build.m4
@@ -33,6 +33,8 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [
SPL_AC_TASK_CURR
SPL_AC_CTL_UNNUMBERED
SPL_AC_CTL_NAME
+ SPL_AC_VMALLOC_INFO
+ SPL_AC_PDE_DATA
SPL_AC_FLS64
SPL_AC_DEVICE_CREATE
SPL_AC_5ARGS_DEVICE_CREATE
@@ -1358,6 +1360,43 @@ AC_DEFUN([SPL_AC_GET_VMALLOC_INFO],
])
dnl #
+dnl # 3.10 API change,
+dnl # struct vmalloc_info is now declared in linux/vmalloc.h
+dnl #
+AC_DEFUN([SPL_AC_VMALLOC_INFO], [
+ AC_MSG_CHECKING([whether struct vmalloc_info is declared])
+ SPL_LINUX_TRY_COMPILE([
+ #include <linux/vmalloc.h>
+ struct vmalloc_info { void *a; };
+ ],[
+ return 0;
+ ],[
+ AC_MSG_RESULT(no)
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_VMALLOC_INFO, 1, [yes])
+ ])
+])
+
+dnl #
+dnl # 3.10 API change,
+dnl # PDE is replaced by PDE_DATA
+dnl #
+AC_DEFUN([SPL_AC_PDE_DATA], [
+ AC_MSG_CHECKING([whether PDE_DATA() is available])
+ SPL_LINUX_TRY_COMPILE_SYMBOL([
+ #include <linux/proc_fs.h>
+ ], [
+ PDE_DATA(NULL);
+ ], [PDE_DATA], [], [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_PDE_DATA, 1, [yes])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
+
+dnl #
dnl # 2.6.17 API change
dnl # The helper functions first_online_pgdat(), next_online_pgdat(), and
dnl # next_zone() are introduced to simplify for_each_zone(). These symbols
diff --git a/include/linux/proc_compat.h b/include/linux/proc_compat.h
index 434ffa3..7b044e7 100644
--- a/include/linux/proc_compat.h
+++ b/include/linux/proc_compat.h
@@ -43,9 +43,6 @@
#endif
extern struct proc_dir_entry *proc_spl_kstat;
-struct proc_dir_entry *proc_dir_entry_find(struct proc_dir_entry *root,
- const char *str);
-int proc_dir_entries(struct proc_dir_entry *root);
int spl_proc_init(void);
void spl_proc_fini(void);
diff --git a/include/sys/kstat.h b/include/sys/kstat.h
index 9275c1e..da3c589 100644
--- a/include/sys/kstat.h
+++ b/include/sys/kstat.h
@@ -83,6 +83,13 @@ struct kstat_s;
typedef int kid_t; /* unique kstat id */
typedef int kstat_update_t(struct kstat_s *, int); /* dynamic update cb */
+typedef struct kstat_module {
+ char ksm_name[KSTAT_STRLEN+1]; /* module name */
+ struct list_head ksm_module_list; /* module linkage */
+ struct list_head ksm_kstat_list; /* list of kstat entries */
+ struct proc_dir_entry *ksm_proc; /* proc entry */
+} kstat_module_t;
+
typedef struct kstat_s {
int ks_magic; /* magic value */
kid_t ks_kid; /* unique kstat ID */
@@ -102,6 +109,7 @@ typedef struct kstat_s {
void *ks_private; /* private data */
kmutex_t ks_lock; /* kstat data lock */
struct list_head ks_list; /* kstat linkage */
+ kstat_module_t *ks_owner; /* kstat module linkage */
} kstat_t;
typedef struct kstat_named_s {
diff --git a/include/sys/vmsystm.h b/include/sys/vmsystm.h
index 9c52d28..34aea2b 100644
--- a/include/sys/vmsystm.h
+++ b/include/sys/vmsystm.h
@@ -74,10 +74,12 @@ extern size_t vmem_size(vmem_t *vmp, int typemask);
#ifndef HAVE_GET_VMALLOC_INFO
#ifdef CONFIG_MMU
+#ifndef HAVE_VMALLOC_INFO
struct vmalloc_info {
unsigned long used;
unsigned long largest_chunk;
};
+#endif
typedef void (*get_vmalloc_info_t)(struct vmalloc_info *);
extern get_vmalloc_info_t get_vmalloc_info_fn;
diff --git a/module/spl/spl-kstat.c b/module/spl/spl-kstat.c
index b7e4b94..4e900c0 100644
--- a/module/spl/spl-kstat.c
+++ b/module/spl/spl-kstat.c
@@ -33,9 +33,12 @@
#endif
#define SS_DEBUG_SUBSYS SS_KSTAT
+#ifndef HAVE_PDE_DATA
+#define PDE_DATA(x) (PDE(x)->data)
+#endif
-static spinlock_t kstat_lock;
-static struct list_head kstat_list;
+static kmutex_t kstat_module_lock;
+static struct list_head kstat_module_list;
static kid_t kstat_id;
static void
@@ -348,6 +351,47 @@ static struct seq_operations kstat_seq_ops = {
.stop = kstat_seq_stop,
};
+static kstat_module_t *
+kstat_find_module(char *name)
+{
+ kstat_module_t *module;
+
+ list_for_each_entry(module, &kstat_module_list, ksm_module_list)
+ if (strncmp(name, module->ksm_name, KSTAT_STRLEN) == 0)
+ return (module);
+
+ return (NULL);
+}
+
+static kstat_module_t *
+kstat_create_module(char *name)
+{
+ kstat_module_t *module;
+ struct proc_dir_entry *pde;
+
+ pde = proc_mkdir(name, proc_spl_kstat);
+ if (pde == NULL)
+ return (NULL);
+
+ module = kmem_alloc(sizeof (kstat_module_t), KM_SLEEP);
+ module->ksm_proc = pde;
+ strlcpy(module->ksm_name, name, KSTAT_STRLEN+1);
+ INIT_LIST_HEAD(&module->ksm_kstat_list);
+ list_add_tail(&module->ksm_module_list, &kstat_module_list);
+
+ return (module);
+
+}
+
+static void
+kstat_delete_module(kstat_module_t *module)
+{
+ ASSERT(list_empty(&module->ksm_kstat_list));
+ remove_proc_entry(module->ksm_name, proc_spl_kstat);
+ list_del(&module->ksm_module_list);
+ kmem_free(module, sizeof(kstat_module_t));
+}
+
static int
proc_kstat_open(struct inode *inode, struct file *filp)
{
@@ -359,7 +403,7 @@ proc_kstat_open(struct inode *inode, struct file *filp)
return rc;
f = filp->private_data;
- f->private = PDE(inode)->data;
+ f->private = PDE_DATA(inode);
return rc;
}
@@ -390,10 +434,10 @@ __kstat_create(const char *ks_module, int ks_instance, const char *ks_name,
if (ksp == NULL)
return ksp;
- spin_lock(&kstat_lock);
+ mutex_enter(&kstat_module_lock);
ksp->ks_kid = kstat_id;
kstat_id++;
- spin_unlock(&kstat_lock);
+ mutex_exit(&kstat_module_lock);
ksp->ks_magic = KS_MAGIC;
mutex_init(&ksp->ks_lock, NULL, MUTEX_DEFAULT, NULL);
@@ -456,71 +500,64 @@ EXPORT_SYMBOL(__kstat_create);
void
__kstat_install(kstat_t *ksp)
{
- struct proc_dir_entry *de_module, *de_name;
+ kstat_module_t *module;
kstat_t *tmp;
- int rc = 0;
- SENTRY;
-
- spin_lock(&kstat_lock);
- /* Item may only be added to the list once */
- list_for_each_entry(tmp, &kstat_list, ks_list) {
- if (tmp == ksp) {
- spin_unlock(&kstat_lock);
- SGOTO(out, rc = -EEXIST);
- }
- }
+ ASSERT(ksp);
- list_add_tail(&ksp->ks_list, &kstat_list);
- spin_unlock(&kstat_lock);
+ mutex_enter(&kstat_module_lock);
- de_module = proc_dir_entry_find(proc_spl_kstat, ksp->ks_module);
- if (de_module == NULL) {
- de_module = proc_mkdir(ksp->ks_module, proc_spl_kstat);
- if (de_module == NULL)
- SGOTO(out, rc = -EUNATCH);
+ module = kstat_find_module(ksp->ks_module);
+ if (module == NULL) {
+ module = kstat_create_module(ksp->ks_module);
+ if (module == NULL)
+ goto out;
}
- de_name = create_proc_entry(ksp->ks_name, 0444, de_module);
- if (de_name == NULL)
- SGOTO(out, rc = -EUNATCH);
+ /*
+ * Only one entry by this name per-module, on failure the module
+ * shouldn't be deleted because we know it has at least one entry.
+ */
+ list_for_each_entry(tmp, &module->ksm_kstat_list, ks_list)
+ if (strncmp(tmp->ks_name, ksp->ks_name, KSTAT_STRLEN) == 0)
+ goto out;
+
+ list_add_tail(&ksp->ks_list, &module->ksm_kstat_list);
mutex_enter(&ksp->ks_lock);
- ksp->ks_proc = de_name;
- de_name->proc_fops = &proc_kstat_operations;
- de_name->data = (void *)ksp;
+ ksp->ks_owner = module;
+ ksp->ks_proc = proc_create_data(ksp->ks_name, 0444,
+ module->ksm_proc, &proc_kstat_operations, (void *)ksp);
+ if (ksp->ks_proc == NULL) {
+ list_del_init(&ksp->ks_list);
+ if (list_empty(&module->ksm_kstat_list))
+ kstat_delete_module(module);
+ }
mutex_exit(&ksp->ks_lock);
out:
- if (rc) {
- spin_lock(&kstat_lock);
- list_del_init(&ksp->ks_list);
- spin_unlock(&kstat_lock);
- }
-
- SEXIT;
+ mutex_exit(&kstat_module_lock);
}
EXPORT_SYMBOL(__kstat_install);
void
__kstat_delete(kstat_t *ksp)
{
- struct proc_dir_entry *de_module;
+ kstat_module_t *module = ksp->ks_owner;
- spin_lock(&kstat_lock);
- list_del_init(&ksp->ks_list);
- spin_unlock(&kstat_lock);
+ mutex_enter(&kstat_module_lock);
+ list_del_init(&ksp->ks_list);
+ mutex_exit(&kstat_module_lock);
- if (ksp->ks_proc) {
- de_module = ksp->ks_proc->parent;
- remove_proc_entry(ksp->ks_name, de_module);
+ if (ksp->ks_proc) {
+ remove_proc_entry(ksp->ks_name, module->ksm_proc);
- /* Remove top level module directory if it's empty */
- if (proc_dir_entries(de_module) == 0)
- remove_proc_entry(de_module->name, de_module->parent);
+ /* Remove top level module directory if it's empty */
+ if (list_empty(&module->ksm_kstat_list))
+ kstat_delete_module(module);
}
if (!(ksp->ks_flags & KSTAT_FLAG_VIRTUAL))
- kmem_free(ksp->ks_data, ksp->ks_data_size);
+ kmem_free(ksp->ks_data, ksp->ks_data_size);
mutex_destroy(&ksp->ks_lock);
kmem_free(ksp, sizeof(*ksp));
@@ -533,8 +570,8 @@ int
spl_kstat_init(void)
{
SENTRY;
- spin_lock_init(&kstat_lock);
- INIT_LIST_HEAD(&kstat_list);
+ mutex_init(&kstat_module_lock, NULL, MUTEX_DEFAULT, NULL);
+ INIT_LIST_HEAD(&kstat_module_list);
kstat_id = 0;
SRETURN(0);
}
@@ -543,7 +580,8 @@ void
spl_kstat_fini(void)
{
SENTRY;
- ASSERT(list_empty(&kstat_list));
+ ASSERT(list_empty(&kstat_module_list));
+ mutex_destroy(&kstat_module_lock);
SEXIT;
}
diff --git a/module/spl/spl-proc.c b/module/spl/spl-proc.c
index cd4fa1b..b8379d0 100644
--- a/module/spl/spl-proc.c
+++ b/module/spl/spl-proc.c
@@ -1120,39 +1120,6 @@ static struct ctl_table spl_root[] = {
{ 0 }
};
-static int
-proc_dir_entry_match(int len, const char *name, struct proc_dir_entry *de)
-{
- if (de->namelen != len)
- return 0;
-
- return !memcmp(name, de->name, len);
-}
-
-struct proc_dir_entry *
-proc_dir_entry_find(struct proc_dir_entry *root, const char *str)
-{
- struct proc_dir_entry *de;
-
- for (de = root->subdir; de; de = de->next)
- if (proc_dir_entry_match(strlen(str), str, de))
- return de;
-
- return NULL;
-}
-
-int
-proc_dir_entries(struct proc_dir_entry *root)
-{
- struct proc_dir_entry *de;
- int i = 0;
-
- for (de = root->subdir; de; de = de->next)
- i++;
-
- return i;
-}
-
int
spl_proc_init(void)
{
@@ -1174,11 +1141,11 @@ spl_proc_init(void)
if (proc_spl_kmem == NULL)
SGOTO(out, rc = -EUNATCH);
- proc_spl_kmem_slab = create_proc_entry("slab", 0444, proc_spl_kmem);
+ proc_spl_kmem_slab = proc_create_data("slab", 0444,
+ proc_spl_kmem, &proc_slab_operations, NULL);
if (proc_spl_kmem_slab == NULL)
SGOTO(out, rc = -EUNATCH);
- proc_spl_kmem_slab->proc_fops = &proc_slab_operations;
#endif /* DEBUG_KMEM */
proc_spl_kstat = proc_mkdir("kstat", proc_spl);
diff --git a/module/splat/splat-atomic.c b/module/splat/splat-atomic.c
index df3b38f..f702196 100644
--- a/module/splat/splat-atomic.c
+++ b/module/splat/splat-atomic.c
@@ -26,6 +26,7 @@
#include <sys/atomic.h>
#include <sys/thread.h>
+#include <linux/slab.h>
#include "splat-internal.h"
#define SPLAT_ATOMIC_NAME "atomic"
diff --git a/module/splat/splat-thread.c b/module/splat/splat-thread.c
index a1e70db..e55acd0 100644
--- a/module/splat/splat-thread.c
+++ b/module/splat/splat-thread.c
@@ -26,6 +26,7 @@
#include <sys/thread.h>
#include <sys/random.h>
+#include <linux/slab.h>
#include "splat-internal.h"
#define SPLAT_THREAD_NAME "thread"
diff --git a/module/splat/splat-time.c b/module/splat/splat-time.c
index ca60c45..cd513c9 100644
--- a/module/splat/splat-time.c
+++ b/module/splat/splat-time.c
@@ -25,6 +25,7 @@
\*****************************************************************************/
#include <sys/time.h>
+#include <linux/slab.h>
#include "splat-internal.h"
#define SPLAT_TIME_NAME "time"
1.1 sys-kernel/spl/files/spl-0.6.1-builtin-fix.patch
file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-kernel/spl/files/spl-0.6.1-builtin-fix.patch?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-kernel/spl/files/spl-0.6.1-builtin-fix.patch?rev=1.1&content-type=text/plain
Index: spl-0.6.1-builtin-fix.patch
===================================================================
From 991857cac5929fa149820722b8e8cd90f874670c Mon Sep 17 00:00:00 2001
From: Matthew Thode <mthode@mthode.org>
Date: Fri, 21 Jun 2013 14:55:07 -0400
Subject: [PATCH] Copy spl.release.in to kernel dir
Required when compiling ZFS in the kernel.
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #253
---
copy-builtin | 1 +
1 file changed, 1 insertion(+)
diff --git a/copy-builtin b/copy-builtin
index 3277270..cd98b7a 100755
--- a/copy-builtin
+++ b/copy-builtin
@@ -33,6 +33,7 @@ rm -rf "$KERNEL_DIR/include/spl" "$KERNEL_DIR/spl"
cp --recursive include "$KERNEL_DIR/include/spl"
cp --recursive module "$KERNEL_DIR/spl"
cp spl_config.h "$KERNEL_DIR/"
+cp spl.release.in "$KERNEL_DIR/"
adjust_obj_paths()
{
--
1.8.1.6
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2013-07-14 11:49 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-14 11:49 [gentoo-commits] gentoo-x86 commit in sys-kernel/spl/files: spl-0.6.1-linux-3.10-compat.patch spl-0.6.1-builtin-fix.patch Richard Yao (ryao)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox