block: look up block device path in sysfs
Subsystems (2)
PATCH 1/1 block: look up block device path in sysfs
Given an fd on a block device, returns a string like
/block/sda/sda1
which can be used to find related information in /sys.
Ideally we should have an ioctl that works on char devices as well, but that seems far from trivial, so it seems reasonable to have this until the latter can be implemented.
---
Things have been quiet since this was posted about a month ago, and I am hoping to see this in 2.6.25. It is based on Neil's BLKGETNAME patch and is updated with Kay's comments.
Regards,
Dan
block/compat_ioctl.c | 1 + block/ioctl.c | 28 ++++++++++++++++++++++++++++ include/linux/fs.h | 1 + 3 files changed, 30 insertions(+), 0 deletions(-)
block/compat_ioctl.c +1 -0
@@ -784,6 +784,7 @@ long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg)switch (cmd) {case HDIO_GETGEO :return compat_hdio_getgeo (disk, bdev,compat_ptr (arg)); +case BLKGETDEVPATH :case BLKFLSBUF :case BLKROSET :/*
block/ioctl.c +28 -0
@@ -229,6 +229,34 @@ int blkdev_ioctl(struct inode *inode, struct file *file, unsigned cmd,int ret, n;switch (cmd) { +case BLKGETDEVPATH : { +char *path; +char b[BDEVNAME_SIZE ]; +size_t len; + + path =kobject_get_path (&disk->kobj,GFP_KERNEL ); + +if (!path) +return -ENOMEM ; + + len =strlen (path); +if (copy_to_user ((char __user *)arg, path, len +1 )) { +kfree (path); +return -EFAULT ; + } +kfree (path); + +if (bdev->bd_contains == bdev) +return 0 ; + +bdevname (bdev, b); +if (copy_to_user ((char __user *)arg + len,"/" ,2 )) +return -EFAULT ; +if (copy_to_user ((char __user *)arg + len +1 , b, +strlen (b) +1 )) +return -EFAULT ; +return 0 ; + }case BLKFLSBUF :if (!capable (CAP_SYS_ADMIN ))return -EACCES ;
include/linux/fs.h +1 -0
@@ -217,6 +217,7 @@ extern int dir_notify_enable;#define BLKTRACESTART _IO(0x12,116)#define BLKTRACESTOP _IO(0x12,117)#define BLKTRACETEARDOWN _IO(0x12,118) +#define BLKGETDEVPATH _IOR(0x12, 119, char [1024])#define BMAP_IOCTL 1/* obsolete - kept for compatibility */ #define FIBMAP _IO(0x00,1)/* bmap access */
Quoted 9 lines · Dan Williams
Given an fd on a block device, returns a string like
/block/sda/sda1which can be used to find related information in /sys.
Ideally we should have an ioctl that works on char devices as well, but that seems far from trivial, so it seems reasonable to have this until the latter can be implemented.
What did you do to address Viro's reasonable rejection of this when it came up last time?
Quoted 5 lines · Christoph Hellwig
Quoted 4 lines · Dan Williams
Given an fd on a block device, returns a string like
/block/sda/sda1
Quoted 8 lines
Quoted 5 lines
which can be used to find related information in /sys.
Ideally we should have an ioctl that works on char devices as well, but that seems far from trivial, so it seems reasonable to have this until the latter can be implemented.
What did you do to address Viro's reasonable rejection of this when it came up last time?
What was the objection?
My search only came up with a discussion about possibly making this a generic capability for all devices:
http://marc.info/?t=118646704500006&r=1&w=2
Regards,
Dan