On Wed, Aug 17, 2022 at 02:47:25PM -0700, Axel Rasmussen wrote: > +static int userfaultfd_dev_open(struct inode *inode, struct file *file) > +{ > + return 0; If your open does nothing, no need to list it here at all, right? > +} > + > +static long userfaultfd_dev_ioctl(struct file *file, unsigned int cmd, unsigned long flags) > +{ > + if (cmd != USERFAULTFD_IOC_NEW) > + return -EINVAL; > + > + return new_userfaultfd(flags); > +} > + > +static const struct file_operations userfaultfd_dev_fops = { > + .open = userfaultfd_dev_open, > + .unlocked_ioctl = userfaultfd_dev_ioctl, > + .compat_ioctl = userfaultfd_dev_ioctl, Why do you need to set compat_ioctl? Shouldn't it just default to the existing one? And why is this a device node at all? Shouldn't the syscall handle all of this (to be honest, I didn't read anything but the misc code, sorry.) thanks, greg k-h