staging: lustre: obd: MDT mount fails on MDS w/o MGS on it
authorBobi Jam <[email protected]>
Tue, 12 Apr 2016 20:14:08 +0000 (16:14 -0400)
committerGreg Kroah-Hartman <[email protected]>
Tue, 26 Apr 2016 22:13:13 +0000 (15:13 -0700)
If we specify multiple --mgsnode for a MDT, when we start MDS upon
it while MGS is no the other node, the MGC import connection will
always select the local nid (which is one of the candidate mgsnode)
since it think its the closest connection.

This patch treats further --mgsnode nids as failover nids, so that
multiple import connections are added for the MGC import.

Signed-off-by: Bobi Jam <[email protected]>
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3829
Reviewed-on: http://review.whamcloud.com/7509
Reviewed-by: Liang Zhen <[email protected]>
Reviewed-by: Lai Siyao <[email protected]>
Reviewed-by: Oleg Drokin <[email protected]>
Signed-off-by: James Simmons <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
drivers/staging/lustre/lustre/obdclass/obd_mount.c

index d3e28a389ac132b7a3bfb2be1e2c6b8a83c63be5..9474aa902bd0880ba77f836bada2af4d15921a73 100644 (file)
@@ -307,7 +307,8 @@ int lustre_start_mgc(struct super_block *sb)
        while (class_parse_nid(ptr, &nid, &ptr) == 0) {
                rc = do_lcfg(mgcname, nid,
                             LCFG_ADD_UUID, niduuid, NULL, NULL, NULL);
-               i++;
+               if (!rc)
+                       i++;
                /* Stop at the first failover nid */
                if (*ptr == ':')
                        break;
@@ -345,16 +346,18 @@ int lustre_start_mgc(struct super_block *sb)
                sprintf(niduuid, "%s_%x", mgcname, i);
                j = 0;
                while (class_parse_nid_quiet(ptr, &nid, &ptr) == 0) {
-                       j++;
-                       rc = do_lcfg(mgcname, nid,
-                                    LCFG_ADD_UUID, niduuid, NULL, NULL, NULL);
+                       rc = do_lcfg(mgcname, nid, LCFG_ADD_UUID, niduuid,
+                                    NULL, NULL, NULL);
+                       if (!rc)
+                               ++j;
                        if (*ptr == ':')
                                break;
                }
                if (j > 0) {
                        rc = do_lcfg(mgcname, 0, LCFG_ADD_CONN,
                                     niduuid, NULL, NULL, NULL);
-                       i++;
+                       if (!rc)
+                               i++;
                } else {
                        /* at ":/fsname" */
                        break;