]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/s390/char/fs3270.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[karo-tx-linux.git] / drivers / s390 / char / fs3270.c
index 911704571b9c1a862f4d8819bb89ad8f0f4c000f..96e52bf7593020c962fe6f6d1eb8cfcbf6fc942b 100644 (file)
@@ -433,9 +433,9 @@ fs3270_open(struct inode *inode, struct file *filp)
        struct idal_buffer *ib;
        int minor, rc = 0;
 
-       if (imajor(filp->f_path.dentry->d_inode) != IBM_FS3270_MAJOR)
+       if (imajor(file_inode(filp)) != IBM_FS3270_MAJOR)
                return -ENODEV;
-       minor = iminor(filp->f_path.dentry->d_inode);
+       minor = iminor(file_inode(filp));
        /* Check for minor 0 multiplexer. */
        if (minor == 0) {
                struct tty_struct *tty = get_current_tty();
@@ -443,7 +443,7 @@ fs3270_open(struct inode *inode, struct file *filp)
                        tty_kref_put(tty);
                        return -ENODEV;
                }
-               minor = tty->index + RAW3270_FIRSTMINOR;
+               minor = tty->index;
                tty_kref_put(tty);
        }
        mutex_lock(&fs3270_mutex);
@@ -524,6 +524,25 @@ static const struct file_operations fs3270_fops = {
        .llseek         = no_llseek,
 };
 
+void fs3270_create_cb(int minor)
+{
+       __register_chrdev(IBM_FS3270_MAJOR, minor, 1, "tub", &fs3270_fops);
+       device_create(class3270, NULL, MKDEV(IBM_FS3270_MAJOR, minor),
+                     NULL, "3270/tub%d", minor);
+}
+
+void fs3270_destroy_cb(int minor)
+{
+       device_destroy(class3270, MKDEV(IBM_FS3270_MAJOR, minor));
+       __unregister_chrdev(IBM_FS3270_MAJOR, minor, 1, "tub");
+}
+
+struct raw3270_notifier fs3270_notifier =
+{
+       .create = fs3270_create_cb,
+       .destroy = fs3270_destroy_cb,
+};
+
 /*
  * 3270 fullscreen driver initialization.
  */
@@ -532,16 +551,20 @@ fs3270_init(void)
 {
        int rc;
 
-       rc = register_chrdev(IBM_FS3270_MAJOR, "fs3270", &fs3270_fops);
+       rc = __register_chrdev(IBM_FS3270_MAJOR, 0, 1, "fs3270", &fs3270_fops);
        if (rc)
                return rc;
+       device_create(class3270, NULL, MKDEV(IBM_FS3270_MAJOR, 0),
+                     NULL, "3270/tub");
+       raw3270_register_notifier(&fs3270_notifier);
        return 0;
 }
 
 static void __exit
 fs3270_exit(void)
 {
-       unregister_chrdev(IBM_FS3270_MAJOR, "fs3270");
+       raw3270_unregister_notifier(&fs3270_notifier);
+       __unregister_chrdev(IBM_FS3270_MAJOR, 0, 1, "fs3270");
 }
 
 MODULE_LICENSE("GPL");