diff options
Diffstat (limited to 'net/9p/trans_virtio.c')
| -rw-r--r-- | net/9p/trans_virtio.c | 19 | 
1 files changed, 10 insertions, 9 deletions
diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c index 990afab2be1..6940d8fe897 100644 --- a/net/9p/trans_virtio.c +++ b/net/9p/trans_virtio.c @@ -164,8 +164,7 @@ static void req_done(struct virtqueue *vq)  		p9_debug(P9_DEBUG_TRANS, ": rc %p\n", rc);  		p9_debug(P9_DEBUG_TRANS, ": lookup tag %d\n", rc->tag);  		req = p9_tag_lookup(chan->client, rc->tag); -		req->status = REQ_STATUS_RCVD; -		p9_client_cb(chan->client, req); +		p9_client_cb(chan->client, req, REQ_STATUS_RCVD);  	}  } @@ -340,7 +339,10 @@ static int p9_get_mapped_pages(struct virtio_chan *chan,  		int count = nr_pages;  		while (nr_pages) {  			s = rest_of_page(data); -			pages[index++] = kmap_to_page(data); +			if (is_vmalloc_addr(data)) +				pages[index++] = vmalloc_to_page(data); +			else +				pages[index++] = kmap_to_page(data);  			data += s;  			nr_pages--;  		} @@ -544,9 +546,7 @@ static int p9_virtio_probe(struct virtio_device *vdev)  	chan->inuse = false;  	if (virtio_has_feature(vdev, VIRTIO_9P_MOUNT_TAG)) { -		vdev->config->get(vdev, -				offsetof(struct virtio_9p_config, tag_len), -				&tag_len, sizeof(tag_len)); +		virtio_cread(vdev, struct virtio_9p_config, tag_len, &tag_len);  	} else {  		err = -EINVAL;  		goto out_free_vq; @@ -556,8 +556,9 @@ static int p9_virtio_probe(struct virtio_device *vdev)  		err = -ENOMEM;  		goto out_free_vq;  	} -	vdev->config->get(vdev, offsetof(struct virtio_9p_config, tag), -			tag, tag_len); + +	virtio_cread_bytes(vdev, offsetof(struct virtio_9p_config, tag), +			   tag, tag_len);  	chan->tag = tag;  	chan->tag_len = tag_len;  	err = sysfs_create_file(&(vdev->dev.kobj), &dev_attr_mount_tag.attr); @@ -699,7 +700,7 @@ static struct p9_trans_module p9_virtio_trans = {  	 * page in zero copy.  	 */  	.maxsize = PAGE_SIZE * (VIRTQUEUE_NUM - 3), -	.def = 0, +	.def = 1,  	.owner = THIS_MODULE,  };  | 
