#include <linux/module.h>
#include <linux/kobject.h>
#include <linux/sysfs.h>
#include <linux/fs.h>
#include <linux/slab.h>
#include <linux/netdevice.h>
#include <linux/string.h>
#include <linux/nfs_fs.h>
#include <linux/rcupdate.h>
#include <linux/lockd/lockd.h>
#include "nfs4_fs.h"
#include "netns.h"
#include "sysfs.h"
static struct kset *nfs_kset;
static void nfs_kset_release(struct kobject *kobj)
{ … }
static const struct kobj_ns_type_operations *nfs_netns_object_child_ns_type(
const struct kobject *kobj)
{ … }
static struct kobj_type nfs_kset_type = …;
int nfs_sysfs_init(void)
{ … }
void nfs_sysfs_exit(void)
{ … }
static ssize_t nfs_netns_identifier_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{ … }
static size_t nfs_string_strip(const char *c, size_t len)
{ … }
static ssize_t nfs_netns_identifier_store(struct kobject *kobj,
struct kobj_attribute *attr,
const char *buf, size_t count)
{ … }
static void nfs_netns_client_release(struct kobject *kobj)
{ … }
static const void *nfs_netns_client_namespace(const struct kobject *kobj)
{ … }
static struct kobj_attribute nfs_netns_client_id = …;
static struct attribute *nfs_netns_client_attrs[] = …;
ATTRIBUTE_GROUPS(…);
static struct kobj_type nfs_netns_client_type = …;
static void nfs_netns_object_release(struct kobject *kobj)
{ … }
static const void *nfs_netns_namespace(const struct kobject *kobj)
{ … }
static struct kobj_type nfs_netns_object_type = …;
static struct nfs_netns_client *nfs_netns_client_alloc(struct kobject *parent,
struct net *net)
{ … }
void nfs_netns_sysfs_setup(struct nfs_net *netns, struct net *net)
{ … }
void nfs_netns_sysfs_destroy(struct nfs_net *netns)
{ … }
static bool shutdown_match_client(const struct rpc_task *task, const void *data)
{ … }
static void shutdown_client(struct rpc_clnt *clnt)
{ … }
static ssize_t
shutdown_show(struct kobject *kobj, struct kobj_attribute *attr,
char *buf)
{ … }
static ssize_t
shutdown_store(struct kobject *kobj, struct kobj_attribute *attr,
const char *buf, size_t count)
{ … }
static struct kobj_attribute nfs_sysfs_attr_shutdown = …;
#define RPC_CLIENT_NAME_SIZE …
void nfs_sysfs_link_rpc_client(struct nfs_server *server,
struct rpc_clnt *clnt, const char *uniq)
{ … }
EXPORT_SYMBOL_GPL(…);
static void nfs_sysfs_sb_release(struct kobject *kobj)
{ … }
static const void *nfs_netns_server_namespace(const struct kobject *kobj)
{ … }
static struct kobj_type nfs_sb_ktype = …;
void nfs_sysfs_add_server(struct nfs_server *server)
{ … }
EXPORT_SYMBOL_GPL(…);
void nfs_sysfs_move_server_to_sb(struct super_block *s)
{ … }
void nfs_sysfs_move_sb_to_server(struct nfs_server *server)
{ … }
void nfs_sysfs_remove_server(struct nfs_server *server)
{ … }