staging: lustre: mgc: add nid iteration
authorAlexander Boyko <alexander.boyko@seagate.com>
Sun, 18 Sep 2016 20:38:18 +0000 (16:38 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Sep 2016 08:03:40 +0000 (10:03 +0200)
mgc_apply_recover_logs use only first nid from entry,
this could be the problem for a cluster with several network
address for a one node.

Signed-off-by: Alexander Boyko <alexander.boyko@seagate.com>
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5950
Xyratex-bug-id: MRP-2255
Reviewed-on: http://review.whamcloud.com/12829
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: Mike Pershin <mike.pershin@intel.com>
Reviewed-by: Ann Koehler <amk@cray.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/lustre/lustre/mgc/mgc_request.c

index 2191ca1fdade03c1cd2cc3793e3bebeb96ffbd26..23374cae513365161036a328f09b78d9f89b7c78 100644 (file)
@@ -1159,7 +1159,7 @@ static int mgc_apply_recover_logs(struct obd_device *mgc,
 
        while (datalen > 0) {
                int   entry_len = sizeof(*entry);
-               int   is_ost;
+               int is_ost, i;
                struct obd_device *obd;
                char *obdname;
                char *cname;
@@ -1265,11 +1265,17 @@ static int mgc_apply_recover_logs(struct obd_device *mgc,
                        continue;
                }
 
-               /* TODO: iterate all nids to find one */
+               /* iterate all nids to find one */
                /* find uuid by nid */
-               rc = client_import_find_conn(obd->u.cli.cl_import,
-                                            entry->u.nids[0],
-                                            (struct obd_uuid *)uuid);
+               rc = -ENOENT;
+               for (i = 0; i < entry->mne_nid_count; i++) {
+                       rc = client_import_find_conn(obd->u.cli.cl_import,
+                                                    entry->u.nids[0],
+                                                    (struct obd_uuid *)uuid);
+                       if (!rc)
+                               break;
+               }
+
                up_read(&obd->u.cli.cl_sem);
                if (rc < 0) {
                        CERROR("mgc: cannot find uuid by nid %s\n",