Commit ced01b0d authored by K. Y. Srinivasan's avatar K. Y. Srinivasan Committed by Greg Kroah-Hartman

Staging: hv: Add a function to map a hv_driver pointer to storvsc driver

Get rid of the need for struct hv_device to be the first
element of struct host_device_context.
Signed-off-by: default avatarK. Y. Srinivasan <kys@microsoft.com>
Signed-off-by: default avatarHaiyang Zhang <haiyangz@microsoft.com>
Signed-off-by: default avatarAbhishek Kane <v-abkane@microsoft.com>
Signed-off-by: default avatarHank Janssen <hjanssen@microsoft.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 1e05d88e
...@@ -154,7 +154,7 @@ static int blk_vsc_initialize(struct hv_driver *driver) ...@@ -154,7 +154,7 @@ static int blk_vsc_initialize(struct hv_driver *driver)
struct storvsc_driver_object *stor_driver; struct storvsc_driver_object *stor_driver;
int ret = 0; int ret = 0;
stor_driver = (struct storvsc_driver_object *)driver; stor_driver = hvdr_to_stordr(driver);
/* Make sure we are at least 2 pages since 1 page is used for control */ /* Make sure we are at least 2 pages since 1 page is used for control */
/* ASSERT(stor_driver->RingBufferSize >= (PAGE_SIZE << 1)); */ /* ASSERT(stor_driver->RingBufferSize >= (PAGE_SIZE << 1)); */
......
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#ifndef _STORVSC_API_H_ #ifndef _STORVSC_API_H_
#define _STORVSC_API_H_ #define _STORVSC_API_H_
#include <linux/kernel.h>
#include "vstorage.h" #include "vstorage.h"
#include "vmbus_api.h" #include "vmbus_api.h"
...@@ -90,8 +91,6 @@ struct hv_storvsc_request { ...@@ -90,8 +91,6 @@ struct hv_storvsc_request {
/* Represents the block vsc driver */ /* Represents the block vsc driver */
struct storvsc_driver_object { struct storvsc_driver_object {
/* Must be the first field */
/* Which is a bug FIXME! */
struct hv_driver base; struct hv_driver base;
/* Set by caller (in bytes) */ /* Set by caller (in bytes) */
...@@ -159,6 +158,11 @@ static inline void put_stor_device(struct hv_device *device) ...@@ -159,6 +158,11 @@ static inline void put_stor_device(struct hv_device *device)
atomic_dec(&stor_device->ref_count); atomic_dec(&stor_device->ref_count);
} }
static inline struct storvsc_driver_object *hvdr_to_stordr(struct hv_driver *d)
{
return container_of(d, struct storvsc_driver_object, base);
}
/* Interface */ /* Interface */
int stor_vsc_on_device_add(struct hv_device *device, int stor_vsc_on_device_add(struct hv_device *device,
......
...@@ -79,7 +79,7 @@ static int stor_vsc_initialize(struct hv_driver *driver) ...@@ -79,7 +79,7 @@ static int stor_vsc_initialize(struct hv_driver *driver)
{ {
struct storvsc_driver_object *stor_driver; struct storvsc_driver_object *stor_driver;
stor_driver = (struct storvsc_driver_object *)driver; stor_driver = hvdr_to_stordr(driver);
DPRINT_DBG(STORVSC, "sizeof(STORVSC_REQUEST)=%zd " DPRINT_DBG(STORVSC, "sizeof(STORVSC_REQUEST)=%zd "
"sizeof(struct storvsc_request_extension)=%zd " "sizeof(struct storvsc_request_extension)=%zd "
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment