diff options
Diffstat (limited to 'fs/devpts/inode.c')
-rw-r--r-- | fs/devpts/inode.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c index 63a4a59e4148..c68edb969441 100644 --- a/fs/devpts/inode.c +++ b/fs/devpts/inode.c | |||
@@ -90,6 +90,15 @@ static inline struct super_block *pts_sb_from_inode(struct inode *inode) | |||
90 | #define PARSE_MOUNT 0 | 90 | #define PARSE_MOUNT 0 |
91 | #define PARSE_REMOUNT 1 | 91 | #define PARSE_REMOUNT 1 |
92 | 92 | ||
93 | /* | ||
94 | * parse_mount_options(): | ||
95 | * Set @opts to mount options specified in @data. If an option is not | ||
96 | * specified in @data, set it to its default value. The exception is | ||
97 | * 'newinstance' option which can only be set/cleared on a mount (i.e. | ||
98 | * cannot be changed during remount). | ||
99 | * | ||
100 | * Note: @data may be NULL (in which case all options are set to default). | ||
101 | */ | ||
93 | static int parse_mount_options(char *data, int op, struct pts_mount_opts *opts) | 102 | static int parse_mount_options(char *data, int op, struct pts_mount_opts *opts) |
94 | { | 103 | { |
95 | char *p; | 104 | char *p; |
@@ -355,12 +364,9 @@ static int devpts_get_sb(struct file_system_type *fs_type, | |||
355 | struct pts_mount_opts opts; | 364 | struct pts_mount_opts opts; |
356 | struct super_block *s; | 365 | struct super_block *s; |
357 | 366 | ||
358 | memset(&opts, 0, sizeof(opts)); | 367 | error = parse_mount_options(data, PARSE_MOUNT, &opts); |
359 | if (data) { | 368 | if (error) |
360 | error = parse_mount_options(data, PARSE_MOUNT, &opts); | 369 | return error; |
361 | if (error) | ||
362 | return error; | ||
363 | } | ||
364 | 370 | ||
365 | if (opts.newinstance) | 371 | if (opts.newinstance) |
366 | s = sget(fs_type, NULL, set_anon_super, NULL); | 372 | s = sget(fs_type, NULL, set_anon_super, NULL); |
@@ -389,11 +395,10 @@ static int devpts_get_sb(struct file_system_type *fs_type, | |||
389 | return 0; | 395 | return 0; |
390 | 396 | ||
391 | out_dput: | 397 | out_dput: |
392 | dput(s->s_root); | 398 | dput(s->s_root); /* undo dget() in simple_set_mnt() */ |
393 | 399 | ||
394 | out_undo_sget: | 400 | out_undo_sget: |
395 | up_write(&s->s_umount); | 401 | deactivate_locked_super(s); |
396 | deactivate_super(s); | ||
397 | return error; | 402 | return error; |
398 | } | 403 | } |
399 | 404 | ||