diff options
Diffstat (limited to 'drivers/scsi/sd.c')
| -rw-r--r-- | drivers/scsi/sd.c | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 32d4d8d7b9f3..4c5127ed379c 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c | |||
| @@ -527,7 +527,7 @@ static int sd_release(struct inode *inode, struct file *filp) | |||
| 527 | return 0; | 527 | return 0; |
| 528 | } | 528 | } |
| 529 | 529 | ||
| 530 | static int sd_hdio_getgeo(struct block_device *bdev, struct hd_geometry __user *loc) | 530 | static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo) |
| 531 | { | 531 | { |
| 532 | struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk); | 532 | struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk); |
| 533 | struct scsi_device *sdp = sdkp->device; | 533 | struct scsi_device *sdp = sdkp->device; |
| @@ -545,15 +545,9 @@ static int sd_hdio_getgeo(struct block_device *bdev, struct hd_geometry __user * | |||
| 545 | else | 545 | else |
| 546 | scsicam_bios_param(bdev, sdkp->capacity, diskinfo); | 546 | scsicam_bios_param(bdev, sdkp->capacity, diskinfo); |
| 547 | 547 | ||
| 548 | if (put_user(diskinfo[0], &loc->heads)) | 548 | geo->heads = diskinfo[0]; |
| 549 | return -EFAULT; | 549 | geo->sectors = diskinfo[1]; |
| 550 | if (put_user(diskinfo[1], &loc->sectors)) | 550 | geo->cylinders = diskinfo[2]; |
| 551 | return -EFAULT; | ||
| 552 | if (put_user(diskinfo[2], &loc->cylinders)) | ||
| 553 | return -EFAULT; | ||
| 554 | if (put_user((unsigned)get_start_sect(bdev), | ||
| 555 | (unsigned long __user *)&loc->start)) | ||
| 556 | return -EFAULT; | ||
| 557 | return 0; | 551 | return 0; |
| 558 | } | 552 | } |
| 559 | 553 | ||
| @@ -593,12 +587,6 @@ static int sd_ioctl(struct inode * inode, struct file * filp, | |||
| 593 | if (!scsi_block_when_processing_errors(sdp) || !error) | 587 | if (!scsi_block_when_processing_errors(sdp) || !error) |
| 594 | return error; | 588 | return error; |
| 595 | 589 | ||
| 596 | if (cmd == HDIO_GETGEO) { | ||
| 597 | if (!arg) | ||
| 598 | return -EINVAL; | ||
| 599 | return sd_hdio_getgeo(bdev, p); | ||
| 600 | } | ||
| 601 | |||
| 602 | /* | 590 | /* |
| 603 | * Send SCSI addressing ioctls directly to mid level, send other | 591 | * Send SCSI addressing ioctls directly to mid level, send other |
| 604 | * ioctls to block level and then onto mid level if they can't be | 592 | * ioctls to block level and then onto mid level if they can't be |
| @@ -800,6 +788,7 @@ static struct block_device_operations sd_fops = { | |||
| 800 | .open = sd_open, | 788 | .open = sd_open, |
| 801 | .release = sd_release, | 789 | .release = sd_release, |
| 802 | .ioctl = sd_ioctl, | 790 | .ioctl = sd_ioctl, |
| 791 | .getgeo = sd_getgeo, | ||
| 803 | #ifdef CONFIG_COMPAT | 792 | #ifdef CONFIG_COMPAT |
| 804 | .compat_ioctl = sd_compat_ioctl, | 793 | .compat_ioctl = sd_compat_ioctl, |
| 805 | #endif | 794 | #endif |
