Added
Link Here
|
1 |
From: Marc Dionne <marc.dionne@your-file-system.com> |
2 |
Date: Tue, 7 May 2013 00:20:07 +0000 (-0400) |
3 |
Subject: Linux 3.10: Replace create_proc_entry() with proc_create() |
4 |
X-Git-Url: http://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=d93aa9bdf702ac11eaf9b5121daaa5f9587d2b5e |
5 |
|
6 |
Linux 3.10: Replace create_proc_entry() with proc_create() |
7 |
|
8 |
Add an afs_proc_create() compat function that uses the |
9 |
appropriate kernel function based on a configure test. |
10 |
|
11 |
Reviewed-on: http://gerrit.openafs.org/9854 |
12 |
Tested-by: BuildBot <buildbot@rampaginggeek.com> |
13 |
Reviewed-by: Andrew Deason <adeason@sinenomine.net> |
14 |
Reviewed-by: Derrick Brashear <shadow@your-file-system.com> |
15 |
(cherry picked from commit 9b24013426e03a501fcaa6334ba5a9b48a8da3d1) |
16 |
|
17 |
Change-Id: I976ef345b1638434026e852e577e1f4474171e3d |
18 |
--- |
19 |
|
20 |
diff --git a/acinclude.m4 b/acinclude.m4 |
21 |
index 8334d08..b548b92 100644 |
22 |
--- a/acinclude.m4 |
23 |
+++ b/acinclude.m4 |
24 |
@@ -920,6 +920,9 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) |
25 |
[#include <linux/fs.h> |
26 |
#include <linux/namei.h>], |
27 |
[path_lookup(NULL, 0, NULL);]) |
28 |
+ AC_CHECK_LINUX_FUNC([proc_create], |
29 |
+ [#include <linux/proc_fs.h>], |
30 |
+ [proc_create(NULL, 0, NULL, NULL);]) |
31 |
AC_CHECK_LINUX_FUNC([rcu_read_lock], |
32 |
[#include <linux/rcupdate.h>], |
33 |
[rcu_read_lock();]) |
34 |
diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h |
35 |
index d726c6a..b933560 100644 |
36 |
--- a/src/afs/LINUX/osi_compat.h |
37 |
+++ b/src/afs/LINUX/osi_compat.h |
38 |
@@ -552,4 +552,17 @@ afs_truncate(struct inode *inode, int len) |
39 |
return code; |
40 |
} |
41 |
|
42 |
+static inline struct proc_dir_entry * |
43 |
+afs_proc_create(char *name, umode_t mode, struct proc_dir_entry *parent, struct file_operations *fops) { |
44 |
+#if defined(HAVE_LINUX_PROC_CREATE) |
45 |
+ return proc_create(name, mode, parent, fops); |
46 |
+#else |
47 |
+ struct proc_dir_entry *entry; |
48 |
+ entry = create_proc_entry(name, mode, parent); |
49 |
+ if (entry) |
50 |
+ entry->proc_fops = fops; |
51 |
+ return entry; |
52 |
+#endif |
53 |
+} |
54 |
+ |
55 |
#endif /* AFS_LINUX_OSI_COMPAT_H */ |
56 |
diff --git a/src/afs/LINUX/osi_ioctl.c b/src/afs/LINUX/osi_ioctl.c |
57 |
index 45e0fcd..82e907b 100644 |
58 |
--- a/src/afs/LINUX/osi_ioctl.c |
59 |
+++ b/src/afs/LINUX/osi_ioctl.c |
60 |
@@ -29,12 +29,13 @@ |
61 |
#include <linux/ioctl32.h> |
62 |
#endif |
63 |
|
64 |
-#include <linux/proc_fs.h> |
65 |
#include <linux/slab.h> |
66 |
#include <linux/init.h> |
67 |
#include <linux/sched.h> |
68 |
#include <linux/kernel.h> |
69 |
|
70 |
+#include "osi_compat.h" |
71 |
+ |
72 |
extern struct proc_dir_entry *openafs_procfs; |
73 |
#if defined(NEED_IOCTL32) && !defined(HAVE_COMPAT_IOCTL) |
74 |
static int ioctl32_done; |
75 |
@@ -107,10 +108,10 @@ osi_ioctl_init(void) |
76 |
{ |
77 |
struct proc_dir_entry *entry; |
78 |
|
79 |
- entry = create_proc_entry(PROC_SYSCALL_NAME, 0666, openafs_procfs); |
80 |
- entry->proc_fops = &afs_syscall_fops; |
81 |
+ entry = afs_proc_create(PROC_SYSCALL_NAME, 0666, openafs_procfs, &afs_syscall_fops); |
82 |
#if defined(STRUCT_PROC_DIR_ENTRY_HAS_OWNER) |
83 |
- entry->owner = THIS_MODULE; |
84 |
+ if (entry) |
85 |
+ entry->owner = THIS_MODULE; |
86 |
#endif |
87 |
|
88 |
#if defined(NEED_IOCTL32) && !defined(HAVE_COMPAT_IOCTL) |
89 |
diff --git a/src/afs/LINUX/osi_proc.c b/src/afs/LINUX/osi_proc.c |
90 |
index 974c0a7..5e3ac53 100644 |
91 |
--- a/src/afs/LINUX/osi_proc.c |
92 |
+++ b/src/afs/LINUX/osi_proc.c |
93 |
@@ -29,12 +29,13 @@ |
94 |
# include <asm/ia32_unistd.h> |
95 |
#endif |
96 |
|
97 |
-#include <linux/proc_fs.h> |
98 |
#include <linux/slab.h> |
99 |
#include <linux/init.h> |
100 |
#include <linux/sched.h> |
101 |
#include <linux/kernel.h> |
102 |
|
103 |
+#include "osi_compat.h" |
104 |
+ |
105 |
struct proc_dir_entry *openafs_procfs; |
106 |
|
107 |
#ifdef HAVE_LINUX_SEQ_FILE_H |
108 |
@@ -367,21 +368,18 @@ osi_proc_init(void) |
109 |
openafs_procfs = proc_mkdir(path, NULL); |
110 |
#endif |
111 |
#ifdef HAVE_LINUX_SEQ_FILE_H |
112 |
- entry = create_proc_entry("unixusers", 0, openafs_procfs); |
113 |
- if (entry) { |
114 |
- entry->proc_fops = &afs_unixuser_fops; |
115 |
+ entry = afs_proc_create("unixusers", 0, openafs_procfs, &afs_unixuser_fops); |
116 |
# if defined(STRUCT_PROC_DIR_ENTRY_HAS_OWNER) |
117 |
+ if (entry) |
118 |
entry->owner = THIS_MODULE; |
119 |
# endif |
120 |
- } |
121 |
- entry = create_proc_entry(PROC_CELLSERVDB_NAME, 0, openafs_procfs); |
122 |
- if (entry) |
123 |
- entry->proc_fops = &afs_csdb_operations; |
124 |
+ entry = afs_proc_create(PROC_CELLSERVDB_NAME, 0, openafs_procfs, &afs_csdb_operations); |
125 |
#else |
126 |
entry = create_proc_info_entry(PROC_CELLSERVDB_NAME, (S_IFREG|S_IRUGO), openafs_procfs, csdbproc_info); |
127 |
#endif |
128 |
#if defined(STRUCT_PROC_DIR_ENTRY_HAS_OWNER) |
129 |
- entry->owner = THIS_MODULE; |
130 |
+ if (entry) |
131 |
+ entry->owner = THIS_MODULE; |
132 |
#endif |
133 |
} |
134 |
|
135 |
diff --git a/src/afs/sysincludes.h b/src/afs/sysincludes.h |
136 |
index f7abc2e..5840227 100644 |
137 |
--- a/src/afs/sysincludes.h |
138 |
+++ b/src/afs/sysincludes.h |
139 |
@@ -160,6 +160,7 @@ struct xfs_inode_info { |
140 |
# include <linux/sched.h> |
141 |
# include <linux/mm.h> |
142 |
# include <linux/slab.h> |
143 |
+# include <linux/proc_fs.h> |
144 |
# include <linux/string.h> |
145 |
# if defined(HAVE_LINUX_SEMAPHORE_H) |
146 |
# include <linux/semaphore.h> |