[Ocfs2-devel] [patch 3/5] ocfs2: Add check for const file_operations

Jeff Mahoney jeffm at suse.com
Thu Jan 31 12:44:41 PST 2008


 SLES10 doesn't have a const f_op in struct file. This patch adds a check.

Signed-off-by: Jeff Mahoney <jeffm at suse.com>
---

 Config.make.in        |    1 +
 configure.in          |    5 +++++
 fs/ocfs2/Makefile     |    4 ++++
 fs/ocfs2/dlm/Makefile |    4 ++++
 fs/ocfs2/dlm/dlmfs.c  |    8 ++++++++
 fs/ocfs2/dlmglue.c    |    4 ++++
 fs/ocfs2/file.c       |    8 ++++++++
 fs/ocfs2/file.h       |    5 +++++
 8 files changed, 39 insertions(+)

diff --git a/Config.make.in b/Config.make.in
index 5b58fe1..dc5431b 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -72,6 +72,7 @@ NO_SHOULD_REMOVE_SUID = @NO_SHOULD_REMOVE_SUID@
 NO_GENERIC_SEGMENT_CHECKS = @NO_GENERIC_SEGMENT_CHECKS@
 SOP_IS_NOT_CONST = @SOP_IS_NOT_CONST@
 IOP_IS_NOT_CONST = @IOP_IS_NOT_CONST@
+FOP_IS_NOT_CONST = @FOP_IS_NOT_CONST@
 NO_VECTORIZED_AIO = @NO_VECTORIZED_AIO@
 NO_SPLICE_FROM_PIPE = @NO_SPLICE_FROM_PIPE@
 OLD_BIO_END_IO = @OLD_BIO_END_IO@
diff --git a/configure.in b/configure.in
index d1ebeae..3d9e49f 100644
--- a/configure.in
+++ b/configure.in
@@ -305,6 +305,11 @@ OCFS2_CHECK_KERNEL([i_op declared as const in struct inode in fs.h], fs.h,
   , IOP_IS_NOT_CONST=yes, [^.*const struct inode_operations.*\*i_op;])
 AC_SUBST(IOP_IS_NOT_CONST)
 
+FOP_IS_NOT_CONST=
+OCFS2_CHECK_KERNEL([f_op declared as const in struct file in fs.h], fs.h,
+  , FOP_IS_NOT_CONST=yes, [^.*const struct file_operations.*\*f_op;])
+AC_SUBST(FOP_IS_NOT_CONST)
+
 NO_VECTORIZED_AIO=
 OCFS2_CHECK_KERNEL([aio_read() in struct file_operations using iovec in fs.h], fs.h,
   , NO_VECTORIZED_AIO=yes, [ssize_t (\*aio_read) (struct kiocb \*, const struct iovec \*, unsigned long, loff_t);])
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index b53630d..5750280 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -84,6 +84,10 @@ ifdef IOP_IS_NOT_CONST
 EXTRA_CFLAGS += -DIOP_IS_NOT_CONST
 endif
 
+ifdef FOP_IS_NOT_CONST
+EXTRA_CFLAGS += -DFOP_IS_NOT_CONST
+endif
+
 ifdef NO_VECTORIZED_AIO
 CFLAGS_file.o += -DNO_VECTORIZED_AIO
 endif
diff --git a/fs/ocfs2/dlm/Makefile b/fs/ocfs2/dlm/Makefile
index 74bd019..4b718cf 100644
--- a/fs/ocfs2/dlm/Makefile
+++ b/fs/ocfs2/dlm/Makefile
@@ -46,6 +46,10 @@ ifdef IOP_IS_NOT_CONST
 EXTRA_CFLAGS += -DIOP_IS_NOT_CONST
 endif
 
+ifdef FOP_IS_NOT_CONST
+EXTRA_CFLAGS += -DFOP_IS_NOT_CONST
+endif
+
 ifdef NO_VFSMOUNT_IN_GET_SB_BDEV
 EXTRA_CFLAGS += -DNO_VFSMOUNT_IN_GET_SB_BDEV
 endif
diff --git a/fs/ocfs2/dlm/dlmfs.c b/fs/ocfs2/dlm/dlmfs.c
index ba35f76..f7e0263 100644
--- a/fs/ocfs2/dlm/dlmfs.c
+++ b/fs/ocfs2/dlm/dlmfs.c
@@ -65,7 +65,11 @@ static struct super_operations dlmfs_ops;
 #else
 static const struct super_operations dlmfs_ops;
 #endif
+#ifdef FOP_IS_NOT_CONST
+static struct file_operations dlmfs_file_operations;
+#else
 static const struct file_operations dlmfs_file_operations;
+#endif
 #ifdef IOP_IS_NOT_CONST
 static struct inode_operations dlmfs_dir_inode_operations;
 static struct inode_operations dlmfs_root_inode_operations;
@@ -546,7 +550,11 @@ static int dlmfs_fill_super(struct super_block * sb,
 	return 0;
 }
 
+#ifdef FOP_IS_NOT_CONST
+static struct file_operations dlmfs_file_operations = {
+#else
 static const struct file_operations dlmfs_file_operations = {
+#endif
 	.open		= dlmfs_file_open,
 	.release	= dlmfs_file_release,
 	.read		= dlmfs_file_read,
diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
index 9ce2881..04f9ec3 100644
--- a/fs/ocfs2/dlmglue.c
+++ b/fs/ocfs2/dlmglue.c
@@ -2441,7 +2441,11 @@ out:
 	return ret;
 }
 
+#ifdef FOP_IS_NOT_CONST
+static struct file_operations ocfs2_dlm_debug_fops = {
+#else
 static const struct file_operations ocfs2_dlm_debug_fops = {
+#endif
 	.open =		ocfs2_dlm_debug_open,
 	.release =	ocfs2_dlm_debug_release,
 	.read =		seq_read,
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
index 40122fe..e068a76 100644
--- a/fs/ocfs2/file.c
+++ b/fs/ocfs2/file.c
@@ -2488,7 +2488,11 @@ const struct inode_operations ocfs2_special_file_iops = {
 	.permission	= ocfs2_permission,
 };
 
+#ifdef FOP_IS_NOT_CONST
+struct file_operations ocfs2_fops = {
+#else
 const struct file_operations ocfs2_fops = {
+#endif
 	.llseek		= generic_file_llseek,
 	.read		= do_sync_read,
 	.write		= do_sync_write,
@@ -2509,7 +2513,11 @@ const struct file_operations ocfs2_fops = {
 #endif
 };
 
+#ifdef FOP_IS_NOT_CONST
+struct file_operations ocfs2_dops = {
+#else
 const struct file_operations ocfs2_dops = {
+#endif
 	.llseek		= generic_file_llseek,
 	.read		= generic_read_dir,
 	.readdir	= ocfs2_readdir,
diff --git a/fs/ocfs2/file.h b/fs/ocfs2/file.h
index 8cf0821..2b118b8 100644
--- a/fs/ocfs2/file.h
+++ b/fs/ocfs2/file.h
@@ -26,8 +26,13 @@
 #ifndef OCFS2_FILE_H
 #define OCFS2_FILE_H
 
+#ifdef FOP_IS_NOT_CONST
+extern struct file_operations ocfs2_fops;
+extern struct file_operations ocfs2_dops;
+#else
 extern const struct file_operations ocfs2_fops;
 extern const struct file_operations ocfs2_dops;
+#endif
 #ifdef IOP_IS_NOT_CONST
 extern struct inode_operations ocfs2_file_iops;
 extern struct inode_operations ocfs2_special_file_iops;





More information about the Ocfs2-devel mailing list