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; }
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; }
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; }