diff options
Diffstat (limited to 'drivers/ide/legacy/hd.c')
| -rw-r--r-- | drivers/ide/legacy/hd.c | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/drivers/ide/legacy/hd.c b/drivers/ide/legacy/hd.c index 242029c9c0ca..6439dec66881 100644 --- a/drivers/ide/legacy/hd.c +++ b/drivers/ide/legacy/hd.c | |||
| @@ -658,22 +658,14 @@ static void do_hd_request (request_queue_t * q) | |||
| 658 | enable_irq(HD_IRQ); | 658 | enable_irq(HD_IRQ); |
| 659 | } | 659 | } |
| 660 | 660 | ||
| 661 | static int hd_ioctl(struct inode * inode, struct file * file, | 661 | static int hd_getgeo(struct block_device *bdev, struct hd_geometry *geo) |
| 662 | unsigned int cmd, unsigned long arg) | ||
| 663 | { | 662 | { |
| 664 | struct hd_i_struct *disk = inode->i_bdev->bd_disk->private_data; | 663 | struct hd_i_struct *disk = bdev->bd_disk->private_data; |
| 665 | struct hd_geometry __user *loc = (struct hd_geometry __user *) arg; | 664 | |
| 666 | struct hd_geometry g; | 665 | geo->heads = disk->head; |
| 667 | 666 | geo->sectors = disk->sect; | |
| 668 | if (cmd != HDIO_GETGEO) | 667 | geo->cylinders = disk->cyl; |
| 669 | return -EINVAL; | 668 | return 0; |
| 670 | if (!loc) | ||
| 671 | return -EINVAL; | ||
| 672 | g.heads = disk->head; | ||
| 673 | g.sectors = disk->sect; | ||
| 674 | g.cylinders = disk->cyl; | ||
| 675 | g.start = get_start_sect(inode->i_bdev); | ||
| 676 | return copy_to_user(loc, &g, sizeof g) ? -EFAULT : 0; | ||
| 677 | } | 669 | } |
| 678 | 670 | ||
| 679 | /* | 671 | /* |
| @@ -695,7 +687,7 @@ static irqreturn_t hd_interrupt(int irq, void *dev_id, struct pt_regs *regs) | |||
| 695 | } | 687 | } |
| 696 | 688 | ||
| 697 | static struct block_device_operations hd_fops = { | 689 | static struct block_device_operations hd_fops = { |
| 698 | .ioctl = hd_ioctl, | 690 | .getgeo = hd_getgeo, |
| 699 | }; | 691 | }; |
| 700 | 692 | ||
| 701 | /* | 693 | /* |
