staging: lustre: get entropy from nid when nid set.
authorNeilBrown <neilb@suse.com>
Thu, 1 Mar 2018 23:31:25 +0000 (10:31 +1100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 6 Mar 2018 12:17:27 +0000 (04:17 -0800)
When the 'lustre' module is loaded, it gets a list of
net devices and uses the node ids to  add entropy
to the prng.  This means that the network interfaces need
to be configured before the module is loaded, which prevents
the module from being compiled into a monolithic kernel.

So move this entropy addition to the moment when
the interface is imported to LNet and the node id is first known.

Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/lustre/lnet/lnet/api-ni.c
drivers/staging/lustre/lustre/llite/super25.c

index 48d25ccadbb37fde07e63e21d0f4ded701042238..90266be0132deca93e5d413ff7a935c7e065859f 100644 (file)
@@ -1214,6 +1214,7 @@ lnet_startup_lndni(struct lnet_ni *ni, struct lnet_ioctl_config_data *conf)
        struct lnet_lnd *lnd;
        struct lnet_tx_queue *tq;
        int i;
+       u32 seed;
 
        lnd_type = LNET_NETTYP(LNET_NIDNET(ni->ni_nid));
 
@@ -1352,6 +1353,12 @@ lnet_startup_lndni(struct lnet_ni *ni, struct lnet_ioctl_config_data *conf)
                tq->tq_credits = lnet_ni_tq_credits(ni);
        }
 
+       /* Nodes with small feet have little entropy. The NID for this
+        * node gives the most entropy in the low bits.
+        */
+       seed = LNET_NIDADDR(ni->ni_nid);
+       add_device_randomness(&seed, sizeof(seed));
+
        CDEBUG(D_LNI, "Added LNI %s [%d/%d/%d/%d]\n",
               libcfs_nid2str(ni->ni_nid), ni->ni_peertxcredits,
               lnet_ni_tq_credits(ni) * LNET_CPT_NUMBER,
index 9b0bb3541a84a8a95f2d26173a7a3cbaef87f6da..861e7a60f408e3b4c4b89cad9e40b70d56a49cf0 100644 (file)
@@ -85,8 +85,7 @@ MODULE_ALIAS_FS("lustre");
 
 static int __init lustre_init(void)
 {
-       struct lnet_process_id lnet_id;
-       int i, rc;
+       int rc;
 
        BUILD_BUG_ON(sizeof(LUSTRE_VOLATILE_HDR) !=
                     LUSTRE_VOLATILE_HDR_LEN + 1);
@@ -125,20 +124,6 @@ static int __init lustre_init(void)
                goto out_debugfs;
        }
 
-       /* Nodes with small feet have little entropy. The NID for this
-        * node gives the most entropy in the low bits
-        */
-       for (i = 0;; i++) {
-               u32 seed;
-
-               if (LNetGetId(i, &lnet_id) == -ENOENT)
-                       break;
-               if (LNET_NETTYP(LNET_NIDNET(lnet_id.nid)) != LOLND) {
-                        seed = LNET_NIDADDR(lnet_id.nid);
-                        add_device_randomness(&seed, sizeof(seed));
-               }
-       }
-
        rc = vvp_global_init();
        if (rc != 0)
                goto out_sysfs;