[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [linux-2.6.18-xen] linux/blkfront: Add "media" file to vbd sysfs directory
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1217344591 -3600 # Node ID 1d647ef26f3ff578568ad1822bd666a46da9fed5 # Parent b8916f4d48f6fac453c2e0af896b681d5288c524 linux/blkfront: Add "media" file to vbd sysfs directory Patch adds "media" file to the vbd sysfs directory. File contains a string, cdrom or disk. Currently all PV vbd devices are seen by HAL as "disk". Applications that query HAL info.capabilities attribute to determine a block devices capabilities fail to see a PV cdrom as having CDROM capabilities. With the attached patch and a small corresponding patch to HAL, applications that query HAL for the storage type of the block device will see it as a disk or a cdrom. Standard Linux IDE devices use this same mechanism. lshal of vbd without patches: info.capabilities = {'storage', 'block'} (string list) lshal of vbd with patches: info.capabilities = {'storage', 'block', 'storage.cdrom'} (string list) Signed-off-by: Pat Campbell <plc@xxxxxxxxxx> --- drivers/xen/blkfront/blkfront.c | 9 ++++++++ drivers/xen/blkfront/block.h | 15 +++++++++++++ drivers/xen/blkfront/vbd.c | 45 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) diff -r b8916f4d48f6 -r 1d647ef26f3f drivers/xen/blkfront/blkfront.c --- a/drivers/xen/blkfront/blkfront.c Tue Jul 29 13:26:15 2008 +0100 +++ b/drivers/xen/blkfront/blkfront.c Tue Jul 29 16:16:31 2008 +0100 @@ -352,6 +352,13 @@ static void connect(struct blkfront_info return; } + err = xlvbd_sysfs_addif(info); + if (err) { + xenbus_dev_fatal(info->xbdev, err, "xlvbd_sysfs_addif at %s", + info->xbdev->otherend); + return; + } + (void)xenbus_switch_state(info->xbdev, XenbusStateConnected); /* Kick pending requests. */ @@ -390,6 +397,8 @@ static void blkfront_closing(struct xenb /* Flush gnttab callback work. Must be done with no locks held. */ flush_scheduled_work(); + + xlvbd_sysfs_delif(info); xlvbd_del(info); diff -r b8916f4d48f6 -r 1d647ef26f3f drivers/xen/blkfront/block.h --- a/drivers/xen/blkfront/block.h Tue Jul 29 13:26:15 2008 +0100 +++ b/drivers/xen/blkfront/block.h Tue Jul 29 16:16:31 2008 +0100 @@ -140,4 +140,19 @@ void xlvbd_del(struct blkfront_info *inf void xlvbd_del(struct blkfront_info *info); int xlvbd_barrier(struct blkfront_info *info); +#ifdef CONFIG_SYSFS +int xlvbd_sysfs_addif(struct blkfront_info *info); +void xlvbd_sysfs_delif(struct blkfront_info *info); +#else +static inline int xlvbd_sysfs_addif(struct blkfront_info *info) +{ + return 0; +} + +static inline void xlvbd_sysfs_delif(struct blkfront_info *info) +{ + ; +} +#endif + #endif /* __XEN_DRIVERS_BLOCK_H__ */ diff -r b8916f4d48f6 -r 1d647ef26f3f drivers/xen/blkfront/vbd.c --- a/drivers/xen/blkfront/vbd.c Tue Jul 29 13:26:15 2008 +0100 +++ b/drivers/xen/blkfront/vbd.c Tue Jul 29 16:16:31 2008 +0100 @@ -413,3 +413,48 @@ xlvbd_barrier(struct blkfront_info *info return -ENOSYS; } #endif + +#ifdef CONFIG_SYSFS +static ssize_t show_media(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct xenbus_device *xendev = to_xenbus_device(dev); + struct blkfront_info *info = xendev->dev.driver_data; + + if (info->gd->flags & GENHD_FL_CD) + return sprintf(buf, "cdrom\n"); + return sprintf(buf, "disk\n"); +} + +static struct device_attribute xlvbd_attrs[] = { + __ATTR(media, S_IRUGO, show_media, NULL), +}; + +int xlvbd_sysfs_addif(struct blkfront_info *info) +{ + int i; + int error = 0; + + for (i = 0; i < ARRAY_SIZE(xlvbd_attrs); i++) { + error = device_create_file(info->gd->driverfs_dev, + &xlvbd_attrs[i]); + if (error) + goto fail; + } + return 0; + +fail: + while (--i >= 0) + device_remove_file(info->gd->driverfs_dev, &xlvbd_attrs[i]); + return error; +} + +void xlvbd_sysfs_delif(struct blkfront_info *info) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(xlvbd_attrs); i++) + device_remove_file(info->gd->driverfs_dev, &xlvbd_attrs[i]); +} + +#endif /* CONFIG_SYSFS */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |