The patch fixed the code depending on the exact order of fields in the struct storvsc_driver_context. Now, we use container_of() instead of type casting from the first field to the container struct. Signed-off-by: Haiyang Zhang <haiyangz@xxxxxxxxxxxxx> Signed-off-by: K. Y. Srinivasan <kys@xxxxxxxxxxxxx> Signed-off-by: Hank Janssen <hjanssen@xxxxxxxxxxxxx> --- drivers/staging/hv/storvsc_drv.c | 14 ++++++-------- 1 files changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c index 33acee5..a364627 100644 --- a/drivers/staging/hv/storvsc_drv.c +++ b/drivers/staging/hv/storvsc_drv.c @@ -64,8 +64,6 @@ struct storvsc_cmd_request { }; struct storvsc_driver_context { - /* !! These must be the first 2 fields !! */ - /* FIXME this is a bug... */ struct driver_context drv_ctx; struct storvsc_driver_object drv_obj; }; @@ -223,8 +221,8 @@ static int storvsc_probe(struct device *device) int ret; struct driver_context *driver_ctx = driver_to_driver_context(device->driver); - struct storvsc_driver_context *storvsc_drv_ctx = - (struct storvsc_driver_context *)driver_ctx; + struct storvsc_driver_context *storvsc_drv_ctx = container_of( + driver_ctx, struct storvsc_driver_context, drv_ctx); struct storvsc_driver_object *storvsc_drv_obj = &storvsc_drv_ctx->drv_obj; struct vm_device *device_ctx = device_to_vm_device(device); @@ -308,8 +306,8 @@ static int storvsc_remove(struct device *device) int ret; struct driver_context *driver_ctx = driver_to_driver_context(device->driver); - struct storvsc_driver_context *storvsc_drv_ctx = - (struct storvsc_driver_context *)driver_ctx; + struct storvsc_driver_context *storvsc_drv_ctx = container_of( + driver_ctx, struct storvsc_driver_context, drv_ctx); struct storvsc_driver_object *storvsc_drv_obj = &storvsc_drv_ctx->drv_obj; struct vm_device *device_ctx = device_to_vm_device(device); @@ -606,8 +604,8 @@ static int storvsc_queuecommand_lck(struct scsi_cmnd *scmnd, struct vm_device *device_ctx = host_device_ctx->device_ctx; struct driver_context *driver_ctx = driver_to_driver_context(device_ctx->device.driver); - struct storvsc_driver_context *storvsc_drv_ctx = - (struct storvsc_driver_context *)driver_ctx; + struct storvsc_driver_context *storvsc_drv_ctx = container_of( + driver_ctx, struct storvsc_driver_context, drv_ctx); struct storvsc_driver_object *storvsc_drv_obj = &storvsc_drv_ctx->drv_obj; struct hv_storvsc_request *request; -- 1.6.3.2 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel