diff options
Diffstat (limited to 'fs/nfs/super.c')
| -rw-r--r-- | fs/nfs/super.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index f1afee4eea77..e01637240eeb 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c | |||
| @@ -48,6 +48,7 @@ | |||
| 48 | #include <linux/vfs.h> | 48 | #include <linux/vfs.h> |
| 49 | #include <linux/inet.h> | 49 | #include <linux/inet.h> |
| 50 | #include <linux/in6.h> | 50 | #include <linux/in6.h> |
| 51 | #include <linux/slab.h> | ||
| 51 | #include <net/ipv6.h> | 52 | #include <net/ipv6.h> |
| 52 | #include <linux/netdevice.h> | 53 | #include <linux/netdevice.h> |
| 53 | #include <linux/nfs_xdr.h> | 54 | #include <linux/nfs_xdr.h> |
| @@ -2214,7 +2215,7 @@ static int nfs_get_sb(struct file_system_type *fs_type, | |||
| 2214 | } else { | 2215 | } else { |
| 2215 | error = nfs_bdi_register(server); | 2216 | error = nfs_bdi_register(server); |
| 2216 | if (error) | 2217 | if (error) |
| 2217 | goto error_splat_super; | 2218 | goto error_splat_bdi; |
| 2218 | } | 2219 | } |
| 2219 | 2220 | ||
| 2220 | if (!s->s_root) { | 2221 | if (!s->s_root) { |
| @@ -2256,6 +2257,9 @@ out_err_nosb: | |||
| 2256 | error_splat_root: | 2257 | error_splat_root: |
| 2257 | dput(mntroot); | 2258 | dput(mntroot); |
| 2258 | error_splat_super: | 2259 | error_splat_super: |
| 2260 | if (server && !s->s_root) | ||
| 2261 | bdi_unregister(&server->backing_dev_info); | ||
| 2262 | error_splat_bdi: | ||
| 2259 | deactivate_locked_super(s); | 2263 | deactivate_locked_super(s); |
| 2260 | goto out; | 2264 | goto out; |
| 2261 | } | 2265 | } |
| @@ -2326,7 +2330,7 @@ static int nfs_xdev_get_sb(struct file_system_type *fs_type, int flags, | |||
| 2326 | } else { | 2330 | } else { |
| 2327 | error = nfs_bdi_register(server); | 2331 | error = nfs_bdi_register(server); |
| 2328 | if (error) | 2332 | if (error) |
| 2329 | goto error_splat_super; | 2333 | goto error_splat_bdi; |
| 2330 | } | 2334 | } |
| 2331 | 2335 | ||
| 2332 | if (!s->s_root) { | 2336 | if (!s->s_root) { |
| @@ -2363,6 +2367,9 @@ out_err_noserver: | |||
| 2363 | return error; | 2367 | return error; |
| 2364 | 2368 | ||
| 2365 | error_splat_super: | 2369 | error_splat_super: |
| 2370 | if (server && !s->s_root) | ||
| 2371 | bdi_unregister(&server->backing_dev_info); | ||
| 2372 | error_splat_bdi: | ||
| 2366 | deactivate_locked_super(s); | 2373 | deactivate_locked_super(s); |
| 2367 | dprintk("<-- nfs_xdev_get_sb() = %d [splat]\n", error); | 2374 | dprintk("<-- nfs_xdev_get_sb() = %d [splat]\n", error); |
| 2368 | return error; | 2375 | return error; |
| @@ -2578,7 +2585,7 @@ static int nfs4_remote_get_sb(struct file_system_type *fs_type, | |||
| 2578 | } else { | 2585 | } else { |
| 2579 | error = nfs_bdi_register(server); | 2586 | error = nfs_bdi_register(server); |
| 2580 | if (error) | 2587 | if (error) |
| 2581 | goto error_splat_super; | 2588 | goto error_splat_bdi; |
| 2582 | } | 2589 | } |
| 2583 | 2590 | ||
| 2584 | if (!s->s_root) { | 2591 | if (!s->s_root) { |
| @@ -2616,6 +2623,9 @@ out_free: | |||
| 2616 | error_splat_root: | 2623 | error_splat_root: |
| 2617 | dput(mntroot); | 2624 | dput(mntroot); |
| 2618 | error_splat_super: | 2625 | error_splat_super: |
| 2626 | if (server && !s->s_root) | ||
| 2627 | bdi_unregister(&server->backing_dev_info); | ||
| 2628 | error_splat_bdi: | ||
| 2619 | deactivate_locked_super(s); | 2629 | deactivate_locked_super(s); |
| 2620 | goto out; | 2630 | goto out; |
| 2621 | } | 2631 | } |
| @@ -2811,7 +2821,7 @@ static int nfs4_xdev_get_sb(struct file_system_type *fs_type, int flags, | |||
| 2811 | } else { | 2821 | } else { |
| 2812 | error = nfs_bdi_register(server); | 2822 | error = nfs_bdi_register(server); |
| 2813 | if (error) | 2823 | if (error) |
| 2814 | goto error_splat_super; | 2824 | goto error_splat_bdi; |
| 2815 | } | 2825 | } |
| 2816 | 2826 | ||
| 2817 | if (!s->s_root) { | 2827 | if (!s->s_root) { |
| @@ -2847,6 +2857,9 @@ out_err_noserver: | |||
| 2847 | return error; | 2857 | return error; |
| 2848 | 2858 | ||
| 2849 | error_splat_super: | 2859 | error_splat_super: |
| 2860 | if (server && !s->s_root) | ||
| 2861 | bdi_unregister(&server->backing_dev_info); | ||
| 2862 | error_splat_bdi: | ||
| 2850 | deactivate_locked_super(s); | 2863 | deactivate_locked_super(s); |
| 2851 | dprintk("<-- nfs4_xdev_get_sb() = %d [splat]\n", error); | 2864 | dprintk("<-- nfs4_xdev_get_sb() = %d [splat]\n", error); |
| 2852 | return error; | 2865 | return error; |
| @@ -2893,7 +2906,7 @@ static int nfs4_remote_referral_get_sb(struct file_system_type *fs_type, | |||
| 2893 | } else { | 2906 | } else { |
| 2894 | error = nfs_bdi_register(server); | 2907 | error = nfs_bdi_register(server); |
| 2895 | if (error) | 2908 | if (error) |
| 2896 | goto error_splat_super; | 2909 | goto error_splat_bdi; |
| 2897 | } | 2910 | } |
| 2898 | 2911 | ||
| 2899 | if (!s->s_root) { | 2912 | if (!s->s_root) { |
| @@ -2929,6 +2942,9 @@ out_err_noserver: | |||
| 2929 | return error; | 2942 | return error; |
| 2930 | 2943 | ||
| 2931 | error_splat_super: | 2944 | error_splat_super: |
| 2945 | if (server && !s->s_root) | ||
| 2946 | bdi_unregister(&server->backing_dev_info); | ||
| 2947 | error_splat_bdi: | ||
| 2932 | deactivate_locked_super(s); | 2948 | deactivate_locked_super(s); |
| 2933 | dprintk("<-- nfs4_referral_get_sb() = %d [splat]\n", error); | 2949 | dprintk("<-- nfs4_referral_get_sb() = %d [splat]\n", error); |
| 2934 | return error; | 2950 | return error; |
