staging: lustre: lnet: revert commit 4671a0266
authorJames Simmons <jsimmons@infradead.org>
Thu, 24 Mar 2016 15:24:02 +0000 (11:24 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 28 Mar 2016 14:30:36 +0000 (07:30 -0700)
Commit 4671a0266 change the parameter of the second parameter of
cfs_precpt_alloc() from a sizeof type to sizeof type *pointer.
This was incorrect in this case and it caused a crash when the LNet
layer was brought up in my testing. The reason is cfs_precpt_alloc()
creates an array of items where the arrays size is equal to the
number of CPTs that exist. Changing to type *pointer only had
cfs_precpt_alloc() create an array of pointers instead of an array
of actual data structures. This patch reverse this change and adds
comments to explain what cfs_precpt_alloc() is actually doing to
avoid potential issues like this again.

Changelog:

v1) Simple revert of the original patch

v2) Added in comments to explain why cfs_precpt_alloc() has the
    arguments it uses.

Signed-off-by: James Simmons <jsimmons@infradead.org>
Cc: Sandhya Bankar <bankarsandhya512@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c

index 89f939092af4fe612b30f276fdf014e36f86bccd..e89c2a1bfa13077483023a901f1ae484d6a97f3c 100644 (file)
@@ -1965,10 +1965,13 @@ static int kiblnd_net_init_pools(kib_net_t *net, __u32 *cpts, int ncpts)
        /*
         * premapping can fail if ibd_nmr > 1, so we always create
         * FMR pool and map-on-demand if premapping failed
+        *
+        * cfs_precpt_alloc is creating an array of struct kib_fmr_poolset
+        * The number of struct kib_fmr_poolsets create is equal to the
+        * number of CPTs that exist, i.e net->ibn_fmr_ps[cpt].
         */
-
        net->ibn_fmr_ps = cfs_percpt_alloc(lnet_cpt_table(),
-                                          sizeof(*net->ibn_fmr_ps));
+                                          sizeof(kib_fmr_poolset_t));
        if (!net->ibn_fmr_ps) {
                CERROR("Failed to allocate FMR pool array\n");
                rc = -ENOMEM;
@@ -1991,8 +1994,13 @@ static int kiblnd_net_init_pools(kib_net_t *net, __u32 *cpts, int ncpts)
                LASSERT(i == ncpts);
 
  create_tx_pool:
+       /*
+        * cfs_precpt_alloc is creating an array of struct kib_tx_poolset
+        * The number of struct kib_tx_poolsets create is equal to the
+        * number of CPTs that exist, i.e net->ibn_tx_ps[cpt].
+        */
        net->ibn_tx_ps = cfs_percpt_alloc(lnet_cpt_table(),
-                                         sizeof(*net->ibn_tx_ps));
+                                         sizeof(kib_tx_poolset_t));
        if (!net->ibn_tx_ps) {
                CERROR("Failed to allocate tx pool array\n");
                rc = -ENOMEM;