[S390] Avoid excessive inlining.
[deliverable/linux.git] / drivers / s390 / scsi / zfcp_aux.c
index adc9d8f2c28fae87e13cc8199273dbb9c938a02e..39a8852667909b3d0c57e282f9b0ae72bf46078d 100644 (file)
@@ -47,13 +47,12 @@ static int __init  zfcp_module_init(void);
 static void zfcp_ns_gid_pn_handler(unsigned long);
 
 /* miscellaneous */
-static inline int zfcp_sg_list_alloc(struct zfcp_sg_list *, size_t);
-static inline void zfcp_sg_list_free(struct zfcp_sg_list *);
-static inline int zfcp_sg_list_copy_from_user(struct zfcp_sg_list *,
-                                             void __user *, size_t);
-static inline int zfcp_sg_list_copy_to_user(void __user *,
-                                           struct zfcp_sg_list *, size_t);
-
+static int zfcp_sg_list_alloc(struct zfcp_sg_list *, size_t);
+static void zfcp_sg_list_free(struct zfcp_sg_list *);
+static int zfcp_sg_list_copy_from_user(struct zfcp_sg_list *,
+                                      void __user *, size_t);
+static int zfcp_sg_list_copy_to_user(void __user *,
+                                    struct zfcp_sg_list *, size_t);
 static long zfcp_cfdc_dev_ioctl(struct file *, unsigned int, unsigned long);
 
 #define ZFCP_CFDC_IOC_MAGIC                     0xDD
@@ -189,6 +188,10 @@ struct zfcp_fsf_req *zfcp_reqlist_ismember(struct zfcp_adapter *adapter,
        struct zfcp_fsf_req *request, *tmp;
        unsigned int i;
 
+       /* 0 is reserved as an invalid req_id */
+       if (req_id == 0)
+               return NULL;
+
        i = req_id % REQUEST_LIST_SIZE;
 
        list_for_each_entry_safe(request, tmp, &adapter->req_list[i], list)
@@ -233,7 +236,7 @@ zfcp_device_setup(char *devstr)
                return 0;
 
        len = strlen(devstr) + 1;
-       str = (char *) kmalloc(len, GFP_KERNEL);
+       str = kmalloc(len, GFP_KERNEL);
        if (!str)
                goto err_out;
        memcpy(str, devstr, len);
@@ -299,11 +302,45 @@ zfcp_init_device_configure(void)
        return;
 }
 
+static int calc_alignment(int size)
+{
+       int align = 1;
+
+       if (!size)
+               return 0;
+
+       while ((size - align) > 0)
+               align <<= 1;
+
+       return align;
+}
+
 static int __init
 zfcp_module_init(void)
 {
+       int retval = -ENOMEM;
+       int size, align;
+
+       size = sizeof(struct zfcp_fsf_req_qtcb);
+       align = calc_alignment(size);
+       zfcp_data.fsf_req_qtcb_cache =
+               kmem_cache_create("zfcp_fsf", size, align, 0, NULL, NULL);
+       if (!zfcp_data.fsf_req_qtcb_cache)
+               goto out;
 
-       int retval = 0;
+       size = sizeof(struct fsf_status_read_buffer);
+       align = calc_alignment(size);
+       zfcp_data.sr_buffer_cache =
+               kmem_cache_create("zfcp_sr", size, align, 0, NULL, NULL);
+       if (!zfcp_data.sr_buffer_cache)
+               goto out_sr_cache;
+
+       size = sizeof(struct zfcp_gid_pn_data);
+       align = calc_alignment(size);
+       zfcp_data.gid_pn_cache =
+               kmem_cache_create("zfcp_gid", size, align, 0, NULL, NULL);
+       if (!zfcp_data.gid_pn_cache)
+               goto out_gid_cache;
 
        atomic_set(&zfcp_data.loglevel, loglevel);
 
@@ -313,15 +350,16 @@ zfcp_module_init(void)
        /* initialize adapters to be removed list head */
        INIT_LIST_HEAD(&zfcp_data.adapter_remove_lh);
 
-       zfcp_transport_template = fc_attach_transport(&zfcp_transport_functions);
-       if (!zfcp_transport_template)
-               return -ENODEV;
+       zfcp_data.scsi_transport_template =
+               fc_attach_transport(&zfcp_transport_functions);
+       if (!zfcp_data.scsi_transport_template)
+               goto out_transport;
 
        retval = misc_register(&zfcp_cfdc_misc);
        if (retval != 0) {
                ZFCP_LOG_INFO("registration of misc device "
                              "zfcp_cfdc failed\n");
-               goto out;
+               goto out_misc;
        }
 
        ZFCP_LOG_TRACE("major/minor for zfcp_cfdc: %d/%d\n",
@@ -333,9 +371,6 @@ zfcp_module_init(void)
        /* initialise configuration rw lock */
        rwlock_init(&zfcp_data.config_lock);
 
-       /* save address of data structure managing the driver module */
-       zfcp_data.scsi_host_template.module = THIS_MODULE;
-
        /* setup dynamic I/O */
        retval = zfcp_ccw_register();
        if (retval) {
@@ -350,6 +385,14 @@ zfcp_module_init(void)
 
  out_ccw_register:
        misc_deregister(&zfcp_cfdc_misc);
+ out_misc:
+       fc_release_transport(zfcp_data.scsi_transport_template);
+ out_transport:
+       kmem_cache_destroy(zfcp_data.gid_pn_cache);
+ out_gid_cache:
+       kmem_cache_destroy(zfcp_data.sr_buffer_cache);
+ out_sr_cache:
+       kmem_cache_destroy(zfcp_data.fsf_req_qtcb_cache);
  out:
        return retval;
 }
@@ -561,7 +604,7 @@ zfcp_cfdc_dev_ioctl(struct file *file, unsigned int command,
  * elements of the scatter-gather list. The maximum size of a single element
  * in the scatter-gather list is PAGE_SIZE.
  */
-static inline int
+static int
 zfcp_sg_list_alloc(struct zfcp_sg_list *sg_list, size_t size)
 {
        struct scatterlist *sg;
@@ -608,7 +651,7 @@ zfcp_sg_list_alloc(struct zfcp_sg_list *sg_list, size_t size)
  * Memory for each element in the scatter-gather list is freed.
  * Finally sg_list->sg is freed itself and sg_list->count is reset.
  */
-static inline void
+static void
 zfcp_sg_list_free(struct zfcp_sg_list *sg_list)
 {
        struct scatterlist *sg;
@@ -653,7 +696,7 @@ zfcp_sg_size(struct scatterlist *sg, unsigned int sg_count)
  * @size: number of bytes to be copied
  * Return: 0 on success, -EFAULT if copy_from_user fails.
  */
-static inline int
+static int
 zfcp_sg_list_copy_from_user(struct zfcp_sg_list *sg_list,
                            void __user *user_buffer,
                             size_t size)
@@ -691,7 +734,7 @@ zfcp_sg_list_copy_from_user(struct zfcp_sg_list *sg_list,
  * @size: number of bytes to be copied
  * Return: 0 on success, -EFAULT if copy_to_user fails
  */
-static inline int
+static int
 zfcp_sg_list_copy_to_user(void __user  *user_buffer,
                          struct zfcp_sg_list *sg_list,
                           size_t size)
@@ -935,20 +978,20 @@ static int
 zfcp_allocate_low_mem_buffers(struct zfcp_adapter *adapter)
 {
        adapter->pool.fsf_req_erp =
-               mempool_create_kmalloc_pool(ZFCP_POOL_FSF_REQ_ERP_NR,
-                               sizeof(struct zfcp_fsf_req_pool_element));
+               mempool_create_slab_pool(ZFCP_POOL_FSF_REQ_ERP_NR,
+                                        zfcp_data.fsf_req_qtcb_cache);
        if (!adapter->pool.fsf_req_erp)
                return -ENOMEM;
 
        adapter->pool.fsf_req_scsi =
-               mempool_create_kmalloc_pool(ZFCP_POOL_FSF_REQ_SCSI_NR,
-                               sizeof(struct zfcp_fsf_req_pool_element));
+               mempool_create_slab_pool(ZFCP_POOL_FSF_REQ_SCSI_NR,
+                                        zfcp_data.fsf_req_qtcb_cache);
        if (!adapter->pool.fsf_req_scsi)
                return -ENOMEM;
 
        adapter->pool.fsf_req_abort =
-               mempool_create_kmalloc_pool(ZFCP_POOL_FSF_REQ_ABORT_NR,
-                               sizeof(struct zfcp_fsf_req_pool_element));
+               mempool_create_slab_pool(ZFCP_POOL_FSF_REQ_ABORT_NR,
+                                        zfcp_data.fsf_req_qtcb_cache);
        if (!adapter->pool.fsf_req_abort)
                return -ENOMEM;
 
@@ -959,14 +1002,14 @@ zfcp_allocate_low_mem_buffers(struct zfcp_adapter *adapter)
                return -ENOMEM;
 
        adapter->pool.data_status_read =
-               mempool_create_kmalloc_pool(ZFCP_POOL_STATUS_READ_NR,
-                                       sizeof(struct fsf_status_read_buffer));
+               mempool_create_slab_pool(ZFCP_POOL_STATUS_READ_NR,
+                                        zfcp_data.sr_buffer_cache);
        if (!adapter->pool.data_status_read)
                return -ENOMEM;
 
        adapter->pool.data_gid_pn =
-               mempool_create_kmalloc_pool(ZFCP_POOL_DATA_GID_PN_NR,
-                                           sizeof(struct zfcp_gid_pn_data));
+               mempool_create_slab_pool(ZFCP_POOL_DATA_GID_PN_NR,
+                                        zfcp_data.gid_pn_cache);
        if (!adapter->pool.data_gid_pn)
                return -ENOMEM;
 
@@ -1091,9 +1134,6 @@ zfcp_adapter_enqueue(struct ccw_device *ccw_device)
        /* initialize lock of associated request queue */
        rwlock_init(&adapter->request_queue.queue_lock);
 
-       /* intitialise SCSI ER timer */
-       init_timer(&adapter->scsi_er_timer);
-
        /* mark adapter unusable as long as sysfs registration is not complete */
        atomic_set_mask(ZFCP_STATUS_COMMON_REMOVE, &adapter->status);
 
@@ -1609,7 +1649,6 @@ zfcp_ns_gid_pn_request(struct zfcp_erp_action *erp_action)
        gid_pn->ct.handler = zfcp_ns_gid_pn_handler;
        gid_pn->ct.handler_data = (unsigned long) gid_pn;
         gid_pn->ct.timeout = ZFCP_NS_GID_PN_TIMEOUT;
-        gid_pn->ct.timer = &erp_action->timer;
        gid_pn->port = erp_action->port;
 
        ret = zfcp_fsf_send_ct(&gid_pn->ct, adapter->pool.fsf_req_erp,
@@ -1759,7 +1798,7 @@ static const struct zfcp_rc_entry zfcp_p_rjt_rc[] = {
  * @code: reason code
  * @rc_table: table of reason codes and descriptions
  */
-static inline const char *
+static const char *
 zfcp_rc_description(u8 code, const struct zfcp_rc_entry *rc_table)
 {
        const char *descr = "unknown reason code";
@@ -1807,7 +1846,7 @@ zfcp_check_ct_response(struct ct_hdr *rjt)
  * @rjt_par: reject parameter acc. to FC-PH/FC-FS
  * @rc_table: table of reason codes and descriptions
  */
-static inline void
+static void
 zfcp_print_els_rjt(struct zfcp_ls_rjt_par *rjt_par,
                   const struct zfcp_rc_entry *rc_table)
 {
This page took 0.037923 seconds and 5 git commands to generate.