Skip to content

Commit

Permalink
NFS: Convert v2 into a module
Browse files Browse the repository at this point in the history
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: Bryan Schumaker <bjschuma@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
  • Loading branch information
Bryan Schumaker authored and Trond Myklebust committed Jul 30, 2012
1 parent fac1e8e commit ddda8e0
Show file tree
Hide file tree
Showing 12 changed files with 50 additions and 24 deletions.
2 changes: 1 addition & 1 deletion fs/nfs/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ config NFS_FS
If unsure, say N.

config NFS_V2
bool "NFS client support for NFS version 2"
tristate "NFS client support for NFS version 2"
depends on NFS_FS
default y
help
Expand Down
4 changes: 3 additions & 1 deletion fs/nfs/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
dns_resolve.o cache_lib.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_ACL) += nfs3acl.o
nfs-$(CONFIG_NFS_V4) += nfs4proc.o nfs4xdr.o nfs4state.o nfs4renewd.o \
Expand All @@ -25,6 +24,9 @@ endif

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
nfs_layout_nfsv41_files-y := nfs4filelayout.o nfs4filelayoutdev.o

Expand Down
12 changes: 6 additions & 6 deletions fs/nfs/client.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,11 +149,7 @@ EXPORT_SYMBOL_GPL(unregister_nfs_version);
*/
int __init nfs_register_versions(void)
{
int err = init_nfs_v2();
if (err)
return err;

err = init_nfs_v3();
int err = init_nfs_v3();
if (err)
return err;

Expand All @@ -165,7 +161,6 @@ int __init nfs_register_versions(void)
*/
void nfs_unregister_versions(void)
{
exit_nfs_v2();
exit_nfs_v3();
exit_nfs_v4();
}
Expand Down Expand Up @@ -222,6 +217,7 @@ struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_init)
error_0:
return ERR_PTR(err);
}
EXPORT_SYMBOL_GPL(nfs_alloc_client);

#ifdef CONFIG_NFS_V4
/* idr_remove_all is not needed as all id's are removed by nfs_put_client */
Expand Down Expand Up @@ -284,6 +280,7 @@ void nfs_free_client(struct nfs_client *clp)

dprintk("<-- nfs_free_client()\n");
}
EXPORT_SYMBOL_GPL(nfs_free_client);

/*
* Release a reference to a shared client record
Expand Down Expand Up @@ -753,6 +750,7 @@ struct nfs_client *nfs_init_client(struct nfs_client *clp,
dprintk("<-- nfs_init_client() = xerror %d\n", error);
return ERR_PTR(error);
}
EXPORT_SYMBOL_GPL(nfs_init_client);

/*
* Create a version 2 or 3 client
Expand Down Expand Up @@ -1122,6 +1120,7 @@ struct nfs_server *nfs_create_server(struct nfs_mount_info *mount_info,
nfs_free_server(server);
return ERR_PTR(error);
}
EXPORT_SYMBOL_GPL(nfs_create_server);

/*
* Clone an NFS2, NFS3 or NFS4 server record
Expand Down Expand Up @@ -1191,6 +1190,7 @@ struct nfs_server *nfs_clone_server(struct nfs_server *source,
dprintk("<-- nfs_clone_server() = error %d\n", error);
return ERR_PTR(error);
}
EXPORT_SYMBOL_GPL(nfs_clone_server);

void nfs_clients_init(struct net *net)
{
Expand Down
13 changes: 13 additions & 0 deletions fs/nfs/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
* 6 Jun 1999 Cache readdir lookups in the page cache. -DaveM
*/

#include <linux/module.h>
#include <linux/time.h>
#include <linux/errno.h>
#include <linux/stat.h>
Expand Down Expand Up @@ -1196,6 +1197,7 @@ const struct dentry_operations nfs_dentry_operations = {
.d_automount = nfs_d_automount,
.d_release = nfs_d_release,
};
EXPORT_SYMBOL_GPL(nfs_dentry_operations);

struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned int flags)
{
Expand Down Expand Up @@ -1263,6 +1265,7 @@ struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, unsigned in
nfs_free_fhandle(fhandle);
return res;
}
EXPORT_SYMBOL_GPL(nfs_lookup);

#ifdef CONFIG_NFS_V4
static int nfs4_lookup_revalidate(struct dentry *, unsigned int);
Expand Down Expand Up @@ -1508,6 +1511,7 @@ int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fhandle,
dput(parent);
return error;
}
EXPORT_SYMBOL_GPL(nfs_instantiate);

/*
* Following a failed create operation, we drop the dentry rather
Expand Down Expand Up @@ -1536,6 +1540,7 @@ int nfs_create(struct inode *dir, struct dentry *dentry,
d_drop(dentry);
return error;
}
EXPORT_SYMBOL_GPL(nfs_create);

/*
* See comments for nfs_proc_create regarding failed operations.
Expand Down Expand Up @@ -1563,6 +1568,7 @@ nfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t rdev)
d_drop(dentry);
return status;
}
EXPORT_SYMBOL_GPL(nfs_mknod);

/*
* See comments for nfs_proc_create regarding failed operations.
Expand All @@ -1586,6 +1592,7 @@ int nfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
d_drop(dentry);
return error;
}
EXPORT_SYMBOL_GPL(nfs_mkdir);

static void nfs_dentry_handle_enoent(struct dentry *dentry)
{
Expand All @@ -1609,6 +1616,7 @@ int nfs_rmdir(struct inode *dir, struct dentry *dentry)

return error;
}
EXPORT_SYMBOL_GPL(nfs_rmdir);

/*
* Remove a file after making sure there are no pending writes,
Expand Down Expand Up @@ -1680,6 +1688,7 @@ int nfs_unlink(struct inode *dir, struct dentry *dentry)
d_rehash(dentry);
return error;
}
EXPORT_SYMBOL_GPL(nfs_unlink);

/*
* To create a symbolic link, most file systems instantiate a new inode,
Expand Down Expand Up @@ -1750,6 +1759,7 @@ int nfs_symlink(struct inode *dir, struct dentry *dentry, const char *symname)

return 0;
}
EXPORT_SYMBOL_GPL(nfs_symlink);

int
nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
Expand All @@ -1771,6 +1781,7 @@ nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
}
return error;
}
EXPORT_SYMBOL_GPL(nfs_link);

/*
* RENAME
Expand Down Expand Up @@ -1869,6 +1880,7 @@ int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
dput(dentry);
return error;
}
EXPORT_SYMBOL_GPL(nfs_rename);

static DEFINE_SPINLOCK(nfs_access_lru_lock);
static LIST_HEAD(nfs_access_lru_list);
Expand Down Expand Up @@ -2188,6 +2200,7 @@ int nfs_permission(struct inode *inode, int mask)
res = generic_permission(inode, mask);
goto out;
}
EXPORT_SYMBOL_GPL(nfs_permission);

/*
* Local variables:
Expand Down
2 changes: 2 additions & 0 deletions fs/nfs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
* nfs regular file handling functions
*/

#include <linux/module.h>
#include <linux/time.h>
#include <linux/kernel.h>
#include <linux/errno.h>
Expand Down Expand Up @@ -865,3 +866,4 @@ const struct file_operations nfs_file_operations = {
.check_flags = nfs_check_flags,
.setlease = nfs_setlease,
};
EXPORT_SYMBOL_GPL(nfs_file_operations);
10 changes: 10 additions & 0 deletions fs/nfs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ void nfs_invalidate_atime(struct inode *inode)
NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATIME;
spin_unlock(&inode->i_lock);
}
EXPORT_SYMBOL_GPL(nfs_invalidate_atime);

/*
* Invalidate, but do not unhash, the inode.
Expand Down Expand Up @@ -438,6 +439,7 @@ nfs_setattr(struct dentry *dentry, struct iattr *attr)
out:
return error;
}
EXPORT_SYMBOL_GPL(nfs_setattr);

/**
* nfs_vmtruncate - unmap mappings "freed" by truncate() syscall
Expand Down Expand Up @@ -496,6 +498,7 @@ void nfs_setattr_update_inode(struct inode *inode, struct iattr *attr)
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)
{
Expand Down Expand Up @@ -535,6 +538,7 @@ int nfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
out:
return err;
}
EXPORT_SYMBOL_GPL(nfs_getattr);

static void nfs_init_lock_context(struct nfs_lock_context *l_ctx)
{
Expand Down Expand Up @@ -623,6 +627,7 @@ void nfs_close_context(struct nfs_open_context *ctx, int is_sync)
return;
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)
{
Expand Down Expand Up @@ -1028,6 +1033,7 @@ void nfs_fattr_init(struct nfs_fattr *fattr)
fattr->owner_name = NULL;
fattr->group_name = NULL;
}
EXPORT_SYMBOL_GPL(nfs_fattr_init);

struct nfs_fattr *nfs_alloc_fattr(void)
{
Expand All @@ -1038,6 +1044,7 @@ struct nfs_fattr *nfs_alloc_fattr(void)
nfs_fattr_init(fattr);
return fattr;
}
EXPORT_SYMBOL_GPL(nfs_alloc_fattr);

struct nfs_fh *nfs_alloc_fhandle(void)
{
Expand All @@ -1048,6 +1055,7 @@ struct nfs_fh *nfs_alloc_fhandle(void)
fh->size = 0;
return fh;
}
EXPORT_SYMBOL_GPL(nfs_alloc_fhandle);

#ifdef NFS_DEBUG
/*
Expand Down Expand Up @@ -1168,6 +1176,7 @@ int nfs_refresh_inode(struct inode *inode, struct nfs_fattr *fattr)

return status;
}
EXPORT_SYMBOL_GPL(nfs_refresh_inode);

static int nfs_post_op_update_inode_locked(struct inode *inode, struct nfs_fattr *fattr)
{
Expand Down Expand Up @@ -1255,6 +1264,7 @@ int nfs_post_op_update_inode_force_wcc(struct inode *inode, struct nfs_fattr *fa
spin_unlock(&inode->i_lock);
return status;
}
EXPORT_SYMBOL_GPL(nfs_post_op_update_inode_force_wcc);

/*
* Many nfs protocol calls return the new file attributes after
Expand Down
2 changes: 2 additions & 0 deletions fs/nfs/namespace.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
* NFS namespace
*/

#include <linux/module.h>
#include <linux/dcache.h>
#include <linux/gfp.h>
#include <linux/mount.h>
Expand Down Expand Up @@ -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);
}
EXPORT_SYMBOL_GPL(nfs_submount);
14 changes: 0 additions & 14 deletions fs/nfs/nfs.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,6 @@ struct nfs_subversion {
int nfs_register_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
int init_nfs_v3(void);
void exit_nfs_v3(void);
Expand Down
9 changes: 7 additions & 2 deletions fs/nfs/nfs2super.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,18 @@ static struct nfs_subversion nfs_v2 = {
.sops = &nfs_sops,
};

int __init init_nfs_v2(void)
static int __init init_nfs_v2(void)
{
register_nfs_version(&nfs_v2);
return 0;
}

void exit_nfs_v2(void)
static void __exit exit_nfs_v2(void)
{
unregister_nfs_version(&nfs_v2);
}

MODULE_LICENSE("GPL");

module_init(init_nfs_v2);
module_exit(exit_nfs_v2);
1 change: 1 addition & 0 deletions fs/nfs/read.c
Original file line number Diff line number Diff line change
Expand Up @@ -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_SERVER(inode)->rsize, 0);
}
EXPORT_SYMBOL_GPL(nfs_pageio_init_read);

void nfs_pageio_reset_read_mds(struct nfs_pageio_descriptor *pgio)
{
Expand Down
3 changes: 3 additions & 0 deletions fs/nfs/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ struct file_system_type nfs_fs_type = {
.kill_sb = nfs_kill_super,
.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 = {
.owner = THIS_MODULE,
Expand All @@ -312,6 +313,7 @@ const struct super_operations nfs_sops = {
.show_stats = nfs_show_stats,
.remount_fs = nfs_remount,
};
EXPORT_SYMBOL_GPL(nfs_sops);

#ifdef CONFIG_NFS_V4
static void nfs4_validate_mount_flags(struct nfs_parsed_mount_data *);
Expand Down Expand Up @@ -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);
}
EXPORT_SYMBOL_GPL(nfs_try_mount);

/*
* Split "dev_name" into "hostname:export_path".
Expand Down
2 changes: 2 additions & 0 deletions fs/nfs/write.c
Original file line number Diff line number Diff line change
Expand Up @@ -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_SERVER(inode)->wsize, ioflags);
}
EXPORT_SYMBOL_GPL(nfs_pageio_init_write);

void nfs_pageio_reset_write_mds(struct nfs_pageio_descriptor *pgio)
{
Expand Down Expand Up @@ -1688,6 +1689,7 @@ int nfs_wb_all(struct inode *inode)

return sync_inode(inode, &wbc);
}
EXPORT_SYMBOL_GPL(nfs_wb_all);

int nfs_wb_page_cancel(struct inode *inode, struct page *page)
{
Expand Down

0 comments on commit ddda8e0

Please sign in to comment.