diff options
Diffstat (limited to 'fs/devpts/inode.c')
| -rw-r--r-- | fs/devpts/inode.c | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/fs/devpts/inode.c b/fs/devpts/inode.c index 8b3ffd5b5235..1bb547c9cad6 100644 --- a/fs/devpts/inode.c +++ b/fs/devpts/inode.c | |||
| @@ -331,7 +331,7 @@ static int compare_init_pts_sb(struct super_block *s, void *p) | |||
| 331 | } | 331 | } |
| 332 | 332 | ||
| 333 | /* | 333 | /* |
| 334 | * devpts_get_sb() | 334 | * devpts_mount() |
| 335 | * | 335 | * |
| 336 | * If the '-o newinstance' mount option was specified, mount a new | 336 | * If the '-o newinstance' mount option was specified, mount a new |
| 337 | * (private) instance of devpts. PTYs created in this instance are | 337 | * (private) instance of devpts. PTYs created in this instance are |
| @@ -345,20 +345,20 @@ static int compare_init_pts_sb(struct super_block *s, void *p) | |||
| 345 | * semantics in devpts while preserving backward compatibility of the | 345 | * semantics in devpts while preserving backward compatibility of the |
| 346 | * current 'single-namespace' semantics. i.e all mounts of devpts | 346 | * current 'single-namespace' semantics. i.e all mounts of devpts |
| 347 | * without the 'newinstance' mount option should bind to the initial | 347 | * without the 'newinstance' mount option should bind to the initial |
| 348 | * kernel mount, like get_sb_single(). | 348 | * kernel mount, like mount_single(). |
| 349 | * | 349 | * |
| 350 | * Mounts with 'newinstance' option create a new, private namespace. | 350 | * Mounts with 'newinstance' option create a new, private namespace. |
| 351 | * | 351 | * |
| 352 | * NOTE: | 352 | * NOTE: |
| 353 | * | 353 | * |
| 354 | * For single-mount semantics, devpts cannot use get_sb_single(), | 354 | * For single-mount semantics, devpts cannot use mount_single(), |
| 355 | * because get_sb_single()/sget() find and use the super-block from | 355 | * because mount_single()/sget() find and use the super-block from |
| 356 | * the most recent mount of devpts. But that recent mount may be a | 356 | * the most recent mount of devpts. But that recent mount may be a |
| 357 | * 'newinstance' mount and get_sb_single() would pick the newinstance | 357 | * 'newinstance' mount and mount_single() would pick the newinstance |
| 358 | * super-block instead of the initial super-block. | 358 | * super-block instead of the initial super-block. |
| 359 | */ | 359 | */ |
| 360 | static int devpts_get_sb(struct file_system_type *fs_type, | 360 | static struct dentry *devpts_mount(struct file_system_type *fs_type, |
| 361 | int flags, const char *dev_name, void *data, struct vfsmount *mnt) | 361 | int flags, const char *dev_name, void *data) |
| 362 | { | 362 | { |
| 363 | int error; | 363 | int error; |
| 364 | struct pts_mount_opts opts; | 364 | struct pts_mount_opts opts; |
| @@ -366,7 +366,7 @@ static int devpts_get_sb(struct file_system_type *fs_type, | |||
| 366 | 366 | ||
| 367 | error = parse_mount_options(data, PARSE_MOUNT, &opts); | 367 | error = parse_mount_options(data, PARSE_MOUNT, &opts); |
| 368 | if (error) | 368 | if (error) |
| 369 | return error; | 369 | return ERR_PTR(error); |
| 370 | 370 | ||
| 371 | if (opts.newinstance) | 371 | if (opts.newinstance) |
| 372 | s = sget(fs_type, NULL, set_anon_super, NULL); | 372 | s = sget(fs_type, NULL, set_anon_super, NULL); |
| @@ -374,7 +374,7 @@ static int devpts_get_sb(struct file_system_type *fs_type, | |||
| 374 | s = sget(fs_type, compare_init_pts_sb, set_anon_super, NULL); | 374 | s = sget(fs_type, compare_init_pts_sb, set_anon_super, NULL); |
| 375 | 375 | ||
| 376 | if (IS_ERR(s)) | 376 | if (IS_ERR(s)) |
| 377 | return PTR_ERR(s); | 377 | return ERR_CAST(s); |
| 378 | 378 | ||
| 379 | if (!s->s_root) { | 379 | if (!s->s_root) { |
| 380 | s->s_flags = flags; | 380 | s->s_flags = flags; |
| @@ -390,13 +390,11 @@ static int devpts_get_sb(struct file_system_type *fs_type, | |||
| 390 | if (error) | 390 | if (error) |
| 391 | goto out_undo_sget; | 391 | goto out_undo_sget; |
| 392 | 392 | ||
| 393 | simple_set_mnt(mnt, s); | 393 | return dget(s->s_root); |
| 394 | |||
| 395 | return 0; | ||
| 396 | 394 | ||
| 397 | out_undo_sget: | 395 | out_undo_sget: |
| 398 | deactivate_locked_super(s); | 396 | deactivate_locked_super(s); |
| 399 | return error; | 397 | return ERR_PTR(error); |
| 400 | } | 398 | } |
| 401 | 399 | ||
| 402 | #else | 400 | #else |
| @@ -404,10 +402,10 @@ out_undo_sget: | |||
| 404 | * This supports only the legacy single-instance semantics (no | 402 | * This supports only the legacy single-instance semantics (no |
| 405 | * multiple-instance semantics) | 403 | * multiple-instance semantics) |
| 406 | */ | 404 | */ |
| 407 | static int devpts_get_sb(struct file_system_type *fs_type, int flags, | 405 | static struct dentry *devpts_mount(struct file_system_type *fs_type, int flags, |
| 408 | const char *dev_name, void *data, struct vfsmount *mnt) | 406 | const char *dev_name, void *data) |
| 409 | { | 407 | { |
| 410 | return get_sb_single(fs_type, flags, data, devpts_fill_super, mnt); | 408 | return mount_single(fs_type, flags, data, devpts_fill_super); |
| 411 | } | 409 | } |
| 412 | #endif | 410 | #endif |
| 413 | 411 | ||
| @@ -421,7 +419,7 @@ static void devpts_kill_sb(struct super_block *sb) | |||
| 421 | 419 | ||
| 422 | static struct file_system_type devpts_fs_type = { | 420 | static struct file_system_type devpts_fs_type = { |
| 423 | .name = "devpts", | 421 | .name = "devpts", |
| 424 | .get_sb = devpts_get_sb, | 422 | .mount = devpts_mount, |
| 425 | .kill_sb = devpts_kill_sb, | 423 | .kill_sb = devpts_kill_sb, |
| 426 | }; | 424 | }; |
| 427 | 425 | ||
