[Ocfs2-commits] mfasheh commits r2634 -
branches/locking-changes/fs/ocfs2
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Tue Oct 4 17:24:25 CDT 2005
Author: mfasheh
Date: 2005-10-04 17:24:24 -0500 (Tue, 04 Oct 2005)
New Revision: 2634
Modified:
branches/locking-changes/fs/ocfs2/ocfs2.h
branches/locking-changes/fs/ocfs2/super.c
Log:
* make data=ordered optional.
* port svn r2633 from trunk
Modified: branches/locking-changes/fs/ocfs2/ocfs2.h
===================================================================
--- branches/locking-changes/fs/ocfs2/ocfs2.h 2005-10-04 22:09:51 UTC (rev 2633)
+++ branches/locking-changes/fs/ocfs2/ocfs2.h 2005-10-04 22:24:24 UTC (rev 2634)
@@ -164,6 +164,7 @@
OCFS2_MOUNT_BARRIER = 1 << 1, /* Use block barriers */
OCFS2_MOUNT_NOINTR = 1 << 2, /* Don't catch signals */
OCFS2_MOUNT_ERRORS_PANIC = 1 << 3, /* Panic on errors */
+ OCFS2_MOUNT_DATA_WRITEBACK = 1 << 4, /* No data ordering */
#ifdef OCFS2_ORACORE_WORKAROUNDS
OCFS2_MOUNT_COMPAT_OCFS = 1 << 30, /* ocfs1 compatibility mode */
#endif
@@ -280,16 +281,17 @@
struct work_struct osb_truncate_log_wq;
} ocfs2_super;
+#define OCFS2_SB(sb) ((ocfs2_super *)(sb)->s_fs_info)
+#define OCFS2_MAX_OSB_ID 65536
+
static inline int ocfs2_should_order_data(struct inode *inode)
{
if (!S_ISREG(inode->i_mode))
return 0;
- /* TODO: this should be a mount option which we check here. */
+ if (OCFS2_SB(inode->i_sb)->s_mount_opt & OCFS2_MOUNT_DATA_WRITEBACK)
+ return 0;
return 1;
}
-
-#define OCFS2_SB(sb) ((ocfs2_super *)(sb)->s_fs_info)
-#define OCFS2_MAX_OSB_ID 65536
/* set / clear functions because cluster events can make these happen
* in parallel so we want the transitions to be atomic. this also
Modified: branches/locking-changes/fs/ocfs2/super.c
===================================================================
--- branches/locking-changes/fs/ocfs2/super.c 2005-10-04 22:09:51 UTC (rev 2633)
+++ branches/locking-changes/fs/ocfs2/super.c 2005-10-04 22:24:24 UTC (rev 2634)
@@ -151,6 +151,8 @@
Opt_nointr,
Opt_hb_none,
Opt_hb_local,
+ Opt_data_ordered,
+ Opt_data_writeback,
Opt_err,
};
@@ -165,6 +167,8 @@
{Opt_nointr, "nointr"},
{Opt_hb_none, OCFS2_HB_NONE},
{Opt_hb_local, OCFS2_HB_LOCAL},
+ {Opt_data_ordered, "data=ordered"},
+ {Opt_data_writeback, "data=writeback"},
{Opt_err, NULL}
};
@@ -373,6 +377,20 @@
goto out;
}
+ if ((osb->s_mount_opt & OCFS2_MOUNT_HB_LOCAL) !=
+ (parsed_options & OCFS2_MOUNT_HB_LOCAL)) {
+ ret = -EINVAL;
+ mlog(ML_ERROR, "Cannot change heartbeat mode on remount\n");
+ goto out;
+ }
+
+ if ((osb->s_mount_opt & OCFS2_MOUNT_DATA_WRITEBACK) !=
+ (parsed_options & OCFS2_MOUNT_DATA_WRITEBACK)) {
+ ret = -EINVAL;
+ mlog(ML_ERROR, "Cannot change data mode on remount\n");
+ goto out;
+ }
+
/* We're going to/from readonly mode. */
if ((*flags & MS_RDONLY) != (sb->s_flags & MS_RDONLY)) {
/* Lock here so the check of HARD_RO and the potential
@@ -629,9 +647,12 @@
ocfs2_complete_mount_recovery(osb);
- printk("ocfs2: Mounting device (%u,%u) on (node %d, slot %d)\n",
+ printk("ocfs2: Mounting device (%u,%u) on (node %d, slot %d) with %s "
+ "data mode.\n",
MAJOR(sb->s_dev), MINOR(sb->s_dev), osb->node_num,
- osb->slot_num);
+ osb->slot_num,
+ osb->s_mount_opt & OCFS2_MOUNT_DATA_WRITEBACK ? "writeback" :
+ "ordered");
atomic_set(&osb->vol_state, VOLUME_MOUNTED);
wake_up(&osb->osb_mount_event);
@@ -731,6 +752,12 @@
case Opt_err_ro:
*mount_opt &= ~OCFS2_MOUNT_ERRORS_PANIC;
break;
+ case Opt_data_ordered:
+ *mount_opt &= ~OCFS2_MOUNT_DATA_WRITEBACK;
+ break;
+ case Opt_data_writeback:
+ *mount_opt |= OCFS2_MOUNT_DATA_WRITEBACK;
+ break;
#ifdef OCFS2_ORACORE_WORKAROUNDS
case Opt_datavolume:
if (is_remount) {
More information about the Ocfs2-commits
mailing list