From: Marc Dionne Date: Tue, 7 May 2013 00:20:07 +0000 (-0400) Subject: Linux 3.10: Replace create_proc_entry() with proc_create() X-Git-Tag: upstream/1.6.3^2~2 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=d5fcb35aea8a15bb8de760d2e27ef5734cfff16a;p=packages%2Fo%2Fopenafs.git Linux 3.10: Replace create_proc_entry() with proc_create() Add an afs_proc_create() compat function that uses the appropriate kernel function based on a configure test. Reviewed-on: http://gerrit.openafs.org/9854 Tested-by: BuildBot Reviewed-by: Andrew Deason Reviewed-by: Derrick Brashear (cherry picked from commit 9b24013426e03a501fcaa6334ba5a9b48a8da3d1) Change-Id: I976ef345b1638434026e852e577e1f4474171e3d Reviewed-on: http://gerrit.openafs.org/9948 Reviewed-by: Derrick Brashear Tested-by: BuildBot Reviewed-by: Stephan Wiesand --- diff --git a/acinclude.m4 b/acinclude.m4 index 8334d084b..b548b9258 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -920,6 +920,9 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) [#include #include ], [path_lookup(NULL, 0, NULL);]) + AC_CHECK_LINUX_FUNC([proc_create], + [#include ], + [proc_create(NULL, 0, NULL, NULL);]) AC_CHECK_LINUX_FUNC([rcu_read_lock], [#include ], [rcu_read_lock();]) diff --git a/src/afs/LINUX/osi_compat.h b/src/afs/LINUX/osi_compat.h index d726c6ae2..b933560ba 100644 --- a/src/afs/LINUX/osi_compat.h +++ b/src/afs/LINUX/osi_compat.h @@ -552,4 +552,17 @@ afs_truncate(struct inode *inode, int len) return code; } +static inline struct proc_dir_entry * +afs_proc_create(char *name, umode_t mode, struct proc_dir_entry *parent, struct file_operations *fops) { +#if defined(HAVE_LINUX_PROC_CREATE) + return proc_create(name, mode, parent, fops); +#else + struct proc_dir_entry *entry; + entry = create_proc_entry(name, mode, parent); + if (entry) + entry->proc_fops = fops; + return entry; +#endif +} + #endif /* AFS_LINUX_OSI_COMPAT_H */ diff --git a/src/afs/LINUX/osi_ioctl.c b/src/afs/LINUX/osi_ioctl.c index 45e0fcdfc..82e907bf6 100644 --- a/src/afs/LINUX/osi_ioctl.c +++ b/src/afs/LINUX/osi_ioctl.c @@ -29,12 +29,13 @@ #include #endif -#include #include #include #include #include +#include "osi_compat.h" + extern struct proc_dir_entry *openafs_procfs; #if defined(NEED_IOCTL32) && !defined(HAVE_COMPAT_IOCTL) static int ioctl32_done; @@ -107,10 +108,10 @@ osi_ioctl_init(void) { struct proc_dir_entry *entry; - entry = create_proc_entry(PROC_SYSCALL_NAME, 0666, openafs_procfs); - entry->proc_fops = &afs_syscall_fops; + entry = afs_proc_create(PROC_SYSCALL_NAME, 0666, openafs_procfs, &afs_syscall_fops); #if defined(STRUCT_PROC_DIR_ENTRY_HAS_OWNER) - entry->owner = THIS_MODULE; + if (entry) + entry->owner = THIS_MODULE; #endif #if defined(NEED_IOCTL32) && !defined(HAVE_COMPAT_IOCTL) diff --git a/src/afs/LINUX/osi_proc.c b/src/afs/LINUX/osi_proc.c index 974c0a771..5e3ac5301 100644 --- a/src/afs/LINUX/osi_proc.c +++ b/src/afs/LINUX/osi_proc.c @@ -29,12 +29,13 @@ # include #endif -#include #include #include #include #include +#include "osi_compat.h" + struct proc_dir_entry *openafs_procfs; #ifdef HAVE_LINUX_SEQ_FILE_H @@ -367,21 +368,18 @@ osi_proc_init(void) openafs_procfs = proc_mkdir(path, NULL); #endif #ifdef HAVE_LINUX_SEQ_FILE_H - entry = create_proc_entry("unixusers", 0, openafs_procfs); - if (entry) { - entry->proc_fops = &afs_unixuser_fops; + entry = afs_proc_create("unixusers", 0, openafs_procfs, &afs_unixuser_fops); # if defined(STRUCT_PROC_DIR_ENTRY_HAS_OWNER) + if (entry) entry->owner = THIS_MODULE; # endif - } - entry = create_proc_entry(PROC_CELLSERVDB_NAME, 0, openafs_procfs); - if (entry) - entry->proc_fops = &afs_csdb_operations; + entry = afs_proc_create(PROC_CELLSERVDB_NAME, 0, openafs_procfs, &afs_csdb_operations); #else entry = create_proc_info_entry(PROC_CELLSERVDB_NAME, (S_IFREG|S_IRUGO), openafs_procfs, csdbproc_info); #endif #if defined(STRUCT_PROC_DIR_ENTRY_HAS_OWNER) - entry->owner = THIS_MODULE; + if (entry) + entry->owner = THIS_MODULE; #endif } diff --git a/src/afs/sysincludes.h b/src/afs/sysincludes.h index f7abc2e46..584022713 100644 --- a/src/afs/sysincludes.h +++ b/src/afs/sysincludes.h @@ -160,6 +160,7 @@ struct xfs_inode_info { # include # include # include +# include # include # if defined(HAVE_LINUX_SEMAPHORE_H) # include