|
@@ -2315,18 +2315,17 @@ inline void nfs_initialise_sb(struct super_block *sb)
|
|
sb->s_blocksize = nfs_block_bits(server->wsize,
|
|
sb->s_blocksize = nfs_block_bits(server->wsize,
|
|
&sb->s_blocksize_bits);
|
|
&sb->s_blocksize_bits);
|
|
|
|
|
|
- sb->s_bdi = &server->backing_dev_info;
|
|
|
|
-
|
|
|
|
nfs_super_set_maxbytes(sb, server->maxfilesize);
|
|
nfs_super_set_maxbytes(sb, server->maxfilesize);
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
* Finish setting up an NFS2/3 superblock
|
|
* Finish setting up an NFS2/3 superblock
|
|
*/
|
|
*/
|
|
-void nfs_fill_super(struct super_block *sb, struct nfs_mount_info *mount_info)
|
|
|
|
|
|
+int nfs_fill_super(struct super_block *sb, struct nfs_mount_info *mount_info)
|
|
{
|
|
{
|
|
struct nfs_parsed_mount_data *data = mount_info->parsed;
|
|
struct nfs_parsed_mount_data *data = mount_info->parsed;
|
|
struct nfs_server *server = NFS_SB(sb);
|
|
struct nfs_server *server = NFS_SB(sb);
|
|
|
|
+ int ret;
|
|
|
|
|
|
sb->s_blocksize_bits = 0;
|
|
sb->s_blocksize_bits = 0;
|
|
sb->s_blocksize = 0;
|
|
sb->s_blocksize = 0;
|
|
@@ -2344,13 +2343,21 @@ void nfs_fill_super(struct super_block *sb, struct nfs_mount_info *mount_info)
|
|
}
|
|
}
|
|
|
|
|
|
nfs_initialise_sb(sb);
|
|
nfs_initialise_sb(sb);
|
|
|
|
+
|
|
|
|
+ ret = super_setup_bdi_name(sb, "%u:%u", MAJOR(server->s_dev),
|
|
|
|
+ MINOR(server->s_dev));
|
|
|
|
+ if (ret)
|
|
|
|
+ return ret;
|
|
|
|
+ sb->s_bdi->ra_pages = server->rpages * NFS_MAX_READAHEAD;
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(nfs_fill_super);
|
|
EXPORT_SYMBOL_GPL(nfs_fill_super);
|
|
|
|
|
|
/*
|
|
/*
|
|
* Finish setting up a cloned NFS2/3/4 superblock
|
|
* Finish setting up a cloned NFS2/3/4 superblock
|
|
*/
|
|
*/
|
|
-void nfs_clone_super(struct super_block *sb, struct nfs_mount_info *mount_info)
|
|
|
|
|
|
+int nfs_clone_super(struct super_block *sb, struct nfs_mount_info *mount_info)
|
|
{
|
|
{
|
|
const struct super_block *old_sb = mount_info->cloned->sb;
|
|
const struct super_block *old_sb = mount_info->cloned->sb;
|
|
struct nfs_server *server = NFS_SB(sb);
|
|
struct nfs_server *server = NFS_SB(sb);
|
|
@@ -2370,6 +2377,11 @@ void nfs_clone_super(struct super_block *sb, struct nfs_mount_info *mount_info)
|
|
}
|
|
}
|
|
|
|
|
|
nfs_initialise_sb(sb);
|
|
nfs_initialise_sb(sb);
|
|
|
|
+
|
|
|
|
+ sb->s_bdi = bdi_get(old_sb->s_bdi);
|
|
|
|
+ sb->s_iflags |= SB_I_DYNBDI;
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
static int nfs_compare_mount_options(const struct super_block *s, const struct nfs_server *b, int flags)
|
|
static int nfs_compare_mount_options(const struct super_block *s, const struct nfs_server *b, int flags)
|
|
@@ -2522,11 +2534,6 @@ static void nfs_get_cache_cookie(struct super_block *sb,
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
-static int nfs_bdi_register(struct nfs_server *server)
|
|
|
|
-{
|
|
|
|
- return bdi_register_dev(&server->backing_dev_info, server->s_dev);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
int nfs_set_sb_security(struct super_block *s, struct dentry *mntroot,
|
|
int nfs_set_sb_security(struct super_block *s, struct dentry *mntroot,
|
|
struct nfs_mount_info *mount_info)
|
|
struct nfs_mount_info *mount_info)
|
|
{
|
|
{
|
|
@@ -2594,17 +2601,14 @@ struct dentry *nfs_fs_mount_common(struct nfs_server *server,
|
|
nfs_free_server(server);
|
|
nfs_free_server(server);
|
|
server = NULL;
|
|
server = NULL;
|
|
} else {
|
|
} else {
|
|
- error = nfs_bdi_register(server);
|
|
|
|
- if (error) {
|
|
|
|
- mntroot = ERR_PTR(error);
|
|
|
|
- goto error_splat_super;
|
|
|
|
- }
|
|
|
|
server->super = s;
|
|
server->super = s;
|
|
}
|
|
}
|
|
|
|
|
|
if (!s->s_root) {
|
|
if (!s->s_root) {
|
|
/* initial superblock/root creation */
|
|
/* initial superblock/root creation */
|
|
- mount_info->fill_super(s, mount_info);
|
|
|
|
|
|
+ error = mount_info->fill_super(s, mount_info);
|
|
|
|
+ if (error)
|
|
|
|
+ goto error_splat_super;
|
|
nfs_get_cache_cookie(s, mount_info->parsed, mount_info->cloned);
|
|
nfs_get_cache_cookie(s, mount_info->parsed, mount_info->cloned);
|
|
}
|
|
}
|
|
|
|
|