@@ -22,6 +22,16 @@
#include "mds_client.h"
#include "metric.h"
+#define META_INFO_DIR_NAME "meta"
+#define CLIENT_FEATURES_DIR_NAME "client_features"
+#define MOUNT_DEVICE_V1_SUPPORT_FILE_NAME "mount_syntax_v1"
+#define MOUNT_DEVICE_V2_SUPPORT_FILE_NAME "mount_syntax_v2"
+
+static struct dentry *ceph_client_meta_dir;
+static struct dentry *ceph_client_features_dir;
+static struct dentry *ceph_mount_device_v1_support;
+static struct dentry *ceph_mount_device_v2_support;
+
static int mdsmap_show(struct seq_file *s, void *p)
{
int i;
@@ -416,6 +426,29 @@ void ceph_fs_debugfs_init(struct ceph_fs_client *fsc)
&status_fops);
}
+void ceph_fs_debugfs_client_features_init(void)
+{
+ ceph_client_meta_dir = debugfs_create_dir(META_INFO_DIR_NAME,
+ ceph_debugfs_dir);
+ ceph_client_features_dir = debugfs_create_dir(CLIENT_FEATURES_DIR_NAME,
+ ceph_client_meta_dir);
+ ceph_mount_device_v1_support = debugfs_create_file(MOUNT_DEVICE_V1_SUPPORT_FILE_NAME,
+ 0400,
+ ceph_client_features_dir,
+ NULL, NULL);
+ ceph_mount_device_v2_support = debugfs_create_file(MOUNT_DEVICE_V2_SUPPORT_FILE_NAME,
+ 0400,
+ ceph_client_features_dir,
+ NULL, NULL);
+}
+
+void ceph_fs_debugfs_client_features_cleanup(void)
+{
+ debugfs_remove(ceph_mount_device_v1_support);
+ debugfs_remove(ceph_mount_device_v2_support);
+ debugfs_remove(ceph_client_features_dir);
+ debugfs_remove(ceph_client_meta_dir);
+}
#else /* CONFIG_DEBUG_FS */
@@ -427,4 +460,12 @@ void ceph_fs_debugfs_cleanup(struct ceph_fs_client *fsc)
{
}
+void ceph_fs_debugfs_client_features_init(void)
+{
+}
+
+void ceph_fs_debugfs_client_features_cleanup(void)
+{
+}
+
#endif /* CONFIG_DEBUG_FS */
@@ -1404,6 +1404,8 @@ static int __init init_ceph(void)
if (ret)
goto out_caches;
+ ceph_fs_debugfs_client_features_init();
+
pr_info("loaded (mds proto %d)\n", CEPH_MDSC_PROTOCOL);
return 0;
@@ -1417,6 +1419,7 @@ static int __init init_ceph(void)
static void __exit exit_ceph(void)
{
dout("exit_ceph\n");
+ ceph_fs_debugfs_client_features_cleanup();
unregister_filesystem(&ceph_fs_type);
destroy_caches();
}
@@ -1231,6 +1231,8 @@ extern int ceph_locks_to_pagelist(struct ceph_filelock *flocks,
/* debugfs.c */
extern void ceph_fs_debugfs_init(struct ceph_fs_client *client);
extern void ceph_fs_debugfs_cleanup(struct ceph_fs_client *client);
+extern void ceph_fs_debugfs_client_features_init(void);
+extern void ceph_fs_debugfs_client_features_cleanup(void);
/* quota.c */
static inline bool __ceph_has_any_quota(struct ceph_inode_info *ci)
Signed-off-by: Venky Shankar <vshankar@redhat.com> --- fs/ceph/debugfs.c | 41 +++++++++++++++++++++++++++++++++++++++++ fs/ceph/super.c | 3 +++ fs/ceph/super.h | 2 ++ 3 files changed, 46 insertions(+)