|
@@ -535,56 +535,6 @@ out:
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|
|
-struct compat_blk_user_trace_setup {
|
|
|
|
- char name[32];
|
|
|
|
- u16 act_mask;
|
|
|
|
- u32 buf_size;
|
|
|
|
- u32 buf_nr;
|
|
|
|
- compat_u64 start_lba;
|
|
|
|
- compat_u64 end_lba;
|
|
|
|
- u32 pid;
|
|
|
|
-};
|
|
|
|
-#define BLKTRACESETUP32 _IOWR(0x12, 115, struct compat_blk_user_trace_setup)
|
|
|
|
-
|
|
|
|
-static int compat_blk_trace_setup(struct block_device *bdev, char __user *arg)
|
|
|
|
-{
|
|
|
|
- struct blk_user_trace_setup buts;
|
|
|
|
- struct compat_blk_user_trace_setup cbuts;
|
|
|
|
- struct request_queue *q;
|
|
|
|
- char b[BDEVNAME_SIZE];
|
|
|
|
- int ret;
|
|
|
|
-
|
|
|
|
- q = bdev_get_queue(bdev);
|
|
|
|
- if (!q)
|
|
|
|
- return -ENXIO;
|
|
|
|
-
|
|
|
|
- if (copy_from_user(&cbuts, arg, sizeof(cbuts)))
|
|
|
|
- return -EFAULT;
|
|
|
|
-
|
|
|
|
- bdevname(bdev, b);
|
|
|
|
-
|
|
|
|
- buts = (struct blk_user_trace_setup) {
|
|
|
|
- .act_mask = cbuts.act_mask,
|
|
|
|
- .buf_size = cbuts.buf_size,
|
|
|
|
- .buf_nr = cbuts.buf_nr,
|
|
|
|
- .start_lba = cbuts.start_lba,
|
|
|
|
- .end_lba = cbuts.end_lba,
|
|
|
|
- .pid = cbuts.pid,
|
|
|
|
- };
|
|
|
|
- memcpy(&buts.name, &cbuts.name, 32);
|
|
|
|
-
|
|
|
|
- mutex_lock(&bdev->bd_mutex);
|
|
|
|
- ret = do_blk_trace_setup(q, b, bdev->bd_dev, bdev, &buts);
|
|
|
|
- mutex_unlock(&bdev->bd_mutex);
|
|
|
|
- if (ret)
|
|
|
|
- return ret;
|
|
|
|
-
|
|
|
|
- if (copy_to_user(arg, &buts.name, 32))
|
|
|
|
- return -EFAULT;
|
|
|
|
-
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static int compat_blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode,
|
|
static int compat_blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode,
|
|
unsigned cmd, unsigned long arg)
|
|
unsigned cmd, unsigned long arg)
|
|
{
|
|
{
|
|
@@ -802,16 +752,10 @@ long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg)
|
|
return compat_put_u64(arg, bdev->bd_inode->i_size);
|
|
return compat_put_u64(arg, bdev->bd_inode->i_size);
|
|
|
|
|
|
case BLKTRACESETUP32:
|
|
case BLKTRACESETUP32:
|
|
- lock_kernel();
|
|
|
|
- ret = compat_blk_trace_setup(bdev, compat_ptr(arg));
|
|
|
|
- unlock_kernel();
|
|
|
|
- return ret;
|
|
|
|
case BLKTRACESTART: /* compatible */
|
|
case BLKTRACESTART: /* compatible */
|
|
case BLKTRACESTOP: /* compatible */
|
|
case BLKTRACESTOP: /* compatible */
|
|
case BLKTRACETEARDOWN: /* compatible */
|
|
case BLKTRACETEARDOWN: /* compatible */
|
|
- lock_kernel();
|
|
|
|
ret = blk_trace_ioctl(bdev, cmd, compat_ptr(arg));
|
|
ret = blk_trace_ioctl(bdev, cmd, compat_ptr(arg));
|
|
- unlock_kernel();
|
|
|
|
return ret;
|
|
return ret;
|
|
default:
|
|
default:
|
|
if (disk->fops->compat_ioctl)
|
|
if (disk->fops->compat_ioctl)
|