diff options
Diffstat (limited to 'drivers/message')
-rw-r--r-- | drivers/message/i2o/i2o_block.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/drivers/message/i2o/i2o_block.c b/drivers/message/i2o/i2o_block.c index 5b1febed3133..b09fb6307153 100644 --- a/drivers/message/i2o/i2o_block.c +++ b/drivers/message/i2o/i2o_block.c | |||
@@ -662,6 +662,13 @@ static int i2o_block_release(struct inode *inode, struct file *file) | |||
662 | return 0; | 662 | return 0; |
663 | } | 663 | } |
664 | 664 | ||
665 | static int i2o_block_getgeo(struct block_device *bdev, struct hd_geometry *geo) | ||
666 | { | ||
667 | i2o_block_biosparam(get_capacity(bdev->bd_disk), | ||
668 | &geo->cylinders, &geo->heads, &geo->sectors); | ||
669 | return 0; | ||
670 | } | ||
671 | |||
665 | /** | 672 | /** |
666 | * i2o_block_ioctl - Issue device specific ioctl calls. | 673 | * i2o_block_ioctl - Issue device specific ioctl calls. |
667 | * @cmd: ioctl command | 674 | * @cmd: ioctl command |
@@ -676,7 +683,6 @@ static int i2o_block_ioctl(struct inode *inode, struct file *file, | |||
676 | { | 683 | { |
677 | struct gendisk *disk = inode->i_bdev->bd_disk; | 684 | struct gendisk *disk = inode->i_bdev->bd_disk; |
678 | struct i2o_block_device *dev = disk->private_data; | 685 | struct i2o_block_device *dev = disk->private_data; |
679 | void __user *argp = (void __user *)arg; | ||
680 | 686 | ||
681 | /* Anyone capable of this syscall can do *real bad* things */ | 687 | /* Anyone capable of this syscall can do *real bad* things */ |
682 | 688 | ||
@@ -684,15 +690,6 @@ static int i2o_block_ioctl(struct inode *inode, struct file *file, | |||
684 | return -EPERM; | 690 | return -EPERM; |
685 | 691 | ||
686 | switch (cmd) { | 692 | switch (cmd) { |
687 | case HDIO_GETGEO: | ||
688 | { | ||
689 | struct hd_geometry g; | ||
690 | i2o_block_biosparam(get_capacity(disk), | ||
691 | &g.cylinders, &g.heads, &g.sectors); | ||
692 | g.start = get_start_sect(inode->i_bdev); | ||
693 | return copy_to_user(argp, &g, sizeof(g)) ? -EFAULT : 0; | ||
694 | } | ||
695 | |||
696 | case BLKI2OGRSTRAT: | 693 | case BLKI2OGRSTRAT: |
697 | return put_user(dev->rcache, (int __user *)arg); | 694 | return put_user(dev->rcache, (int __user *)arg); |
698 | case BLKI2OGWSTRAT: | 695 | case BLKI2OGWSTRAT: |
@@ -962,6 +959,7 @@ static struct block_device_operations i2o_block_fops = { | |||
962 | .open = i2o_block_open, | 959 | .open = i2o_block_open, |
963 | .release = i2o_block_release, | 960 | .release = i2o_block_release, |
964 | .ioctl = i2o_block_ioctl, | 961 | .ioctl = i2o_block_ioctl, |
962 | .getgeo = i2o_block_getgeo, | ||
965 | .media_changed = i2o_block_media_changed | 963 | .media_changed = i2o_block_media_changed |
966 | }; | 964 | }; |
967 | 965 | ||