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 |