diff options
| author | Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> | 2010-03-05 23:44:15 -0500 |
|---|---|---|
| committer | Eric Van Hensbergen <ericvh@gmail.com> | 2010-03-13 09:57:29 -0500 |
| commit | 86c8437383acd85c05ec7c9a004f59fe7ac9821a (patch) | |
| tree | 05c2b805162f0aaf8f7d52e0b7fab4e12f8dcb75 | |
| parent | 97ee9b0257402f4731b55dfea42f24d26d793ddf (diff) | |
net/9p: Add sysfs mount_tag file for virtio 9P device
This adds a new file for virtio 9P device. The file
contain details of the mount device name that should
be used to mount the 9P file system.
Ex: /sys/devices/virtio-pci/virtio1/mount_tag file now
contian the tag name to be used to mount the 9P file system.
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
| -rw-r--r-- | include/linux/virtio.h | 1 | ||||
| -rw-r--r-- | net/9p/trans_virtio.c | 20 |
2 files changed, 21 insertions, 0 deletions
diff --git a/include/linux/virtio.h b/include/linux/virtio.h index f508c651e53d..40d1709bdbf4 100644 --- a/include/linux/virtio.h +++ b/include/linux/virtio.h | |||
| @@ -98,6 +98,7 @@ struct virtio_device { | |||
| 98 | void *priv; | 98 | void *priv; |
| 99 | }; | 99 | }; |
| 100 | 100 | ||
| 101 | #define dev_to_virtio(dev) container_of(dev, struct virtio_device, dev) | ||
| 101 | int register_virtio_device(struct virtio_device *dev); | 102 | int register_virtio_device(struct virtio_device *dev); |
| 102 | void unregister_virtio_device(struct virtio_device *dev); | 103 | void unregister_virtio_device(struct virtio_device *dev); |
| 103 | 104 | ||
diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c index 026775ad391a..afde1a89fbb3 100644 --- a/net/9p/trans_virtio.c +++ b/net/9p/trans_virtio.c | |||
| @@ -220,6 +220,20 @@ p9_virtio_request(struct p9_client *client, struct p9_req_t *req) | |||
| 220 | return 0; | 220 | return 0; |
| 221 | } | 221 | } |
| 222 | 222 | ||
| 223 | static ssize_t p9_mount_tag_show(struct device *dev, | ||
| 224 | struct device_attribute *attr, char *buf) | ||
| 225 | { | ||
| 226 | struct virtio_chan *chan; | ||
| 227 | struct virtio_device *vdev; | ||
| 228 | |||
| 229 | vdev = dev_to_virtio(dev); | ||
| 230 | chan = vdev->priv; | ||
| 231 | |||
| 232 | return snprintf(buf, chan->tag_len + 1, "%s", chan->tag); | ||
| 233 | } | ||
| 234 | |||
| 235 | static DEVICE_ATTR(mount_tag, 0444, p9_mount_tag_show, NULL); | ||
| 236 | |||
| 223 | /** | 237 | /** |
| 224 | * p9_virtio_probe - probe for existence of 9P virtio channels | 238 | * p9_virtio_probe - probe for existence of 9P virtio channels |
| 225 | * @vdev: virtio device to probe | 239 | * @vdev: virtio device to probe |
| @@ -273,6 +287,11 @@ static int p9_virtio_probe(struct virtio_device *vdev) | |||
| 273 | tag, tag_len); | 287 | tag, tag_len); |
| 274 | chan->tag = tag; | 288 | chan->tag = tag; |
| 275 | chan->tag_len = tag_len; | 289 | chan->tag_len = tag_len; |
| 290 | err = sysfs_create_file(&(vdev->dev.kobj), &dev_attr_mount_tag.attr); | ||
| 291 | if (err) { | ||
| 292 | kfree(tag); | ||
| 293 | goto out_free_vq; | ||
| 294 | } | ||
| 276 | mutex_lock(&virtio_9p_lock); | 295 | mutex_lock(&virtio_9p_lock); |
| 277 | list_add_tail(&chan->chan_list, &virtio_chan_list); | 296 | list_add_tail(&chan->chan_list, &virtio_chan_list); |
| 278 | mutex_unlock(&virtio_9p_lock); | 297 | mutex_unlock(&virtio_9p_lock); |
| @@ -348,6 +367,7 @@ static void p9_virtio_remove(struct virtio_device *vdev) | |||
| 348 | mutex_lock(&virtio_9p_lock); | 367 | mutex_lock(&virtio_9p_lock); |
| 349 | list_del(&chan->chan_list); | 368 | list_del(&chan->chan_list); |
| 350 | mutex_unlock(&virtio_9p_lock); | 369 | mutex_unlock(&virtio_9p_lock); |
| 370 | sysfs_remove_file(&(vdev->dev.kobj), &dev_attr_mount_tag.attr); | ||
| 351 | kfree(chan->tag); | 371 | kfree(chan->tag); |
| 352 | kfree(chan); | 372 | kfree(chan); |
| 353 | 373 | ||
