static int kcrash_open(struct inode *inode, struct file *filp) { printk(KERN_INFO "kcrash: open\n"); if(down_interruptible(&kdev->sem)){ printk(KERN_INFO "kcrash: sema-open\n"); return -ERESTARTSYS; } if(kdev->count > 0) return -EFAULT; kdev->count++; up(&kdev->sem); filp->private_data = NULL; return 0; }