[SCSI] libfc: removes initializing fc_cpu_order and fc_cpu_mask per lport
authorVasu Dev <vasu.dev@intel.com>
Wed, 21 Oct 2009 23:27:28 +0000 (16:27 -0700)
committerJames Bottomley <James.Bottomley@suse.de>
Fri, 4 Dec 2009 18:00:29 +0000 (12:00 -0600)
Initializing these libfc globals per lport could mess up exch
allocation/free for existing lport.

So this patch moves their initialization to fc_setup_exch_mgr
so that these globals gets initialized only once for libfc.

Reported-by: Alex Lyakas <alexl@mellanox.co.il>
Signed-off-by: Vasu Dev <vasu.dev@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/libfc/fc_exch.c

index ae8f9e9ac9586477221e362bf7ca371688db1756..bdae9a9e7ae9adfd60f2a2c028140b1d2f698457 100644 (file)
@@ -2046,6 +2046,20 @@ int fc_exch_init(struct fc_lport *lp)
        if (!lp->tt.seq_exch_abort)
                lp->tt.seq_exch_abort = fc_seq_exch_abort;
 
+       return 0;
+}
+EXPORT_SYMBOL(fc_exch_init);
+
+/**
+ * fc_setup_exch_mgr() - Setup an exchange manager
+ */
+int fc_setup_exch_mgr()
+{
+       fc_em_cachep = kmem_cache_create("libfc_em", sizeof(struct fc_exch),
+                                        0, SLAB_HWCACHE_ALIGN, NULL);
+       if (!fc_em_cachep)
+               return -ENOMEM;
+
        /*
         * Initialize fc_cpu_mask and fc_cpu_order. The
         * fc_cpu_mask is set for nr_cpu_ids rounded up
@@ -2070,16 +2084,6 @@ int fc_exch_init(struct fc_lport *lp)
 
        return 0;
 }
-EXPORT_SYMBOL(fc_exch_init);
-
-int fc_setup_exch_mgr(void)
-{
-       fc_em_cachep = kmem_cache_create("libfc_em", sizeof(struct fc_exch),
-                                        0, SLAB_HWCACHE_ALIGN, NULL);
-       if (!fc_em_cachep)
-               return -ENOMEM;
-       return 0;
-}
 
 void fc_destroy_exch_mgr(void)
 {