[Ocfs2-devel] [PATCH 3/8] ocfs2: Handle older prototype of iops->permission()

Sunil Mushran sunil.mushran at oracle.com
Wed Nov 11 19:40:00 PST 2009


Mainline commit e6305c43eda10ebfd2ad9e35d6e172ccc7bb3695 changed the prototype
of iops->permission() by dropping the last argument.
-       int (*permission) (struct inode *, int, struct nameidata *);
+       int (*permission) (struct inode *, int);

Patch allows building with kernels having the older prototype.

Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
---
 Config.make.in    |    1 +
 configure.in      |   13 +++++++++++++
 fs/ocfs2/Makefile |    4 ++++
 fs/ocfs2/file.c   |    4 ++++
 fs/ocfs2/file.h   |    4 ++++
 5 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/Config.make.in b/Config.make.in
index d129c64..a19d096 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -71,6 +71,7 @@ MATCHTABLE_IS_NOT_CONST = @MATCHTABLE_IS_NOT_CONST@
 VMOP_IS_NOT_CONST = @VMOP_IS_NOT_CONST@
 SEQOP_IS_NOT_CONST = @SEQOP_IS_NOT_CONST@
 NO_VECTORIZED_AIO = @NO_VECTORIZED_AIO@
+OLD_PERMISSION = @OLD_PERMISSION@
 
 
 OCFS_DEBUG = @OCFS_DEBUG@
diff --git a/configure.in b/configure.in
index 0b98e28..a1c4255 100644
--- a/configure.in
+++ b/configure.in
@@ -282,6 +282,19 @@ OCFS2_CHECK_KERNEL([aio_read() in struct file_operations using iovec in fs.h], f
 AC_SUBST(NO_VECTORIZED_AIO)
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $NO_VECTORIZED_AIO"
 
+OLD_PERSMISSION=
+OCFS2_CHECK_KERNEL([	older prototype of iops->permission() in fs.h], fs.h,
+OLD_PERSMISSION=yes, , [int (\*permission) (struct inode \*, int, struct nameidata \*);])
+AC_SUBST(OLD_PERSMISSION)
+if test "x$OLD_PERSMISSION" = "x" ; then
+  new_permission=
+  OCFS2_CHECK_KERNEL([	newer prototype of iops->permission() in fs.h], fs.h,
+  new_permission=yes, , [int (\*permission) (struct inode \*, int);])
+  if test "x$new_permission" = "x" ; then
+    AC_MSG_ERROR(Cannot build with kernel as the prototype of iops->permission is not recognized)
+  fi
+fi
+
 
 # End kapi_compat checks
 
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index df389bc..32d864d 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -88,6 +88,10 @@ ifdef NO_VECTORIZED_AIO
 CFLAGS_file.o += -DNO_VECTORIZED_AIO
 endif
 
+ifdef OLD_PERMISSION
+EXTRA_CFLAGS += -DOLD_PERMISSION
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index f5e8681..4c12c2d 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -1138,7 +1138,11 @@ bail:
 	return err;
 }
 
+#ifdef OLD_PERMISSION
+int ocfs2_permission(struct inode *inode, int mask, struct nameidata *nd)
+#else
 int ocfs2_permission(struct inode *inode, int mask)
+#endif
 {
 	int ret;
 
diff --git a/fs/ocfs2/file.h b/fs/ocfs2/file.h
index da85393..845ea30 100644
--- a/fs/ocfs2/file.h
+++ b/fs/ocfs2/file.h
@@ -64,7 +64,11 @@ int ocfs2_extend_no_holes(struct inode *inode, u64 new_i_size,
 int ocfs2_setattr(struct dentry *dentry, struct iattr *attr);
 int ocfs2_getattr(struct vfsmount *mnt, struct dentry *dentry,
 		  struct kstat *stat);
+#ifdef OLD_PERMISSION
+int ocfs2_permission(struct inode *inode, int mask, struct nameidata *nd);
+#else
 int ocfs2_permission(struct inode *inode, int mask);
+#endif
 
 int ocfs2_should_update_atime(struct inode *inode,
 			      struct vfsmount *vfsmnt);
-- 
1.5.6.5




More information about the Ocfs2-devel mailing list