struct real_dev->f_op would not be made available to the userspace. It's for target/real device bookkeeping. On Mon, Feb 2, 2015 at 4:02 PM, <Valdis.Kletnieks@xxxxxx> wrote: > On Mon, 02 Feb 2015 15:24:37 -0600, riya khanna said: >> Hi, >> >> I'm writing a device driver to to provide a wrapper device around a >> real device. Is it acceptable to do the following: >> >> wrapper_dev_open(flags) { >> // do additional bookkeeping >> real_dev_filp = filp_open(real_device_node_path, flags); >> } >> >> wrapper_dev_mmap(mmap_parameters) { >> // do additional checks >> return real_dev_filp->f_op->mmap(mmap_parameters); >> } >> >> wrapper_dev_ioctl(ioctl_parameters) { >> // do additional checks >> return real_dev_filp->f_op->ioctl(ioctl_parameters); >> } >> >> Is it safe to do something like this? > > Probably not. If you return a struct real_dev->f_op then any further > calls will vector through that structure, totally unseen to your wrapper, > which means you won't be able to provide whatever added-value extras the > wrapper is trying to do (in other words, your wrapper ends up not doing > anything). > > The real fun starts when something calls real->f_op->close() out from > under you... :) _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies