patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / drivers / block / ps2esdi.c
index 63e30e0..82a5f19 100644 (file)
@@ -180,7 +180,7 @@ static int sect[MAX_HD] = {-1, -1};
 MODULE_PARM(tp720esdi, "i");
 MODULE_PARM(cyl, "i");
 MODULE_PARM(head, "i");
-MODULE_PARM(track, "i");
+MODULE_PARM(sect, "i");
 MODULE_LICENSE("GPL");
 
 int init_module(void) {
@@ -1063,17 +1063,17 @@ static int ps2esdi_ioctl(struct inode *inode,
                         struct file *file, u_int cmd, u_long arg)
 {
        struct ps2esdi_i_struct *p = inode->i_bdev->bd_disk->private_data;
-       struct ps2esdi_geometry *geometry = (struct ps2esdi_geometry *) arg;
-       int err;
+       struct ps2esdi_geometry geom;
 
        if (cmd != HDIO_GETGEO)
                return -EINVAL;
-       if ((err = verify_area(VERIFY_WRITE, geometry, sizeof(*geometry))))
-               return (err);
-       put_user(p->head, (char *) &geometry->heads);
-       put_user(p->sect, (char *) &geometry->sectors);
-       put_user(p->cyl, (short *) &geometry->cylinders);
-       put_user(get_start_sect(inode->i_bdev), (long *) &geometry->start);
+       memset(&geom, 0, sizeof(geom));
+       geom.heads = p->head;
+       geom.sectors = p->sect;
+       geom.cylinders = p->cyl;
+       geom.start = get_start_sect(inode->i_bdev);
+       if (copy_to_user((void __user *)arg, &geom, sizeof(geom)))
+               return -EFAULT;
        return 0;
 }