diff options
| -rw-r--r-- | fs/devpts/inode.c | 36 | 
1 files changed, 17 insertions, 19 deletions
| diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c index 70013dd8ec70..58b719006af1 100644 --- a/fs/devpts/inode.c +++ b/fs/devpts/inode.c @@ -338,17 +338,7 @@ static int new_pts_mount(struct file_system_type *fs_type, int flags,  	fsi = DEVPTS_SB(mnt->mnt_sb);  	memcpy(&fsi->mount_opts, opts, sizeof(opts)); -	err = mknod_ptmx(mnt->mnt_sb); -	if (err) -		goto fail; -  	return 0; - -fail: -	dput(mnt->mnt_sb->s_root); -	up_write(&mnt->mnt_sb->s_umount); -	deactivate_super(mnt->mnt_sb); -	return err;  }  /* @@ -416,13 +406,6 @@ static int init_pts_mount(struct file_system_type *fs_type, int flags,  	if (err)  		return err; -	err = mknod_ptmx(mnt->mnt_sb); -	if (err) { -		dput(mnt->mnt_sb->s_root); -		up_write(&mnt->mnt_sb->s_umount); -		deactivate_super(mnt->mnt_sb); -	} -  	return err;  } @@ -440,9 +423,24 @@ static int devpts_get_sb(struct file_system_type *fs_type,  	}  	if (opts.newinstance) -		return new_pts_mount(fs_type, flags, data, &opts, mnt); +		error = new_pts_mount(fs_type, flags, data, &opts, mnt);  	else -		return init_pts_mount(fs_type, flags, data, &opts, mnt); +		error = init_pts_mount(fs_type, flags, data, &opts, mnt); + +	if (error) +		return error; + +	error = mknod_ptmx(mnt->mnt_sb); +	if (error) +		goto out_dput; + +	return 0; + +out_dput: +	dput(mnt->mnt_sb->s_root); +	up_write(&mnt->mnt_sb->s_umount); +	deactivate_super(mnt->mnt_sb); +	return error;  }  #else | 
