struct storvsc_driver_object *stor_driver;
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 */
/* ASSERT(stor_driver->RingBufferSize >= (PAGE_SIZE << 1)); */
#ifndef _STORVSC_API_H_
#define _STORVSC_API_H_
+#include <linux/kernel.h>
#include "vstorage.h"
#include "vmbus_api.h"
/* Represents the block vsc driver */
struct storvsc_driver_object {
- /* Must be the first field */
- /* Which is a bug FIXME! */
struct hv_driver base;
/* Set by caller (in bytes) */
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 */
int stor_vsc_on_device_add(struct hv_device *device,
{
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 "
"sizeof(struct storvsc_request_extension)=%zd "