Hello, I'm reading Linux device drivers 2nd edition by Alessandro Rubini & Jonathan Corbet. there is a piece of code in chapter 3 (http://www.xml.com/ldd/chapter/book/ch03.html) I don't understand: int scull_open(struct inode *inode, struct file *filp) { Scull_Dev *dev; /* device information */ int num = NUM(inode->i_rdev); int type = TYPE(inode->i_rdev); /* * If private data is not valid, we are not using devfs * so use the type (from minor nr.) to select a new f_op */ if (!filp->private_data && type) { if (type > SCULL_MAX_TYPE) return -ENODEV; filp->f_op = scull_fop_array[type]; return filp->f_op->open(inode, filp); /* dispatch to specific open */ } If I read correctly the open syscall will set filp->private_data to NULL. Since open in only used once to get a filedescriptor (I presume) the code in the if-block will never be excuted and there will be no dispatching for different minor devicefiles. Anyone who can tell me where I'm going wrong? Richard -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/