#include <linux/ceph/ceph_debug.h>
#include <linux/backing-dev.h>
#include <linux/ctype.h>
#include <linux/fs.h>
#include <linux/inet.h>
#include <linux/in6.h>
#include <linux/module.h>
#include <linux/mount.h>
#include <linux/fs_context.h>
#include <linux/fs_parser.h>
#include <linux/sched.h>
#include <linux/seq_file.h>
#include <linux/slab.h>
#include <linux/statfs.h>
#include <linux/string.h>
#include "super.h"
#include "mds_client.h"
#include "cache.h"
#include "crypto.h"
#include <linux/ceph/ceph_features.h>
#include <linux/ceph/decode.h>
#include <linux/ceph/mon_client.h>
#include <linux/ceph/auth.h>
#include <linux/ceph/debugfs.h>
#include <uapi/linux/magic.h>
static DEFINE_SPINLOCK(ceph_fsc_lock);
static LIST_HEAD(ceph_fsc_list);
static void ceph_put_super(struct super_block *s)
{ … }
static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
{ … }
static int ceph_sync_fs(struct super_block *sb, int wait)
{ … }
enum { … };
enum ceph_recover_session_mode { … };
static const struct constant_table ceph_param_recover[] = …;
static const struct fs_parameter_spec ceph_mount_parameters[] = …;
struct ceph_parse_opts_ctx { … };
static void canonicalize_path(char *path)
{ … }
static int namespace_equals(struct ceph_mount_options *fsopt,
const char *namespace, size_t len)
{ … }
static int ceph_parse_old_source(const char *dev_name, const char *dev_name_end,
struct fs_context *fc)
{ … }
static int ceph_parse_new_source(const char *dev_name, const char *dev_name_end,
struct fs_context *fc)
{ … }
static int ceph_parse_source(struct fs_parameter *param, struct fs_context *fc)
{ … }
static int ceph_parse_mon_addr(struct fs_parameter *param,
struct fs_context *fc)
{ … }
static int ceph_parse_mount_param(struct fs_context *fc,
struct fs_parameter *param)
{ … }
static void destroy_mount_options(struct ceph_mount_options *args)
{ … }
static int strcmp_null(const char *s1, const char *s2)
{ … }
static int compare_mount_options(struct ceph_mount_options *new_fsopt,
struct ceph_options *new_opt,
struct ceph_fs_client *fsc)
{ … }
static int ceph_show_options(struct seq_file *m, struct dentry *root)
{ … }
static int extra_mon_dispatch(struct ceph_client *client, struct ceph_msg *msg)
{ … }
static struct ceph_fs_client *create_fs_client(struct ceph_mount_options *fsopt,
struct ceph_options *opt)
{ … }
static void flush_fs_workqueues(struct ceph_fs_client *fsc)
{ … }
static void destroy_fs_client(struct ceph_fs_client *fsc)
{ … }
struct kmem_cache *ceph_inode_cachep;
struct kmem_cache *ceph_cap_cachep;
struct kmem_cache *ceph_cap_snap_cachep;
struct kmem_cache *ceph_cap_flush_cachep;
struct kmem_cache *ceph_dentry_cachep;
struct kmem_cache *ceph_file_cachep;
struct kmem_cache *ceph_dir_file_cachep;
struct kmem_cache *ceph_mds_request_cachep;
mempool_t *ceph_wb_pagevec_pool;
static void ceph_inode_init_once(void *foo)
{ … }
static int __init init_caches(void)
{ … }
static void destroy_caches(void)
{ … }
static void __ceph_umount_begin(struct ceph_fs_client *fsc)
{ … }
void ceph_umount_begin(struct super_block *sb)
{ … }
static const struct super_operations ceph_super_ops = …;
static struct dentry *open_root_dentry(struct ceph_fs_client *fsc,
const char *path,
unsigned long started)
{ … }
#ifdef CONFIG_FS_ENCRYPTION
static int ceph_apply_test_dummy_encryption(struct super_block *sb,
struct fs_context *fc,
struct ceph_mount_options *fsopt)
{ … }
#else
static int ceph_apply_test_dummy_encryption(struct super_block *sb,
struct fs_context *fc,
struct ceph_mount_options *fsopt)
{
return 0;
}
#endif
static struct dentry *ceph_real_mount(struct ceph_fs_client *fsc,
struct fs_context *fc)
{ … }
static int ceph_set_super(struct super_block *s, struct fs_context *fc)
{ … }
static int ceph_compare_super(struct super_block *sb, struct fs_context *fc)
{ … }
static atomic_long_t bdi_seq = …;
static int ceph_setup_bdi(struct super_block *sb, struct ceph_fs_client *fsc)
{ … }
static int ceph_get_tree(struct fs_context *fc)
{ … }
static void ceph_free_fc(struct fs_context *fc)
{ … }
static int ceph_reconfigure_fc(struct fs_context *fc)
{ … }
static const struct fs_context_operations ceph_context_ops = …;
static int ceph_init_fs_context(struct fs_context *fc)
{ … }
static bool __inc_stopping_blocker(struct ceph_mds_client *mdsc)
{ … }
static void __dec_stopping_blocker(struct ceph_mds_client *mdsc)
{ … }
bool ceph_inc_mds_stopping_blocker(struct ceph_mds_client *mdsc,
struct ceph_mds_session *session)
{ … }
void ceph_dec_mds_stopping_blocker(struct ceph_mds_client *mdsc)
{ … }
bool ceph_inc_osd_stopping_blocker(struct ceph_mds_client *mdsc)
{ … }
void ceph_dec_osd_stopping_blocker(struct ceph_mds_client *mdsc)
{ … }
static void ceph_kill_sb(struct super_block *s)
{ … }
static struct file_system_type ceph_fs_type = …;
MODULE_ALIAS_FS(…) …;
int ceph_force_reconnect(struct super_block *sb)
{ … }
static int __init init_ceph(void)
{ … }
static void __exit exit_ceph(void)
{ … }
static int param_set_metrics(const char *val, const struct kernel_param *kp)
{ … }
static const struct kernel_param_ops param_ops_metrics = …;
bool disable_send_metrics = …;
module_param_cb(…);
MODULE_PARM_DESC(…) …;
static bool mount_support = …;
static const struct kernel_param_ops param_ops_mount_syntax = …;
module_param_cb(…);
module_param_cb(…);
bool enable_unsafe_idmap = …;
module_param(enable_unsafe_idmap, bool, 0644);
MODULE_PARM_DESC(…) …;
module_init(…) …;
module_exit(exit_ceph);
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;