diff options
Diffstat (limited to 'drivers/hv/hv_balloon.c')
| -rw-r--r-- | drivers/hv/hv_balloon.c | 35 | 
1 files changed, 21 insertions, 14 deletions
diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c index f6c0011a033..dd289fd179c 100644 --- a/drivers/hv/hv_balloon.c +++ b/drivers/hv/hv_balloon.c @@ -403,7 +403,7 @@ struct dm_info_header {   */  struct dm_info_msg { -	struct dm_info_header header; +	struct dm_header hdr;  	__u32 reserved;  	__u32 info_size;  	__u8  info[]; @@ -503,13 +503,17 @@ static void hot_add_req(struct hv_dynmem_device *dm, struct dm_hot_add *msg)  static void process_info(struct hv_dynmem_device *dm, struct dm_info_msg *msg)  { -	switch (msg->header.type) { +	struct dm_info_header *info_hdr; + +	info_hdr = (struct dm_info_header *)msg->info; + +	switch (info_hdr->type) {  	case INFO_TYPE_MAX_PAGE_CNT:  		pr_info("Received INFO_TYPE_MAX_PAGE_CNT\n"); -		pr_info("Data Size is %d\n", msg->header.data_size); +		pr_info("Data Size is %d\n", info_hdr->data_size);  		break;  	default: -		pr_info("Received Unknown type: %d\n", msg->header.type); +		pr_info("Received Unknown type: %d\n", info_hdr->type);  	}  } @@ -879,7 +883,7 @@ static int balloon_probe(struct hv_device *dev,  			balloon_onchannelcallback, dev);  	if (ret) -		return ret; +		goto probe_error0;  	dm_device.dev = dev;  	dm_device.state = DM_INITIALIZING; @@ -891,7 +895,7 @@ static int balloon_probe(struct hv_device *dev,  		 kthread_run(dm_thread_func, &dm_device, "hv_balloon");  	if (IS_ERR(dm_device.thread)) {  		ret = PTR_ERR(dm_device.thread); -		goto probe_error0; +		goto probe_error1;  	}  	hv_set_drvdata(dev, &dm_device); @@ -914,12 +918,12 @@ static int balloon_probe(struct hv_device *dev,  				VM_PKT_DATA_INBAND,  				VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);  	if (ret) -		goto probe_error1; +		goto probe_error2;  	t = wait_for_completion_timeout(&dm_device.host_event, 5*HZ);  	if (t == 0) {  		ret = -ETIMEDOUT; -		goto probe_error1; +		goto probe_error2;  	}  	/* @@ -928,7 +932,7 @@ static int balloon_probe(struct hv_device *dev,  	 */  	if (dm_device.state == DM_INIT_ERROR) {  		ret = -ETIMEDOUT; -		goto probe_error1; +		goto probe_error2;  	}  	/*  	 * Now submit our capabilities to the host. @@ -961,12 +965,12 @@ static int balloon_probe(struct hv_device *dev,  				VM_PKT_DATA_INBAND,  				VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);  	if (ret) -		goto probe_error1; +		goto probe_error2;  	t = wait_for_completion_timeout(&dm_device.host_event, 5*HZ);  	if (t == 0) {  		ret = -ETIMEDOUT; -		goto probe_error1; +		goto probe_error2;  	}  	/* @@ -975,18 +979,20 @@ static int balloon_probe(struct hv_device *dev,  	 */  	if (dm_device.state == DM_INIT_ERROR) {  		ret = -ETIMEDOUT; -		goto probe_error1; +		goto probe_error2;  	}  	dm_device.state = DM_INITIALIZED;  	return 0; -probe_error1: +probe_error2:  	kthread_stop(dm_device.thread); -probe_error0: +probe_error1:  	vmbus_close(dev->channel); +probe_error0: +	kfree(send_buffer);  	return ret;  } @@ -999,6 +1005,7 @@ static int balloon_remove(struct hv_device *dev)  	vmbus_close(dev->channel);  	kthread_stop(dm->thread); +	kfree(send_buffer);  	return 0;  }  |