-
- RETURN(err);
-}
-
-static int libcfs_ioctl(struct cfs_psdev_file *pfile,
- unsigned long cmd, void __user *arg)
-{
- struct libcfs_ioctl_hdr *hdr;
- int err = 0;
- __u32 buf_len;
- ENTRY;
-
- err = libcfs_ioctl_getdata_len(arg, &buf_len);
- if (err != 0)
- RETURN(err);
-
- /*
- * do a check here to restrict the size of the memory
- * to allocate to guard against DoS attacks.
- */
- if (buf_len > LNET_MAX_IOCTL_BUF_LEN) {
- CERROR("LNET: user buffer exceeds kernel buffer\n");
- RETURN(-EINVAL);
- }
-
- LIBCFS_ALLOC_GFP(hdr, buf_len, GFP_IOFS);
- if (hdr == NULL)
- RETURN(-ENOMEM);
-
- /* 'cmd' and permissions get checked in our arch-specific caller */
- if (libcfs_ioctl_getdata(hdr, buf_len, arg)) {
- CERROR("LNET ioctl: data error\n");
- GOTO(out, err = -EINVAL);
- }
-
- err = libcfs_ioctl_handle(pfile, cmd, arg, hdr);
-