Commit a1da9e8ab687e6496482b7b2aa17d0da31e55b20
1 parent
e5a0726a95
Exists in
master
and in
39 other branches
switch logfs to ->mount()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Showing 2 changed files with 23 additions and 27 deletions Side-by-side Diff
fs/logfs/logfs.h
... | ... | @@ -620,9 +620,6 @@ |
620 | 620 | void logfs_crash_dump(struct super_block *sb); |
621 | 621 | void *memchr_inv(const void *s, int c, size_t n); |
622 | 622 | int logfs_statfs(struct dentry *dentry, struct kstatfs *stats); |
623 | -int logfs_get_sb_device(struct logfs_super *s, | |
624 | - struct file_system_type *type, int flags, | |
625 | - struct vfsmount *mnt); | |
626 | 623 | int logfs_check_ds(struct logfs_disk_super *ds); |
627 | 624 | int logfs_write_sb(struct super_block *sb); |
628 | 625 |
fs/logfs/super.c
... | ... | @@ -325,7 +325,7 @@ |
325 | 325 | return 0; |
326 | 326 | } |
327 | 327 | |
328 | -static int logfs_get_sb_final(struct super_block *sb, struct vfsmount *mnt) | |
328 | +static int logfs_get_sb_final(struct super_block *sb) | |
329 | 329 | { |
330 | 330 | struct logfs_super *super = logfs_super(sb); |
331 | 331 | struct inode *rootdir; |
... | ... | @@ -356,7 +356,6 @@ |
356 | 356 | } |
357 | 357 | |
358 | 358 | log_super("LogFS: Finished mounting\n"); |
359 | - simple_set_mnt(mnt, sb); | |
360 | 359 | return 0; |
361 | 360 | |
362 | 361 | fail: |
... | ... | @@ -536,9 +535,8 @@ |
536 | 535 | log_super("LogFS: Finished unmounting\n"); |
537 | 536 | } |
538 | 537 | |
539 | -int logfs_get_sb_device(struct logfs_super *super, | |
540 | - struct file_system_type *type, int flags, | |
541 | - struct vfsmount *mnt) | |
538 | +static struct dentry *logfs_get_sb_device(struct logfs_super *super, | |
539 | + struct file_system_type *type, int flags) | |
542 | 540 | { |
543 | 541 | struct super_block *sb; |
544 | 542 | int err = -ENOMEM; |
545 | 543 | |
... | ... | @@ -548,14 +546,17 @@ |
548 | 546 | |
549 | 547 | err = -EINVAL; |
550 | 548 | sb = sget(type, logfs_sb_test, logfs_sb_set, super); |
551 | - if (IS_ERR(sb)) | |
552 | - goto err0; | |
549 | + if (IS_ERR(sb)) { | |
550 | + super->s_devops->put_device(super); | |
551 | + kfree(super); | |
552 | + return ERR_CAST(sb); | |
553 | + } | |
553 | 554 | |
554 | 555 | if (sb->s_root) { |
555 | 556 | /* Device is already in use */ |
556 | - err = 0; | |
557 | - simple_set_mnt(mnt, sb); | |
558 | - goto err0; | |
557 | + super->s_devops->put_device(super); | |
558 | + kfree(super); | |
559 | + return dget(sb->s_root); | |
559 | 560 | } |
560 | 561 | |
561 | 562 | /* |
562 | 563 | |
... | ... | @@ -573,10 +574,12 @@ |
573 | 574 | goto err1; |
574 | 575 | |
575 | 576 | sb->s_flags |= MS_ACTIVE; |
576 | - err = logfs_get_sb_final(sb, mnt); | |
577 | - if (err) | |
577 | + err = logfs_get_sb_final(sb); | |
578 | + if (err) { | |
578 | 579 | deactivate_locked_super(sb); |
579 | - return err; | |
580 | + return ERR_PTR(err); | |
581 | + } | |
582 | + return dget(sb->s_root); | |
580 | 583 | |
581 | 584 | err1: |
582 | 585 | /* no ->s_root, no ->put_super() */ |
583 | 586 | |
... | ... | @@ -584,15 +587,11 @@ |
584 | 587 | iput(super->s_segfile_inode); |
585 | 588 | iput(super->s_mapping_inode); |
586 | 589 | deactivate_locked_super(sb); |
587 | - return err; | |
588 | -err0: | |
589 | - super->s_devops->put_device(super); | |
590 | - kfree(super); | |
591 | - return err; | |
590 | + return ERR_PTR(err); | |
592 | 591 | } |
593 | 592 | |
594 | -static int logfs_get_sb(struct file_system_type *type, int flags, | |
595 | - const char *devname, void *data, struct vfsmount *mnt) | |
593 | +static struct dentry *logfs_mount(struct file_system_type *type, int flags, | |
594 | + const char *devname, void *data) | |
596 | 595 | { |
597 | 596 | ulong mtdnr; |
598 | 597 | struct logfs_super *super; |
... | ... | @@ -600,7 +599,7 @@ |
600 | 599 | |
601 | 600 | super = kzalloc(sizeof(*super), GFP_KERNEL); |
602 | 601 | if (!super) |
603 | - return -ENOMEM; | |
602 | + return ERR_PTR(-ENOMEM); | |
604 | 603 | |
605 | 604 | if (!devname) |
606 | 605 | err = logfs_get_sb_bdev(super, type, devname); |
607 | 606 | |
608 | 607 | |
... | ... | @@ -617,16 +616,16 @@ |
617 | 616 | |
618 | 617 | if (err) { |
619 | 618 | kfree(super); |
620 | - return err; | |
619 | + return ERR_PTR(err); | |
621 | 620 | } |
622 | 621 | |
623 | - return logfs_get_sb_device(super, type, flags, mnt); | |
622 | + return logfs_get_sb_device(super, type, flags); | |
624 | 623 | } |
625 | 624 | |
626 | 625 | static struct file_system_type logfs_fs_type = { |
627 | 626 | .owner = THIS_MODULE, |
628 | 627 | .name = "logfs", |
629 | - .get_sb = logfs_get_sb, | |
628 | + .mount = logfs_mount, | |
630 | 629 | .kill_sb = logfs_kill_sb, |
631 | 630 | .fs_flags = FS_REQUIRES_DEV, |
632 | 631 |