Commit a1da9e8ab687e6496482b7b2aa17d0da31e55b20

Authored by Al Viro
1 parent e5a0726a95

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

... ... @@ -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  
... ... @@ -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