When a filesystem is mounted without any options, the mount succeeds
however remounting is later not possible as the kernel complains:

(mount,568,0):ocfs2_remount:657 ERROR: Cannot change heartbeat mode on
remount

The problem is that in this case no heartbeat option got set and so
remount with heartbeat=none as shown in /proc/mounts is considered
to be a change of hearbeat mode.

Fix the problem by defaulting heartbeat mode to 'none' and making sure
it gets set when no mount options are specified.

Signed-off-by: Jan Kara <j...@suse.cz>
---
 fs/ocfs2/super.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index af4481b98c65..45d59766a357 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -1289,10 +1289,8 @@ static int ocfs2_parse_options(struct super_block *sb,
        mopt->resv_level = OCFS2_DEFAULT_RESV_LEVEL;
        mopt->dir_resv_level = -1;
 
-       if (!options) {
-               status = 1;
-               goto bail;
-       }
+       if (!options)
+               goto check_opts;
 
        while ((p = strsep(&options, ",")) != NULL) {
                if (!*p)
@@ -1486,15 +1484,21 @@ static int ocfs2_parse_options(struct super_block *sb,
                }
        }
 
+check_opts:
        if (user_stack == 0) {
+               int weight;
+
                /* 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) {
+               weight = hweight32(tmp);
+               if (weight > 1) {
                        mlog(ML_ERROR, "Invalid heartbeat mount options\n");
                        status = 0;
                        goto bail;
+               } else if (weight == 0) {
+                       mopt->mount_opt |= OCFS2_MOUNT_HB_NONE;
                }
        }
 
-- 
2.13.6


_______________________________________________
Ocfs2-devel mailing list
Ocfs2-devel@oss.oracle.com
https://oss.oracle.com/mailman/listinfo/ocfs2-devel

Reply via email to