Staging: hv: storvsc_drv: Compute max_outstanding_req_per_channel where it is needed
authorK. Y. Srinivasan <kys@microsoft.com>
Tue, 10 May 2011 14:55:58 +0000 (07:55 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Wed, 11 May 2011 20:49:23 +0000 (13:49 -0700)
Compute max_outstanding_req_per_channel where it is needed.

Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: Abhishek Kane <v-abkane@microsoft.com>
Signed-off-by: Hank Janssen <hjanssen@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/hv/storvsc_drv.c

index 07db877..7d8b8f9 100644 (file)
@@ -90,20 +90,6 @@ static int storvsc_initialize(struct hv_driver *driver)
        memcpy(&driver->dev_type, &gStorVscDeviceType,
               sizeof(struct hv_guid));
 
-
-       /*
-        * Divide the ring buffer data size (which is 1 page less
-        * than the ring buffer size since that page is reserved for
-        * the ring buffer indices) by the max request size (which is
-        * vmbus_channel_packet_multipage_buffer + struct vstor_packet + u64)
-        */
-       stor_driver->max_outstanding_req_per_channel =
-               ((stor_driver->ring_buffer_size - PAGE_SIZE) /
-                 ALIGN(MAX_MULTIPAGE_BUFFER_PACKET +
-                          sizeof(struct vstor_packet) + sizeof(u64),
-                          sizeof(u64)));
-
-
        return 0;
 }
 
@@ -797,13 +783,27 @@ static int storvsc_drv_init(void)
        int ret;
        struct storvsc_driver *storvsc_drv_obj = &storvsc_drv;
        struct hv_driver *drv = &storvsc_drv.base;
+       u32 max_outstanding_req_per_channel;
+
+       /*
+        * Divide the ring buffer data size (which is 1 page less
+        * than the ring buffer size since that page is reserved for
+        * the ring buffer indices) by the max request size (which is
+        * vmbus_channel_packet_multipage_buffer + struct vstor_packet + u64)
+        */
+
+       max_outstanding_req_per_channel =
+       ((storvsc_ringbuffer_size - PAGE_SIZE) /
+       ALIGN(MAX_MULTIPAGE_BUFFER_PACKET +
+       sizeof(struct vstor_packet) + sizeof(u64),
+       sizeof(u64)));
 
        storvsc_drv_obj->ring_buffer_size = storvsc_ringbuffer_size;
 
        /* Callback to client driver to complete the initialization */
        storvsc_initialize(&storvsc_drv_obj->base);
 
-       if (storvsc_drv_obj->max_outstanding_req_per_channel <
+       if (max_outstanding_req_per_channel <
            STORVSC_MAX_IO_REQUESTS)
                return -1;