[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-3.0-testing] Add backing support for HDIO_GETGEO ioctl to blkfront.
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID 28ffbefb0966106b1a79eedd733c0d5ec9883480 # Parent 33263455b079d7a1a5c68a9b519029925d427c2a Add backing support for HDIO_GETGEO ioctl to blkfront. Inspired by an earlier patch from Charles Coffing. Signed-Off-By: Jan Beulich <jbeulich@xxxxxxxxxx> xen-unstable changeset: 10258:bcc2c9ea60d83e26940985d0e840d101e260ee57 xen-unstable date: Fri Jun 2 12:13:34 2006 +0100 --- linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c | 21 +++++++++++++++---- linux-2.6-xen-sparse/drivers/xen/blkfront/block.h | 1 linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c | 1 3 files changed, 19 insertions(+), 4 deletions(-) diff -r 33263455b079 -r 28ffbefb0966 linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c --- a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c Fri Jun 02 12:00:25 2006 +0100 +++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c Fri Jun 02 12:15:49 2006 +0100 @@ -452,10 +452,6 @@ int blkif_ioctl(struct inode *inode, str command, (long)argument, inode->i_rdev); switch (command) { - case HDIO_GETGEO: - /* return ENOSYS to use defaults */ - return -ENOSYS; - case CDROMMULTISESSION: DPRINTK("FIXME: support multisession CDs later\n"); for (i = 0; i < sizeof(struct cdrom_multisession); i++) @@ -469,6 +465,23 @@ int blkif_ioctl(struct inode *inode, str return -EINVAL; /* same return as native Linux */ } + return 0; +} + + +int blkif_getgeo(struct block_device *bd, struct hd_geometry *hg) +{ + /* We don't have real geometry info, but let's at least return + values consistent with the size of the device */ + sector_t nsect = get_capacity(bd->bd_disk); + sector_t cylinders = nsect; + + hg->heads = 0xff; + hg->sectors = 0x3f; + sector_div(cylinders, hg->heads * hg->sectors); + hg->cylinders = cylinders; + if ((sector_t)(hg->cylinders + 1) * hg->heads * hg->sectors < nsect) + hg->cylinders = 0xffff; return 0; } diff -r 33263455b079 -r 28ffbefb0966 linux-2.6-xen-sparse/drivers/xen/blkfront/block.h --- a/linux-2.6-xen-sparse/drivers/xen/blkfront/block.h Fri Jun 02 12:00:25 2006 +0100 +++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/block.h Fri Jun 02 12:15:49 2006 +0100 @@ -140,6 +140,7 @@ extern int blkif_release(struct inode *i extern int blkif_release(struct inode *inode, struct file *filep); extern int blkif_ioctl(struct inode *inode, struct file *filep, unsigned command, unsigned long argument); +extern int blkif_getgeo(struct block_device *, struct hd_geometry *); extern int blkif_check(dev_t dev); extern int blkif_revalidate(dev_t dev); extern void do_blkif_request (request_queue_t *rq); diff -r 33263455b079 -r 28ffbefb0966 linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c --- a/linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c Fri Jun 02 12:00:25 2006 +0100 +++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/vbd.c Fri Jun 02 12:15:49 2006 +0100 @@ -91,6 +91,7 @@ static struct block_device_operations xl .open = blkif_open, .release = blkif_release, .ioctl = blkif_ioctl, + .getgeo = blkif_getgeo }; spinlock_t blkif_io_lock = SPIN_LOCK_UNLOCKED; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |