diff options
Diffstat (limited to 'fs/nfs/super.c')
-rw-r--r-- | fs/nfs/super.c | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/fs/nfs/super.c b/fs/nfs/super.c index 31a11b0e885d..6ec4fe23b756 100644 --- a/fs/nfs/super.c +++ b/fs/nfs/super.c | |||
@@ -311,7 +311,6 @@ const struct super_operations nfs_sops = { | |||
311 | .destroy_inode = nfs_destroy_inode, | 311 | .destroy_inode = nfs_destroy_inode, |
312 | .write_inode = nfs_write_inode, | 312 | .write_inode = nfs_write_inode, |
313 | .drop_inode = nfs_drop_inode, | 313 | .drop_inode = nfs_drop_inode, |
314 | .put_super = nfs_put_super, | ||
315 | .statfs = nfs_statfs, | 314 | .statfs = nfs_statfs, |
316 | .evict_inode = nfs_evict_inode, | 315 | .evict_inode = nfs_evict_inode, |
317 | .umount_begin = nfs_umount_begin, | 316 | .umount_begin = nfs_umount_begin, |
@@ -2569,7 +2568,7 @@ struct dentry *nfs_fs_mount_common(struct nfs_server *server, | |||
2569 | error = nfs_bdi_register(server); | 2568 | error = nfs_bdi_register(server); |
2570 | if (error) { | 2569 | if (error) { |
2571 | mntroot = ERR_PTR(error); | 2570 | mntroot = ERR_PTR(error); |
2572 | goto error_splat_bdi; | 2571 | goto error_splat_super; |
2573 | } | 2572 | } |
2574 | server->super = s; | 2573 | server->super = s; |
2575 | } | 2574 | } |
@@ -2601,9 +2600,6 @@ error_splat_root: | |||
2601 | dput(mntroot); | 2600 | dput(mntroot); |
2602 | mntroot = ERR_PTR(error); | 2601 | mntroot = ERR_PTR(error); |
2603 | error_splat_super: | 2602 | error_splat_super: |
2604 | if (server && !s->s_root) | ||
2605 | bdi_unregister(&server->backing_dev_info); | ||
2606 | error_splat_bdi: | ||
2607 | deactivate_locked_super(s); | 2603 | deactivate_locked_super(s); |
2608 | goto out; | 2604 | goto out; |
2609 | } | 2605 | } |
@@ -2651,27 +2647,19 @@ out: | |||
2651 | EXPORT_SYMBOL_GPL(nfs_fs_mount); | 2647 | EXPORT_SYMBOL_GPL(nfs_fs_mount); |
2652 | 2648 | ||
2653 | /* | 2649 | /* |
2654 | * Ensure that we unregister the bdi before kill_anon_super | ||
2655 | * releases the device name | ||
2656 | */ | ||
2657 | void nfs_put_super(struct super_block *s) | ||
2658 | { | ||
2659 | struct nfs_server *server = NFS_SB(s); | ||
2660 | |||
2661 | bdi_unregister(&server->backing_dev_info); | ||
2662 | } | ||
2663 | EXPORT_SYMBOL_GPL(nfs_put_super); | ||
2664 | |||
2665 | /* | ||
2666 | * Destroy an NFS2/3 superblock | 2650 | * Destroy an NFS2/3 superblock |
2667 | */ | 2651 | */ |
2668 | void nfs_kill_super(struct super_block *s) | 2652 | void nfs_kill_super(struct super_block *s) |
2669 | { | 2653 | { |
2670 | struct nfs_server *server = NFS_SB(s); | 2654 | struct nfs_server *server = NFS_SB(s); |
2655 | dev_t dev = s->s_dev; | ||
2656 | |||
2657 | generic_shutdown_super(s); | ||
2671 | 2658 | ||
2672 | kill_anon_super(s); | ||
2673 | nfs_fscache_release_super_cookie(s); | 2659 | nfs_fscache_release_super_cookie(s); |
2660 | |||
2674 | nfs_free_server(server); | 2661 | nfs_free_server(server); |
2662 | free_anon_bdev(dev); | ||
2675 | } | 2663 | } |
2676 | EXPORT_SYMBOL_GPL(nfs_kill_super); | 2664 | EXPORT_SYMBOL_GPL(nfs_kill_super); |
2677 | 2665 | ||