Exemplo n.º 1
0
static int dasd_ioctl_readall_cmb(struct dasd_block *block, unsigned int cmd,
				  struct cmbdata __user *argp)
{
	size_t size = _IOC_SIZE(cmd);
	struct cmbdata data;
	int ret;

	ret = cmf_readall(block->base->cdev, &data);
	if (!ret && copy_to_user(argp, &data, min(size, sizeof(*argp))))
		return -EFAULT;
	return ret;
}
Exemplo n.º 2
0
static int
dasd_ioctl_readall_cmb(struct dasd_device *device, unsigned int cmd,
		unsigned long arg)
{
	struct cmbdata __user *argp = (void __user *) arg;
	size_t size = _IOC_SIZE(cmd);
	struct cmbdata data;
	int ret;

	ret = cmf_readall(device->cdev, &data);
	if (!ret && copy_to_user(argp, &data, min(size, sizeof(*argp))))
		return -EFAULT;
	return ret;
}
Exemplo n.º 3
0
static int
dasd_ioctl_readall_cmb(struct block_device *bdev, int no, long args)
{
	struct dasd_device *device;
	struct cmbdata __user *udata;
	struct cmbdata data;
	size_t size;
	int ret;

	device = bdev->bd_disk->private_data;
	if (!device)
		return -EINVAL;
	udata = (void __user *) args;
	size = _IOC_SIZE(no);

	if (!access_ok(VERIFY_WRITE, udata, size))
		return -EFAULT;
	ret = cmf_readall(device->cdev, &data);
	if (ret)
		return ret;
	if (copy_to_user(udata, &data, min(size, sizeof(*udata))))
		return -EFAULT;
	return 0;
}