[Ocfs2-devel] [PATCH 05/10] ocfs2: Handle missing struct jbd2_buffer_trigger_type

Sunil Mushran sunil.mushran at oracle.com
Fri Nov 20 17:12:52 PST 2009


Mainline commit e06c8227fd94ec181849ba206bf032be31c4295c added buffer commit
triggers in JBD2. OCFS2 uses these triggers to calculate the metadata checksums.

Patch disables the MetaECC feature temporarily.

TODO: Pull JBD2 source in OCFS2 1.6 repo and re-enable the MetaECC feature.

Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
---
 Config.make.in                 |    1 +
 Makefile                       |    3 +-
 configure.in                   |    6 +++
 fs/ocfs2/Makefile              |    4 ++
 fs/ocfs2/journal.c             |    2 +
 fs/ocfs2/super.c               |    9 +++++
 kapi-compat/include/triggers.h |   72 ++++++++++++++++++++++++++++++++++++++++
 7 files changed, 96 insertions(+), 1 deletions(-)
 create mode 100644 kapi-compat/include/triggers.h

diff --git a/Config.make.in b/Config.make.in
index a2365e4..5a81e44 100644
--- a/Config.make.in
+++ b/Config.make.in
@@ -79,6 +79,7 @@ GET_RETURNS_U64_IN_SIMPLE_ATTR_OPEN = @GET_RETURNS_U64_IN_SIMPLE_ATTR_OPEN@
 NO_SHOULD_REMOVE_SUID = @NO_SHOULD_REMOVE_SUID@
 HAS_FOPS_SENDFILE = @HAS_FOPS_SENDFILE@
 SKIP_SPLICE = @SKIP_SPLICE@
+SKIP_BUFFER_TRIGGERS = @SKIP_BUFFER_TRIGGERS@
 
 
 OCFS_DEBUG = @OCFS_DEBUG@
diff --git a/Makefile b/Makefile
index 8e8b63f..fd34d67 100644
--- a/Makefile
+++ b/Makefile
@@ -37,7 +37,8 @@ KAPI_COMPAT_FILES = \
 	kapi-compat/include/user_path_at.h		\
 	kapi-compat/include/filemap_fdatawait_range.h	\
 	kapi-compat/include/mnt_want_write.h		\
-	kapi-compat/include/hardsect.h
+	kapi-compat/include/hardsect.h			\
+	kapi-compat/include/triggers.h
 
 PATCH_FILES =
 
diff --git a/configure.in b/configure.in
index 2826cec..d042f9c 100644
--- a/configure.in
+++ b/configure.in
@@ -429,6 +429,12 @@ OCFS2_CHECK_KERNEL([	bdev_hardsect_size() in blkdev.h], blkdev.h,
  bdev_hardsect_header=hardsect.h, , [static inline int bdev_hardsect_size(struct block_device \*bdev)])
 KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $bdev_hardsect_header"
 
+SKIP_BUFFER_TRIGGERS=
+OCFS2_CHECK_KERNEL([struct jbd2_buffer_trigger_type in jbd2.h], jbd2.h,
+ , SKIP_BUFFER_TRIGGERS=triggers.h, [^struct jbd2_buffer_trigger_type {])
+AC_SUBST(SKIP_BUFFER_TRIGGERS)
+KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS $SKIP_BUFFER_TRIGGERS"
+
 # End kapi_compat checks
 
 # using -include has two advantages:
diff --git a/fs/ocfs2/Makefile b/fs/ocfs2/Makefile
index ba2a3ea..1e8fed6 100644
--- a/fs/ocfs2/Makefile
+++ b/fs/ocfs2/Makefile
@@ -118,6 +118,10 @@ ifdef SKIP_SPLICE
 EXTRA_CFLAGS += -DSKIP_SPLICE
 endif
 
+ifdef SKIP_BUFFER_TRIGGERS
+CFLAGS_journal.o += -DSKIP_BUFFER_TRIGGERS
+endif
+
 #
 # Since SUBDIRS means something to kbuild, define them safely.  Do not
 # include trailing slashes.
diff --git a/fs/ocfs2/journal.c b/fs/ocfs2/journal.c
index 67cc5a7..217f30a 100644
--- a/fs/ocfs2/journal.c
+++ b/fs/ocfs2/journal.c
@@ -459,6 +459,7 @@ bail:
 	return status;
 }
 
+#ifndef SKIP_BUFFER_TRIGGERS
 struct ocfs2_triggers {
 	struct jbd2_buffer_trigger_type	ot_triggers;
 	int				ot_offset;
@@ -608,6 +609,7 @@ static struct ocfs2_triggers dl_triggers = {
 	},
 	.ot_offset	= offsetof(struct ocfs2_dx_leaf, dl_check),
 };
+#endif /* SKIP_BUFFER_TRIGGERS */
 
 static int __ocfs2_journal_access(handle_t *handle,
 				  struct ocfs2_caching_info *ci,
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index e36bec2..0a7a621 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -1017,6 +1017,15 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent)
 	brelse(bh);
 	bh = NULL;
 
+#ifdef SKIP_BUFFER_TRIGGERS
+	if(ocfs2_meta_ecc(osb)) {
+		status = -EINVAL;
+		mlog(ML_ERROR, "File system cannot mount volume with the "
+		     "MetaECC feature enabled.\n");
+		goto read_super_error;
+	}
+#endif
+
 	if (!(osb->s_feature_incompat & OCFS2_FEATURE_INCOMPAT_XATTR))
 		parsed_options.mount_opt &= ~OCFS2_MOUNT_POSIX_ACL;
 
diff --git a/kapi-compat/include/triggers.h b/kapi-compat/include/triggers.h
new file mode 100644
index 0000000..d9f3f3f
--- /dev/null
+++ b/kapi-compat/include/triggers.h
@@ -0,0 +1,72 @@
+#ifndef KAPI_TRIGGERS_H
+#define KAPI_TRIGGERS_H
+
+#ifdef SKIP_BUFFER_TRIGGERS
+
+#include <linux/fs.h>
+#include <linux/buffer_head.h>
+
+struct jbd2_buffer_trigger_type {
+	/*
+	 * Fired just before a buffer is written to the journal.
+	 * mapped_data is a mapped buffer that is the frozen data for
+	 * commit.
+	 */
+	void (*t_commit)(struct jbd2_buffer_trigger_type *type,
+			 struct buffer_head *bh, void *mapped_data,
+			 size_t size);
+
+	/*
+	 * Fired during journal abort for dirty buffers that will not be
+	 * committed.
+	 */
+	void (*t_abort)(struct jbd2_buffer_trigger_type *type,
+			struct buffer_head *bh);
+};
+
+struct ocfs2_triggers {
+	struct jbd2_buffer_trigger_type	ot_triggers;
+	int				ot_offset;
+};
+
+#define jbd2_journal_set_triggers(a, b)		do { } while (0)
+
+static struct ocfs2_triggers di_triggers = {
+	.ot_triggers = { .t_commit = NULL, .t_abort = NULL, }, .ot_offset = 0,
+};
+
+static struct ocfs2_triggers eb_triggers = {
+	.ot_triggers = { .t_commit = NULL, .t_abort = NULL, }, .ot_offset = 0,
+};
+
+static struct ocfs2_triggers rb_triggers = {
+	.ot_triggers = { .t_commit = NULL, .t_abort = NULL, }, .ot_offset = 0,
+};
+
+static struct ocfs2_triggers gd_triggers = {
+	.ot_triggers = { .t_commit = NULL, .t_abort = NULL, }, .ot_offset = 0,
+};
+
+static struct ocfs2_triggers db_triggers = {
+	.ot_triggers = { .t_commit = NULL, .t_abort = NULL, }, .ot_offset = 0,
+};
+
+static struct ocfs2_triggers xb_triggers = {
+	.ot_triggers = { .t_commit = NULL, .t_abort = NULL, }, .ot_offset = 0,
+};
+
+static struct ocfs2_triggers dq_triggers = {
+	.ot_triggers = { .t_commit = NULL, .t_abort = NULL, }, .ot_offset = 0,
+};
+
+static struct ocfs2_triggers dr_triggers = {
+	.ot_triggers = { .t_commit = NULL, .t_abort = NULL, }, .ot_offset = 0,
+};
+
+static struct ocfs2_triggers dl_triggers = {
+	.ot_triggers = { .t_commit = NULL, .t_abort = NULL, }, .ot_offset = 0,
+};
+
+#endif
+
+#endif
-- 
1.5.6.5




More information about the Ocfs2-devel mailing list