diff options
Diffstat (limited to 'fs/devpts/inode.c')
-rw-r--r-- | fs/devpts/inode.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c index 1bb547c9cad6..2f27e578d466 100644 --- a/fs/devpts/inode.c +++ b/fs/devpts/inode.c | |||
@@ -479,6 +479,7 @@ int devpts_pty_new(struct inode *ptmx_inode, struct tty_struct *tty) | |||
479 | struct dentry *root = sb->s_root; | 479 | struct dentry *root = sb->s_root; |
480 | struct pts_fs_info *fsi = DEVPTS_SB(sb); | 480 | struct pts_fs_info *fsi = DEVPTS_SB(sb); |
481 | struct pts_mount_opts *opts = &fsi->mount_opts; | 481 | struct pts_mount_opts *opts = &fsi->mount_opts; |
482 | int ret = 0; | ||
482 | char s[12]; | 483 | char s[12]; |
483 | 484 | ||
484 | /* We're supposed to be given the slave end of a pty */ | 485 | /* We're supposed to be given the slave end of a pty */ |
@@ -501,14 +502,17 @@ int devpts_pty_new(struct inode *ptmx_inode, struct tty_struct *tty) | |||
501 | mutex_lock(&root->d_inode->i_mutex); | 502 | mutex_lock(&root->d_inode->i_mutex); |
502 | 503 | ||
503 | dentry = d_alloc_name(root, s); | 504 | dentry = d_alloc_name(root, s); |
504 | if (!IS_ERR(dentry)) { | 505 | if (dentry) { |
505 | d_add(dentry, inode); | 506 | d_add(dentry, inode); |
506 | fsnotify_create(root->d_inode, dentry); | 507 | fsnotify_create(root->d_inode, dentry); |
508 | } else { | ||
509 | iput(inode); | ||
510 | ret = -ENOMEM; | ||
507 | } | 511 | } |
508 | 512 | ||
509 | mutex_unlock(&root->d_inode->i_mutex); | 513 | mutex_unlock(&root->d_inode->i_mutex); |
510 | 514 | ||
511 | return 0; | 515 | return ret; |
512 | } | 516 | } |
513 | 517 | ||
514 | struct tty_struct *devpts_get_tty(struct inode *pts_inode, int number) | 518 | struct tty_struct *devpts_get_tty(struct inode *pts_inode, int number) |
@@ -544,17 +548,12 @@ void devpts_pty_kill(struct tty_struct *tty) | |||
544 | mutex_lock(&root->d_inode->i_mutex); | 548 | mutex_lock(&root->d_inode->i_mutex); |
545 | 549 | ||
546 | dentry = d_find_alias(inode); | 550 | dentry = d_find_alias(inode); |
547 | if (IS_ERR(dentry)) | ||
548 | goto out; | ||
549 | |||
550 | if (dentry) { | ||
551 | inode->i_nlink--; | ||
552 | d_delete(dentry); | ||
553 | dput(dentry); /* d_alloc_name() in devpts_pty_new() */ | ||
554 | } | ||
555 | 551 | ||
552 | inode->i_nlink--; | ||
553 | d_delete(dentry); | ||
554 | dput(dentry); /* d_alloc_name() in devpts_pty_new() */ | ||
556 | dput(dentry); /* d_find_alias above */ | 555 | dput(dentry); /* d_find_alias above */ |
557 | out: | 556 | |
558 | mutex_unlock(&root->d_inode->i_mutex); | 557 | mutex_unlock(&root->d_inode->i_mutex); |
559 | } | 558 | } |
560 | 559 | ||