diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2010-07-26 08:17:55 -0400 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2010-10-29 04:17:18 -0400 |
| commit | a7f9fb205a88ab9af675a68fc554cf51dafc8b60 (patch) | |
| tree | 0aaa2ad1b345f46fc96d3e00592f9d106a269836 | |
| parent | 8bcbbf0009dd467afd6bed1fedfcb1d2463f55a7 (diff) | |
convert ceph
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| -rw-r--r-- | fs/ceph/super.c | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/fs/ceph/super.c b/fs/ceph/super.c index d6e0e0421891..08b460ae0539 100644 --- a/fs/ceph/super.c +++ b/fs/ceph/super.c | |||
| @@ -635,7 +635,7 @@ static struct dentry *open_root_dentry(struct ceph_fs_client *fsc, | |||
| 635 | /* | 635 | /* |
| 636 | * mount: join the ceph cluster, and open root directory. | 636 | * mount: join the ceph cluster, and open root directory. |
| 637 | */ | 637 | */ |
| 638 | static int ceph_mount(struct ceph_fs_client *fsc, struct vfsmount *mnt, | 638 | static struct dentry *ceph_real_mount(struct ceph_fs_client *fsc, |
| 639 | const char *path) | 639 | const char *path) |
| 640 | { | 640 | { |
| 641 | int err; | 641 | int err; |
| @@ -678,16 +678,14 @@ static int ceph_mount(struct ceph_fs_client *fsc, struct vfsmount *mnt, | |||
| 678 | } | 678 | } |
| 679 | } | 679 | } |
| 680 | 680 | ||
| 681 | mnt->mnt_root = root; | ||
| 682 | mnt->mnt_sb = fsc->sb; | ||
| 683 | |||
| 684 | fsc->mount_state = CEPH_MOUNT_MOUNTED; | 681 | fsc->mount_state = CEPH_MOUNT_MOUNTED; |
| 685 | dout("mount success\n"); | 682 | dout("mount success\n"); |
| 686 | err = 0; | 683 | mutex_unlock(&fsc->client->mount_mutex); |
| 684 | return root; | ||
| 687 | 685 | ||
| 688 | out: | 686 | out: |
| 689 | mutex_unlock(&fsc->client->mount_mutex); | 687 | mutex_unlock(&fsc->client->mount_mutex); |
| 690 | return err; | 688 | return ERR_PTR(err); |
| 691 | 689 | ||
| 692 | fail: | 690 | fail: |
| 693 | if (first) { | 691 | if (first) { |
| @@ -777,41 +775,45 @@ static int ceph_register_bdi(struct super_block *sb, | |||
| 777 | return err; | 775 | return err; |
| 778 | } | 776 | } |
| 779 | 777 | ||
| 780 | static int ceph_get_sb(struct file_system_type *fs_type, | 778 | static struct dentry *ceph_mount(struct file_system_type *fs_type, |
| 781 | int flags, const char *dev_name, void *data, | 779 | int flags, const char *dev_name, void *data) |
| 782 | struct vfsmount *mnt) | ||
| 783 | { | 780 | { |
| 784 | struct super_block *sb; | 781 | struct super_block *sb; |
| 785 | struct ceph_fs_client *fsc; | 782 | struct ceph_fs_client *fsc; |
| 783 | struct dentry *res; | ||
| 786 | int err; | 784 | int err; |
| 787 | int (*compare_super)(struct super_block *, void *) = ceph_compare_super; | 785 | int (*compare_super)(struct super_block *, void *) = ceph_compare_super; |
| 788 | const char *path = NULL; | 786 | const char *path = NULL; |
| 789 | struct ceph_mount_options *fsopt = NULL; | 787 | struct ceph_mount_options *fsopt = NULL; |
| 790 | struct ceph_options *opt = NULL; | 788 | struct ceph_options *opt = NULL; |
| 791 | 789 | ||
| 792 | dout("ceph_get_sb\n"); | 790 | dout("ceph_mount\n"); |
| 793 | err = parse_mount_options(&fsopt, &opt, flags, data, dev_name, &path); | 791 | err = parse_mount_options(&fsopt, &opt, flags, data, dev_name, &path); |
| 794 | if (err < 0) | 792 | if (err < 0) { |
| 793 | res = ERR_PTR(err); | ||
| 795 | goto out_final; | 794 | goto out_final; |
| 795 | } | ||
| 796 | 796 | ||
| 797 | /* create client (which we may/may not use) */ | 797 | /* create client (which we may/may not use) */ |
| 798 | fsc = create_fs_client(fsopt, opt); | 798 | fsc = create_fs_client(fsopt, opt); |
| 799 | if (IS_ERR(fsc)) { | 799 | if (IS_ERR(fsc)) { |
| 800 | err = PTR_ERR(fsc); | 800 | res = ERR_CAST(fsc); |
| 801 | kfree(fsopt); | 801 | kfree(fsopt); |
| 802 | kfree(opt); | 802 | kfree(opt); |
| 803 | goto out_final; | 803 | goto out_final; |
| 804 | } | 804 | } |
| 805 | 805 | ||
| 806 | err = ceph_mdsc_init(fsc); | 806 | err = ceph_mdsc_init(fsc); |
| 807 | if (err < 0) | 807 | if (err < 0) { |
| 808 | res = ERR_PTR(err); | ||
| 808 | goto out; | 809 | goto out; |
| 810 | } | ||
| 809 | 811 | ||
| 810 | if (ceph_test_opt(fsc->client, NOSHARE)) | 812 | if (ceph_test_opt(fsc->client, NOSHARE)) |
| 811 | compare_super = NULL; | 813 | compare_super = NULL; |
| 812 | sb = sget(fs_type, compare_super, ceph_set_super, fsc); | 814 | sb = sget(fs_type, compare_super, ceph_set_super, fsc); |
| 813 | if (IS_ERR(sb)) { | 815 | if (IS_ERR(sb)) { |
| 814 | err = PTR_ERR(sb); | 816 | res = ERR_CAST(sb); |
| 815 | goto out; | 817 | goto out; |
| 816 | } | 818 | } |
| 817 | 819 | ||
| @@ -823,16 +825,18 @@ static int ceph_get_sb(struct file_system_type *fs_type, | |||
| 823 | } else { | 825 | } else { |
| 824 | dout("get_sb using new client %p\n", fsc); | 826 | dout("get_sb using new client %p\n", fsc); |
| 825 | err = ceph_register_bdi(sb, fsc); | 827 | err = ceph_register_bdi(sb, fsc); |
| 826 | if (err < 0) | 828 | if (err < 0) { |
| 829 | res = ERR_PTR(err); | ||
| 827 | goto out_splat; | 830 | goto out_splat; |
| 831 | } | ||
| 828 | } | 832 | } |
| 829 | 833 | ||
| 830 | err = ceph_mount(fsc, mnt, path); | 834 | res = ceph_real_mount(fsc, path); |
| 831 | if (err < 0) | 835 | if (IS_ERR(res)) |
| 832 | goto out_splat; | 836 | goto out_splat; |
| 833 | dout("root %p inode %p ino %llx.%llx\n", mnt->mnt_root, | 837 | dout("root %p inode %p ino %llx.%llx\n", res, |
| 834 | mnt->mnt_root->d_inode, ceph_vinop(mnt->mnt_root->d_inode)); | 838 | res->d_inode, ceph_vinop(res->d_inode)); |
| 835 | return 0; | 839 | return res; |
| 836 | 840 | ||
| 837 | out_splat: | 841 | out_splat: |
| 838 | ceph_mdsc_close_sessions(fsc->mdsc); | 842 | ceph_mdsc_close_sessions(fsc->mdsc); |
| @@ -843,8 +847,8 @@ out: | |||
| 843 | ceph_mdsc_destroy(fsc); | 847 | ceph_mdsc_destroy(fsc); |
| 844 | destroy_fs_client(fsc); | 848 | destroy_fs_client(fsc); |
| 845 | out_final: | 849 | out_final: |
| 846 | dout("ceph_get_sb fail %d\n", err); | 850 | dout("ceph_mount fail %ld\n", PTR_ERR(res)); |
| 847 | return err; | 851 | return res; |
| 848 | } | 852 | } |
| 849 | 853 | ||
| 850 | static void ceph_kill_sb(struct super_block *s) | 854 | static void ceph_kill_sb(struct super_block *s) |
| @@ -860,7 +864,7 @@ static void ceph_kill_sb(struct super_block *s) | |||
| 860 | static struct file_system_type ceph_fs_type = { | 864 | static struct file_system_type ceph_fs_type = { |
| 861 | .owner = THIS_MODULE, | 865 | .owner = THIS_MODULE, |
| 862 | .name = "ceph", | 866 | .name = "ceph", |
| 863 | .get_sb = ceph_get_sb, | 867 | .mount = ceph_mount, |
| 864 | .kill_sb = ceph_kill_sb, | 868 | .kill_sb = ceph_kill_sb, |
| 865 | .fs_flags = FS_RENAME_DOES_D_MOVE, | 869 | .fs_flags = FS_RENAME_DOES_D_MOVE, |
| 866 | }; | 870 | }; |
