diff mbox series

[RFC,2/2] ceph: add debugfs entries for v2 (new) mount syntax support

Message ID 20210818060134.208546-3-vshankar@redhat.com
State Superseded
Headers show
Series ceph: add debugfs entries signifying new mount syntax support | expand

Commit Message

Venky Shankar Aug. 18, 2021, 6:01 a.m. UTC
Signed-off-by: Venky Shankar <vshankar@redhat.com>
---
 fs/ceph/debugfs.c | 28 ++++++++++++++++++++++++++++
 fs/ceph/super.c   |  3 +++
 fs/ceph/super.h   |  2 ++
 3 files changed, 33 insertions(+)

Comments

Patrick Donnelly Aug. 21, 2021, 1:52 a.m. UTC | #1
On Wed, Aug 18, 2021 at 2:01 AM Venky Shankar <vshankar@redhat.com> wrote:
>

> [...]


Is "debugfs" the right place for this? I do wonder if that can be
dropped/disabled via some obscure kernel config?

Also "debugX" doesn't sound like the proper place for a feature flag
of the kernel. I just did a quick check on my system and I do see:

$ ls /sys/fs/ext4/features
batched_discard  casefold  encryption  fast_commit  lazy_itable_init
meta_bg_resize  metadata_csum_seed  test_dummy_encryption_v2  verity

Perhaps we need something similar for fs/ceph?

-- 
Patrick Donnelly, Ph.D.
He / Him / His
Principal Software Engineer
Red Hat Sunnyvale, CA
GPG: 19F28A586F808C2402351B93C3301A3E258DD79D
Venky Shankar Aug. 23, 2021, 4:45 a.m. UTC | #2
On Sat, Aug 21, 2021 at 7:23 AM Patrick Donnelly <pdonnell@redhat.com> wrote:
>

> On Wed, Aug 18, 2021 at 2:01 AM Venky Shankar <vshankar@redhat.com> wrote:

> >

> > [...]

>

> Is "debugfs" the right place for this? I do wonder if that can be

> dropped/disabled via some obscure kernel config?


The primary use for this (v2 syntax entry) is for catching bugs in v2
mount syntax implementation which sounds more like a form of
"debugging". Sysfs represents the whole device model as seen from the
kernel.

And, sysfs is optional too (CONFIG_SYSFS).

>

> Also "debugX" doesn't sound like the proper place for a feature flag

> of the kernel. I just did a quick check on my system and I do see:

>

> $ ls /sys/fs/ext4/features

> batched_discard  casefold  encryption  fast_commit  lazy_itable_init

> meta_bg_resize  metadata_csum_seed  test_dummy_encryption_v2  verity

>

> Perhaps we need something similar for fs/ceph?

>

> --

> Patrick Donnelly, Ph.D.

> He / Him / His

> Principal Software Engineer

> Red Hat Sunnyvale, CA

> GPG: 19F28A586F808C2402351B93C3301A3E258DD79D

>



-- 
Cheers,
Venky
Venky Shankar Aug. 23, 2021, 5:31 a.m. UTC | #3
On Mon, Aug 23, 2021 at 10:15 AM Venky Shankar <vshankar@redhat.com> wrote:
>

> On Sat, Aug 21, 2021 at 7:23 AM Patrick Donnelly <pdonnell@redhat.com> wrote:

> >

> > On Wed, Aug 18, 2021 at 2:01 AM Venky Shankar <vshankar@redhat.com> wrote:

> > >

> > > [...]

> >

> > Is "debugfs" the right place for this? I do wonder if that can be

> > dropped/disabled via some obscure kernel config?

>

> The primary use for this (v2 syntax entry) is for catching bugs in v2

> mount syntax implementation which sounds more like a form of

> "debugging". Sysfs represents the whole device model as seen from the

> kernel.


So, Jeff in another thread suggested that we make these debugfs
entries generic (client_features). In that case, I'm ok with having
these in sysfs.

>

> And, sysfs is optional too (CONFIG_SYSFS).

>

> >

> > Also "debugX" doesn't sound like the proper place for a feature flag

> > of the kernel. I just did a quick check on my system and I do see:

> >

> > $ ls /sys/fs/ext4/features

> > batched_discard  casefold  encryption  fast_commit  lazy_itable_init

> > meta_bg_resize  metadata_csum_seed  test_dummy_encryption_v2  verity

> >

> > Perhaps we need something similar for fs/ceph?

> >

> > --

> > Patrick Donnelly, Ph.D.

> > He / Him / His

> > Principal Software Engineer

> > Red Hat Sunnyvale, CA

> > GPG: 19F28A586F808C2402351B93C3301A3E258DD79D

> >

>

>

> --

> Cheers,

> Venky




-- 
Cheers,
Venky
Jeff Layton Aug. 23, 2021, 10:32 a.m. UTC | #4
On Mon, 2021-08-23 at 11:01 +0530, Venky Shankar wrote:
> On Mon, Aug 23, 2021 at 10:15 AM Venky Shankar <vshankar@redhat.com> wrote:

> > 

> > On Sat, Aug 21, 2021 at 7:23 AM Patrick Donnelly <pdonnell@redhat.com> wrote:

> > > 

> > > On Wed, Aug 18, 2021 at 2:01 AM Venky Shankar <vshankar@redhat.com> wrote:

> > > > 

> > > > [...]

> > > 

> > > Is "debugfs" the right place for this? I do wonder if that can be

> > > dropped/disabled via some obscure kernel config?

> > 

> > The primary use for this (v2 syntax entry) is for catching bugs in v2

> > mount syntax implementation which sounds more like a form of

> > "debugging". Sysfs represents the whole device model as seen from the

> > kernel.

> 

> So, Jeff in another thread suggested that we make these debugfs

> entries generic (client_features). In that case, I'm ok with having

> these in sysfs.

> 


I think debugfs is fine for this. This is mainly for teuthology, and in
that case we'll have debugfs available.

One of the reasons to use debugfs here is that stuff in there is
specifically _not_ considered part of the kernel's ABI, so we can more
easily make changes to it in the future w/o worrying as much about
backward compatibility.

> > 

> > And, sysfs is optional too (CONFIG_SYSFS).

> > 

> > > 

> > > Also "debugX" doesn't sound like the proper place for a feature flag

> > > of the kernel. I just did a quick check on my system and I do see:

> > > 

> > > $ ls /sys/fs/ext4/features

> > > batched_discard  casefold  encryption  fast_commit  lazy_itable_init

> > > meta_bg_resize  metadata_csum_seed  test_dummy_encryption_v2  verity

> > > 

> > > Perhaps we need something similar for fs/ceph?

> > > 

> > > --

> > > Patrick Donnelly, Ph.D.

> > > He / Him / His

> > > Principal Software Engineer

> > > Red Hat Sunnyvale, CA

> > > GPG: 19F28A586F808C2402351B93C3301A3E258DD79D

> > > 

> > 

> > 

> > --

> > Cheers,

> > Venky

> 

> 

> 


-- 
Jeff Layton <jlayton@redhat.com>
diff mbox series

Patch

diff --git a/fs/ceph/debugfs.c b/fs/ceph/debugfs.c
index 66989c880adb..d19f15ace781 100644
--- a/fs/ceph/debugfs.c
+++ b/fs/ceph/debugfs.c
@@ -22,6 +22,12 @@ 
 #include "mds_client.h"
 #include "metric.h"
 
+#define MNT_DEV_SUPPORT_DIR   "dev_support"
+#define MNT_DEV_V2_FILE  "v2"
+
+static struct dentry *ceph_mnt_dev_support_dir;
+static struct dentry *ceph_mnt_dev_v2_file;
+
 static int mdsmap_show(struct seq_file *s, void *p)
 {
 	int i;
@@ -416,6 +422,20 @@  void ceph_fs_debugfs_init(struct ceph_fs_client *fsc)
 						  &status_fops);
 }
 
+void ceph_fs_debugfs_mnt_dev_init(void)
+{
+	ceph_mnt_dev_support_dir = ceph_debugfs_create_subdir(MNT_DEV_SUPPORT_DIR);
+	ceph_mnt_dev_v2_file = debugfs_create_file(MNT_DEV_V2_FILE,
+						   0400,
+						   ceph_mnt_dev_support_dir,
+						   NULL, NULL);
+}
+
+void ceph_fs_debugfs_mnt_dev_cleanup(void)
+{
+	debugfs_remove(ceph_mnt_dev_v2_file);
+	ceph_debugfs_cleanup_subdir(ceph_mnt_dev_support_dir);
+}
 
 #else  /* CONFIG_DEBUG_FS */
 
@@ -427,4 +447,12 @@  void ceph_fs_debugfs_cleanup(struct ceph_fs_client *fsc)
 {
 }
 
+void ceph_fs_debugfs_mnt_dev_init(void)
+{
+}
+
+void ceph_fs_debugfs_mnt_dev_cleanup(void)
+{
+}
+
 #endif  /* CONFIG_DEBUG_FS */
diff --git a/fs/ceph/super.c b/fs/ceph/super.c
index 609ffc8c2d78..21e4a8249afd 100644
--- a/fs/ceph/super.c
+++ b/fs/ceph/super.c
@@ -1404,6 +1404,8 @@  static int __init init_ceph(void)
 	if (ret)
 		goto out_caches;
 
+	ceph_fs_debugfs_mnt_dev_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_mnt_dev_cleanup();
 	unregister_filesystem(&ceph_fs_type);
 	destroy_caches();
 }
diff --git a/fs/ceph/super.h b/fs/ceph/super.h
index 8f71184b7c85..3c63c1adcfaa 100644
--- a/fs/ceph/super.h
+++ b/fs/ceph/super.h
@@ -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_mnt_dev_init(void);
+extern void ceph_fs_debugfs_mnt_dev_cleanup(void);
 
 /* quota.c */
 static inline bool __ceph_has_any_quota(struct ceph_inode_info *ci)