|
@@ -1316,7 +1316,7 @@ static int ocfs2_parse_options(struct super_block *sb,
|
|
|
struct mount_options *mopt,
|
|
|
int is_remount)
|
|
|
{
|
|
|
- int status;
|
|
|
+ int status, user_stack = 0;
|
|
|
char *p;
|
|
|
u32 tmp;
|
|
|
|
|
@@ -1459,6 +1459,15 @@ static int ocfs2_parse_options(struct super_block *sb,
|
|
|
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;
|
|
@@ -1514,13 +1523,16 @@ static int ocfs2_parse_options(struct super_block *sb,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* 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;
|