mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
[PATCH] Add block_device_operations.getgeo block device method
HDIO_GETGEO is implemented in most block drivers, and all of them have to
duplicate the code to copy the structure to userspace, as well as getting
the start sector. This patch moves that to common code [1] and adds a
->getgeo method to fill out the raw kernel hd_geometry structure. For many
drivers this means ->ioctl can go away now.
[1] the s390 block drivers are odd in this respect. xpram sets ->start
to 4 always which seems more than odd, and the dasd driver shifts
the start offset around, probably because of it's non-standard
sector size.
Signed-off-by: Christoph Hellwig <[email protected]>
Cc: Jens Axboe <[email protected]>
Cc: <[email protected]>
Cc: Jeff Dike <[email protected]>
Cc: Paolo Giarrusso <[email protected]>
Cc: Bartlomiej Zolnierkiewicz <[email protected]>
Cc: Neil Brown <[email protected]>
Cc: Markus Lidel <[email protected]>
Cc: Russell King <[email protected]>
Cc: David Woodhouse <[email protected]>
Cc: Martin Schwidefsky <[email protected]>
Cc: James Bottomley <[email protected]>
Signed-off-by: Adrian Bunk <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
5b0ed2c64d
commit
a885c8c431
30 changed files with 340 additions and 456 deletions
|
|
@ -113,31 +113,18 @@ static int mmc_blk_release(struct inode *inode, struct file *filp)
|
|||
}
|
||||
|
||||
static int
|
||||
mmc_blk_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
|
||||
mmc_blk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
|
||||
{
|
||||
struct block_device *bdev = inode->i_bdev;
|
||||
|
||||
if (cmd == HDIO_GETGEO) {
|
||||
struct hd_geometry geo;
|
||||
|
||||
memset(&geo, 0, sizeof(struct hd_geometry));
|
||||
|
||||
geo.cylinders = get_capacity(bdev->bd_disk) / (4 * 16);
|
||||
geo.heads = 4;
|
||||
geo.sectors = 16;
|
||||
geo.start = get_start_sect(bdev);
|
||||
|
||||
return copy_to_user((void __user *)arg, &geo, sizeof(geo))
|
||||
? -EFAULT : 0;
|
||||
}
|
||||
|
||||
return -ENOTTY;
|
||||
geo->cylinders = get_capacity(bdev->bd_disk) / (4 * 16);
|
||||
geo->heads = 4;
|
||||
geo->sectors = 16;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct block_device_operations mmc_bdops = {
|
||||
.open = mmc_blk_open,
|
||||
.release = mmc_blk_release,
|
||||
.ioctl = mmc_blk_ioctl,
|
||||
.getgeo = mmc_blk_getgeo,
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue