Discussion:
[Ocfs2-devel] ocfs2: Check heartbeat mode for kernel stacks only
Mark Fasheh
2011-01-31 19:31:04 UTC
Permalink
Commit 2c442719e90a44a6982c033d69df4aae4b167cfa added some checks for proper
heartbeat mode when the o2cb stack is running. Unfortunately, it didn't
take into account that a userpsace stack could be running. Fix this by only
doing the check if o2cb is in use. This patch allows userspace stacks to
mount the fs again.

Cc: ***@kernel.org
Signed-off-by: Mark Fasheh <***@suse.com>

Index: linux-2.6.32-SLE11-SP1/fs/ocfs2/super.c
===================================================================
--- linux-2.6.32-SLE11-SP1.orig/fs/ocfs2/super.c
+++ linux-2.6.32-SLE11-SP1/fs/ocfs2/super.c
@@ -1331,7 +1331,7 @@ static int ocfs2_parse_options(struct su
struct mount_options *mopt,
int is_remount)
{
- int status;
+ int status, user_stack = 0;
char *p;
u32 tmp;

@@ -1474,6 +1474,15 @@ static int ocfs2_parse_options(struct su
memcpy(mopt->cluster_stack, args[0].from,
OCFS2_STACK_LABEL_LEN);
mopt->cluster_stack[OCFS2_STACK_LABEL_LEN] = '\0';
+ /*
+ * Open code the memcmp here as we don't have
+ * an osb to pass to
+ * ocfs2_userspace_stack().
+ */
+ if (memcmp(mopt->cluster_stack,
+ OCFS2_CLASSIC_CLUSTER_STACK,
+ OCFS2_STACK_LABEL_LEN))
+ user_stack = 1;
break;
case Opt_inode64:
mopt->mount_opt |= OCFS2_MOUNT_INODE64;
@@ -1529,13 +1538,16 @@ static int ocfs2_parse_options(struct su
}
}

- /* Ensure only one heartbeat mode */
- tmp = mopt->mount_opt & (OCFS2_MOUNT_HB_LOCAL | OCFS2_MOUNT_HB_GLOBAL |
- OCFS2_MOUNT_HB_NONE);
- if (hweight32(tmp) != 1) {
- mlog(ML_ERROR, "Invalid heartbeat mount options\n");
- status = 0;
- goto bail;
+ if (user_stack == 0) {
+ /* Ensure only one heartbeat mode */
+ tmp = mopt->mount_opt & (OCFS2_MOUNT_HB_LOCAL |
+ OCFS2_MOUNT_HB_GLOBAL |
+ OCFS2_MOUNT_HB_NONE);
+ if (hweight32(tmp) != 1) {
+ mlog(ML_ERROR, "Invalid heartbeat mount options\n");
+ status = 0;
+ goto bail;
+ }
}

status = 1;
Sunil Mushran
2011-01-31 19:51:11 UTC
Permalink
Post by Mark Fasheh
Commit 2c442719e90a44a6982c033d69df4aae4b167cfa added some checks for proper
heartbeat mode when the o2cb stack is running. Unfortunately, it didn't
take into account that a userpsace stack could be running. Fix this by only
doing the check if o2cb is in use. This patch allows userspace stacks to
mount the fs again.
Index: linux-2.6.32-SLE11-SP1/fs/ocfs2/super.c
===================================================================
--- linux-2.6.32-SLE11-SP1.orig/fs/ocfs2/super.c
+++ linux-2.6.32-SLE11-SP1/fs/ocfs2/super.c
@@ -1331,7 +1331,7 @@ static int ocfs2_parse_options(struct su
struct mount_options *mopt,
int is_remount)
{
- int status;
+ int status, user_stack = 0;
char *p;
u32 tmp;
@@ -1474,6 +1474,15 @@ static int ocfs2_parse_options(struct su
memcpy(mopt->cluster_stack, args[0].from,
OCFS2_STACK_LABEL_LEN);
mopt->cluster_stack[OCFS2_STACK_LABEL_LEN] = '\0';
+ /*
+ * Open code the memcmp here as we don't have
+ * an osb to pass to
+ * ocfs2_userspace_stack().
+ */
+ if (memcmp(mopt->cluster_stack,
+ OCFS2_CLASSIC_CLUSTER_STACK,
+ OCFS2_STACK_LABEL_LEN))
+ user_stack = 1;
break;
mopt->mount_opt |= OCFS2_MOUNT_INODE64;
@@ -1529,13 +1538,16 @@ static int ocfs2_parse_options(struct su
}
}
- /* Ensure only one heartbeat mode */
- tmp = mopt->mount_opt& (OCFS2_MOUNT_HB_LOCAL | OCFS2_MOUNT_HB_GLOBAL |
- OCFS2_MOUNT_HB_NONE);
- if (hweight32(tmp) != 1) {
- mlog(ML_ERROR, "Invalid heartbeat mount options\n");
- status = 0;
- goto bail;
+ if (user_stack == 0) {
+ /* Ensure only one heartbeat mode */
+ tmp = mopt->mount_opt& (OCFS2_MOUNT_HB_LOCAL |
+ OCFS2_MOUNT_HB_GLOBAL |
+ OCFS2_MOUNT_HB_NONE);
+ if (hweight32(tmp) != 1) {
+ mlog(ML_ERROR, "Invalid heartbeat mount options\n");
+ status = 0;
+ goto bail;
+ }
}
status = 1;
Joel Becker
2011-02-20 10:41:09 UTC
Permalink
Post by Mark Fasheh
Commit 2c442719e90a44a6982c033d69df4aae4b167cfa added some checks for proper
heartbeat mode when the o2cb stack is running. Unfortunately, it didn't
take into account that a userpsace stack could be running. Fix this by only
doing the check if o2cb is in use. This patch allows userspace stacks to
mount the fs again.
This patch is now in the fixes branch of ocfs2.git.

Joel
--
"Where are my angels?
Where's my golden one?
And where is my hope
Now that my heroes are gone?"

http://www.jlbec.org/
***@evilplan.org
Loading...