提交 ddda8e0a 编写于 作者: B Bryan Schumaker 提交者: Trond Myklebust

NFS: Convert v2 into a module

The module (nfs2.ko) will be created in the same directory as nfs.ko and
will be automatically loaded the first time you try to mount over NFS v2.
Signed-off-by: NBryan Schumaker <bjschuma@netapp.com>
Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
上级 fac1e8e4
...@@ -30,7 +30,7 @@ config NFS_FS ...@@ -30,7 +30,7 @@ config NFS_FS
If unsure, say N. If unsure, say N.
config NFS_V2 config NFS_V2
bool "NFS client support for NFS version 2" tristate "NFS client support for NFS version 2"
depends on NFS_FS depends on NFS_FS
default y default y
help help
......
...@@ -9,7 +9,6 @@ nfs-y := client.o dir.o file.o getroot.o inode.o super.o \ ...@@ -9,7 +9,6 @@ nfs-y := client.o dir.o file.o getroot.o inode.o super.o \
write.o namespace.o mount_clnt.o \ write.o namespace.o mount_clnt.o \
dns_resolve.o cache_lib.o dns_resolve.o cache_lib.o
nfs-$(CONFIG_ROOT_NFS) += nfsroot.o nfs-$(CONFIG_ROOT_NFS) += nfsroot.o
nfs-$(CONFIG_NFS_V2) += nfs2super.o proc.o nfs2xdr.o
nfs-$(CONFIG_NFS_V3) += nfs3super.o nfs3client.o nfs3proc.o nfs3xdr.o nfs-$(CONFIG_NFS_V3) += nfs3super.o nfs3client.o nfs3proc.o nfs3xdr.o
nfs-$(CONFIG_NFS_V3_ACL) += nfs3acl.o nfs-$(CONFIG_NFS_V3_ACL) += nfs3acl.o
nfs-$(CONFIG_NFS_V4) += nfs4proc.o nfs4xdr.o nfs4state.o nfs4renewd.o \ nfs-$(CONFIG_NFS_V4) += nfs4proc.o nfs4xdr.o nfs4state.o nfs4renewd.o \
...@@ -25,6 +24,9 @@ endif ...@@ -25,6 +24,9 @@ endif
nfs-$(CONFIG_NFS_FSCACHE) += fscache.o fscache-index.o nfs-$(CONFIG_NFS_FSCACHE) += fscache.o fscache-index.o
obj-$(CONFIG_NFS_V2) += nfs2.o
nfs2-y := nfs2super.o proc.o nfs2xdr.o
obj-$(CONFIG_PNFS_FILE_LAYOUT) += nfs_layout_nfsv41_files.o obj-$(CONFIG_PNFS_FILE_LAYOUT) += nfs_layout_nfsv41_files.o
nfs_layout_nfsv41_files-y := nfs4filelayout.o nfs4filelayoutdev.o nfs_layout_nfsv41_files-y := nfs4filelayout.o nfs4filelayoutdev.o
......
...@@ -149,11 +149,7 @@ EXPORT_SYMBOL_GPL(unregister_nfs_version); ...@@ -149,11 +149,7 @@ EXPORT_SYMBOL_GPL(unregister_nfs_version);
*/ */
int __init nfs_register_versions(void) int __init nfs_register_versions(void)
{ {
int err = init_nfs_v2(); int err = init_nfs_v3();
if (err)
return err;
err = init_nfs_v3();
if (err) if (err)
return err; return err;
...@@ -165,7 +161,6 @@ int __init nfs_register_versions(void) ...@@ -165,7 +161,6 @@ int __init nfs_register_versions(void)
*/ */
void nfs_unregister_versions(void) void nfs_unregister_versions(void)
{ {
exit_nfs_v2();
exit_nfs_v3(); exit_nfs_v3();
exit_nfs_v4(); exit_nfs_v4();
} }
...@@ -222,6 +217,7 @@ struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_init) ...@@ -222,6 +217,7 @@ struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_init)
error_0: error_0:
return ERR_PTR(err); return ERR_PTR(err);
} }
EXPORT_SYMBOL_GPL(nfs_alloc_client);
#ifdef CONFIG_NFS_V4 #ifdef CONFIG_NFS_V4
/* idr_remove_all is not needed as all id's are removed by nfs_put_client */ /* idr_remove_all is not needed as all id's are removed by nfs_put_client */
...@@ -284,6 +280,7 @@ void nfs_free_client(struct nfs_client *clp) ...@@ -284,6 +280,7 @@ void nfs_free_client(struct nfs_client *clp)
dprintk("<-- nfs_free_client()\n"); dprintk("<-- nfs_free_client()\n");
} }
EXPORT_SYMBOL_GPL(nfs_free_client);
/* /*
* Release a reference to a shared client record * Release a reference to a shared client record
...@@ -753,6 +750,7 @@ struct nfs_client *nfs_init_client(struct nfs_client *clp, ...@@ -753,6 +750,7 @@ struct nfs_client *nfs_init_client(struct nfs_client *clp,
dprintk("<-- nfs_init_client() = xerror %d\n", error); dprintk("<-- nfs_init_client() = xerror %d\n", error);
return ERR_PTR(error); return ERR_PTR(error);
} }
EXPORT_SYMBOL_GPL(nfs_init_client);
/* /*
* Create a version 2 or 3 client * Create a version 2 or 3 client
...@@ -1122,6 +1120,7 @@ struct nfs_server *nfs_create_server(struct nfs_mount_info *mount_info, ...@@ -1122,6 +1120,7 @@ struct nfs_server *nfs_create_server(struct nfs_mount_info *mount_info,
nfs_free_server(server); nfs_free_server(server);
return ERR_PTR(error); return ERR_PTR(error);
} }
EXPORT_SYMBOL_GPL(nfs_create_server);
/* /*
* Clone an NFS2, NFS3 or NFS4 server record * Clone an NFS2, NFS3 or NFS4 server record
...@@ -1191,6 +1190,7 @@ struct nfs_server *nfs_clone_server(struct nfs_server *source, ...@@ -1191,6 +1190,7 @@ struct nfs_server *nfs_clone_server(struct nfs_server *source,
dprintk("<-- nfs_clone_server() = error %d\n", error); dprintk("<-- nfs_clone_server() = error %d\n", error);
return ERR_PTR(error); return ERR_PTR(error);
} }
EXPORT_SYMBOL_GPL(nfs_clone_server);
void nfs_clients_init(struct net *net) void nfs_clients_init(struct net *net)
{ {
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
* 6 Jun 1999 Cache readdir lookups in the page cache. -DaveM * 6 Jun 1999 Cache readdir lookups in the page cache. -DaveM
*/ */
#include <linux/module.h>
#include <linux/time.h> #include <linux/time.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/stat.h> #include <linux/stat.h>
...@@ -1196,6 +1197,7 @@ const struct dentry_operations nfs_dentry_operations = { ...@@ -1196,6 +1197,7 @@ const struct dentry_operations nfs_dentry_operations = {
.d_automount = nfs_d_automount, .d_automount = nfs_d_automount,
.d_release = nfs_d_release, .d_release = nfs_d_release,
}; };
EXPORT_SYMBOL_GPL(nfs_dentry_operations);
struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned int flags) struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned int flags)
{ {
...@@ -1263,6 +1265,7 @@ struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned in ...@@ -1263,6 +1265,7 @@ struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned in
nfs_free_fhandle(fhandle); nfs_free_fhandle(fhandle);
return res; return res;
} }
EXPORT_SYMBOL_GPL(nfs_lookup);
#ifdef CONFIG_NFS_V4 #ifdef CONFIG_NFS_V4
static int nfs4_lookup_revalidate(struct dentry *, unsigned int); static int nfs4_lookup_revalidate(struct dentry *, unsigned int);
...@@ -1508,6 +1511,7 @@ int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fhandle, ...@@ -1508,6 +1511,7 @@ int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fhandle,
dput(parent); dput(parent);
return error; return error;
} }
EXPORT_SYMBOL_GPL(nfs_instantiate);
/* /*
* Following a failed create operation, we drop the dentry rather * Following a failed create operation, we drop the dentry rather
...@@ -1536,6 +1540,7 @@ int nfs_create(struct inode *dir, struct dentry *dentry, ...@@ -1536,6 +1540,7 @@ int nfs_create(struct inode *dir, struct dentry *dentry,
d_drop(dentry); d_drop(dentry);
return error; return error;
} }
EXPORT_SYMBOL_GPL(nfs_create);
/* /*
* See comments for nfs_proc_create regarding failed operations. * See comments for nfs_proc_create regarding failed operations.
...@@ -1563,6 +1568,7 @@ nfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t rdev) ...@@ -1563,6 +1568,7 @@ nfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t rdev)
d_drop(dentry); d_drop(dentry);
return status; return status;
} }
EXPORT_SYMBOL_GPL(nfs_mknod);
/* /*
* See comments for nfs_proc_create regarding failed operations. * See comments for nfs_proc_create regarding failed operations.
...@@ -1586,6 +1592,7 @@ int nfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) ...@@ -1586,6 +1592,7 @@ int nfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
d_drop(dentry); d_drop(dentry);
return error; return error;
} }
EXPORT_SYMBOL_GPL(nfs_mkdir);
static void nfs_dentry_handle_enoent(struct dentry *dentry) static void nfs_dentry_handle_enoent(struct dentry *dentry)
{ {
...@@ -1609,6 +1616,7 @@ int nfs_rmdir(struct inode *dir, struct dentry *dentry) ...@@ -1609,6 +1616,7 @@ int nfs_rmdir(struct inode *dir, struct dentry *dentry)
return error; return error;
} }
EXPORT_SYMBOL_GPL(nfs_rmdir);
/* /*
* Remove a file after making sure there are no pending writes, * Remove a file after making sure there are no pending writes,
...@@ -1680,6 +1688,7 @@ int nfs_unlink(struct inode *dir, struct dentry *dentry) ...@@ -1680,6 +1688,7 @@ int nfs_unlink(struct inode *dir, struct dentry *dentry)
d_rehash(dentry); d_rehash(dentry);
return error; return error;
} }
EXPORT_SYMBOL_GPL(nfs_unlink);
/* /*
* To create a symbolic link, most file systems instantiate a new inode, * To create a symbolic link, most file systems instantiate a new inode,
...@@ -1750,6 +1759,7 @@ int nfs_symlink(struct inode *dir, struct dentry *dentry, const char *symname) ...@@ -1750,6 +1759,7 @@ int nfs_symlink(struct inode *dir, struct dentry *dentry, const char *symname)
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(nfs_symlink);
int int
nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry) nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
...@@ -1771,6 +1781,7 @@ nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry) ...@@ -1771,6 +1781,7 @@ nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
} }
return error; return error;
} }
EXPORT_SYMBOL_GPL(nfs_link);
/* /*
* RENAME * RENAME
...@@ -1869,6 +1880,7 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry, ...@@ -1869,6 +1880,7 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
dput(dentry); dput(dentry);
return error; return error;
} }
EXPORT_SYMBOL_GPL(nfs_rename);
static DEFINE_SPINLOCK(nfs_access_lru_lock); static DEFINE_SPINLOCK(nfs_access_lru_lock);
static LIST_HEAD(nfs_access_lru_list); static LIST_HEAD(nfs_access_lru_list);
...@@ -2188,6 +2200,7 @@ int nfs_permission(struct inode *inode, int mask) ...@@ -2188,6 +2200,7 @@ int nfs_permission(struct inode *inode, int mask)
res = generic_permission(inode, mask); res = generic_permission(inode, mask);
goto out; goto out;
} }
EXPORT_SYMBOL_GPL(nfs_permission);
/* /*
* Local variables: * Local variables:
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
* nfs regular file handling functions * nfs regular file handling functions
*/ */
#include <linux/module.h>
#include <linux/time.h> #include <linux/time.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/errno.h> #include <linux/errno.h>
...@@ -865,3 +866,4 @@ const struct file_operations nfs_file_operations = { ...@@ -865,3 +866,4 @@ const struct file_operations nfs_file_operations = {
.check_flags = nfs_check_flags, .check_flags = nfs_check_flags,
.setlease = nfs_setlease, .setlease = nfs_setlease,
}; };
EXPORT_SYMBOL_GPL(nfs_file_operations);
...@@ -193,6 +193,7 @@ void nfs_invalidate_atime(struct inode *inode) ...@@ -193,6 +193,7 @@ void nfs_invalidate_atime(struct inode *inode)
NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATIME; NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATIME;
spin_unlock(&inode->i_lock); spin_unlock(&inode->i_lock);
} }
EXPORT_SYMBOL_GPL(nfs_invalidate_atime);
/* /*
* Invalidate, but do not unhash, the inode. * Invalidate, but do not unhash, the inode.
...@@ -438,6 +439,7 @@ nfs_setattr(struct dentry *dentry, struct iattr *attr) ...@@ -438,6 +439,7 @@ nfs_setattr(struct dentry *dentry, struct iattr *attr)
out: out:
return error; return error;
} }
EXPORT_SYMBOL_GPL(nfs_setattr);
/** /**
* nfs_vmtruncate - unmap mappings "freed" by truncate() syscall * nfs_vmtruncate - unmap mappings "freed" by truncate() syscall
...@@ -496,6 +498,7 @@ void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr) ...@@ -496,6 +498,7 @@ void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr)
nfs_vmtruncate(inode, attr->ia_size); nfs_vmtruncate(inode, attr->ia_size);
} }
} }
EXPORT_SYMBOL_GPL(nfs_setattr_update_inode);
int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
{ {
...@@ -535,6 +538,7 @@ int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) ...@@ -535,6 +538,7 @@ int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
out: out:
return err; return err;
} }
EXPORT_SYMBOL_GPL(nfs_getattr);
static void nfs_init_lock_context(struct nfs_lock_context *l_ctx) static void nfs_init_lock_context(struct nfs_lock_context *l_ctx)
{ {
...@@ -623,6 +627,7 @@ void nfs_close_context(struct nfs_open_context *ctx, int is_sync) ...@@ -623,6 +627,7 @@ void nfs_close_context(struct nfs_open_context *ctx, int is_sync)
return; return;
nfs_revalidate_inode(server, inode); nfs_revalidate_inode(server, inode);
} }
EXPORT_SYMBOL_GPL(nfs_close_context);
struct nfs_open_context *alloc_nfs_open_context(struct dentry *dentry, fmode_t f_mode) struct nfs_open_context *alloc_nfs_open_context(struct dentry *dentry, fmode_t f_mode)
{ {
...@@ -1028,6 +1033,7 @@ void nfs_fattr_init(struct nfs_fattr *fattr) ...@@ -1028,6 +1033,7 @@ void nfs_fattr_init(struct nfs_fattr *fattr)
fattr->owner_name = NULL; fattr->owner_name = NULL;
fattr->group_name = NULL; fattr->group_name = NULL;
} }
EXPORT_SYMBOL_GPL(nfs_fattr_init);
struct nfs_fattr *nfs_alloc_fattr(void) struct nfs_fattr *nfs_alloc_fattr(void)
{ {
...@@ -1038,6 +1044,7 @@ struct nfs_fattr *nfs_alloc_fattr(void) ...@@ -1038,6 +1044,7 @@ struct nfs_fattr *nfs_alloc_fattr(void)
nfs_fattr_init(fattr); nfs_fattr_init(fattr);
return fattr; return fattr;
} }
EXPORT_SYMBOL_GPL(nfs_alloc_fattr);
struct nfs_fh *nfs_alloc_fhandle(void) struct nfs_fh *nfs_alloc_fhandle(void)
{ {
...@@ -1048,6 +1055,7 @@ struct nfs_fh *nfs_alloc_fhandle(void) ...@@ -1048,6 +1055,7 @@ struct nfs_fh *nfs_alloc_fhandle(void)
fh->size = 0; fh->size = 0;
return fh; return fh;
} }
EXPORT_SYMBOL_GPL(nfs_alloc_fhandle);
#ifdef NFS_DEBUG #ifdef NFS_DEBUG
/* /*
...@@ -1168,6 +1176,7 @@ int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr) ...@@ -1168,6 +1176,7 @@ int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr)
return status; return status;
} }
EXPORT_SYMBOL_GPL(nfs_refresh_inode);
static int nfs_post_op_update_inode_locked(struct inode *inode, struct nfs_fattr *fattr) static int nfs_post_op_update_inode_locked(struct inode *inode, struct nfs_fattr *fattr)
{ {
...@@ -1255,6 +1264,7 @@ int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fa ...@@ -1255,6 +1264,7 @@ int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fa
spin_unlock(&inode->i_lock); spin_unlock(&inode->i_lock);
return status; return status;
} }
EXPORT_SYMBOL_GPL(nfs_post_op_update_inode_force_wcc);
/* /*
* Many nfs protocol calls return the new file attributes after * Many nfs protocol calls return the new file attributes after
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
* NFS namespace * NFS namespace
*/ */
#include <linux/module.h>
#include <linux/dcache.h> #include <linux/dcache.h>
#include <linux/gfp.h> #include <linux/gfp.h>
#include <linux/mount.h> #include <linux/mount.h>
...@@ -255,3 +256,4 @@ struct vfsmount *nfs_submount(struct nfs_server *server, struct dentry *dentry, ...@@ -255,3 +256,4 @@ struct vfsmount *nfs_submount(struct nfs_server *server, struct dentry *dentry,
return nfs_do_submount(dentry, fh, fattr, server->client->cl_auth->au_flavor); return nfs_do_submount(dentry, fh, fattr, server->client->cl_auth->au_flavor);
} }
EXPORT_SYMBOL_GPL(nfs_submount);
...@@ -24,20 +24,6 @@ struct nfs_subversion { ...@@ -24,20 +24,6 @@ struct nfs_subversion {
int nfs_register_versions(void); int nfs_register_versions(void);
void nfs_unregister_versions(void); void nfs_unregister_versions(void);
#ifdef CONFIG_NFS_V2
int init_nfs_v2(void);
void exit_nfs_v2(void);
#else /* CONFIG_NFS_V2 */
static inline int __init init_nfs_v2(void)
{
return 0;
}
static inline void exit_nfs_v2(void)
{
}
#endif /* CONFIG_NFS_V2 */
#ifdef CONFIG_NFS_V3 #ifdef CONFIG_NFS_V3
int init_nfs_v3(void); int init_nfs_v3(void);
void exit_nfs_v3(void); void exit_nfs_v3(void);
......
...@@ -14,13 +14,18 @@ static struct nfs_subversion nfs_v2 = { ...@@ -14,13 +14,18 @@ static struct nfs_subversion nfs_v2 = {
.sops = &nfs_sops, .sops = &nfs_sops,
}; };
int __init init_nfs_v2(void) static int __init init_nfs_v2(void)
{ {
register_nfs_version(&nfs_v2); register_nfs_version(&nfs_v2);
return 0; return 0;
} }
void exit_nfs_v2(void) static void __exit exit_nfs_v2(void)
{ {
unregister_nfs_version(&nfs_v2); unregister_nfs_version(&nfs_v2);
} }
MODULE_LICENSE("GPL");
module_init(init_nfs_v2);
module_exit(exit_nfs_v2);
...@@ -113,6 +113,7 @@ void nfs_pageio_init_read(struct nfs_pageio_descriptor *pgio, ...@@ -113,6 +113,7 @@ void nfs_pageio_init_read(struct nfs_pageio_descriptor *pgio,
nfs_pageio_init(pgio, inode, &nfs_pageio_read_ops, compl_ops, nfs_pageio_init(pgio, inode, &nfs_pageio_read_ops, compl_ops,
NFS_SERVER(inode)->rsize, 0); NFS_SERVER(inode)->rsize, 0);
} }
EXPORT_SYMBOL_GPL(nfs_pageio_init_read);
void nfs_pageio_reset_read_mds(struct nfs_pageio_descriptor *pgio) void nfs_pageio_reset_read_mds(struct nfs_pageio_descriptor *pgio)
{ {
......
...@@ -289,6 +289,7 @@ struct file_system_type nfs_fs_type = { ...@@ -289,6 +289,7 @@ struct file_system_type nfs_fs_type = {
.kill_sb = nfs_kill_super, .kill_sb = nfs_kill_super,
.fs_flags = FS_RENAME_DOES_D_MOVE|FS_REVAL_DOT|FS_BINARY_MOUNTDATA, .fs_flags = FS_RENAME_DOES_D_MOVE|FS_REVAL_DOT|FS_BINARY_MOUNTDATA,
}; };
EXPORT_SYMBOL_GPL(nfs_fs_type);
struct file_system_type nfs_xdev_fs_type = { struct file_system_type nfs_xdev_fs_type = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
...@@ -312,6 +313,7 @@ const struct super_operations nfs_sops = { ...@@ -312,6 +313,7 @@ const struct super_operations nfs_sops = {
.show_stats = nfs_show_stats, .show_stats = nfs_show_stats,
.remount_fs = nfs_remount, .remount_fs = nfs_remount,
}; };
EXPORT_SYMBOL_GPL(nfs_sops);
#ifdef CONFIG_NFS_V4 #ifdef CONFIG_NFS_V4
static void nfs4_validate_mount_flags(struct nfs_parsed_mount_data *); static void nfs4_validate_mount_flags(struct nfs_parsed_mount_data *);
...@@ -1670,6 +1672,7 @@ struct dentry *nfs_try_mount(int flags, const char *dev_name, ...@@ -1670,6 +1672,7 @@ struct dentry *nfs_try_mount(int flags, const char *dev_name,
return nfs_fs_mount_common(server, flags, dev_name, mount_info, nfs_mod); return nfs_fs_mount_common(server, flags, dev_name, mount_info, nfs_mod);
} }
EXPORT_SYMBOL_GPL(nfs_try_mount);
/* /*
* Split "dev_name" into "hostname:export_path". * Split "dev_name" into "hostname:export_path".
......
...@@ -1210,6 +1210,7 @@ void nfs_pageio_init_write(struct nfs_pageio_descriptor *pgio, ...@@ -1210,6 +1210,7 @@ void nfs_pageio_init_write(struct nfs_pageio_descriptor *pgio,
nfs_pageio_init(pgio, inode, &nfs_pageio_write_ops, compl_ops, nfs_pageio_init(pgio, inode, &nfs_pageio_write_ops, compl_ops,
NFS_SERVER(inode)->wsize, ioflags); NFS_SERVER(inode)->wsize, ioflags);
} }
EXPORT_SYMBOL_GPL(nfs_pageio_init_write);
void nfs_pageio_reset_write_mds(struct nfs_pageio_descriptor *pgio) void nfs_pageio_reset_write_mds(struct nfs_pageio_descriptor *pgio)
{ {
...@@ -1688,6 +1689,7 @@ int nfs_wb_all(struct inode *inode) ...@@ -1688,6 +1689,7 @@ int nfs_wb_all(struct inode *inode)
return sync_inode(inode, &wbc); return sync_inode(inode, &wbc);
} }
EXPORT_SYMBOL_GPL(nfs_wb_all);
int nfs_wb_page_cancel(struct inode *inode, struct page *page) int nfs_wb_page_cancel(struct inode *inode, struct page *page)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册