]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/ceph/debugfs.c
Merge tag 'iio-fixes-for-3.18a' of git://git.kernel.org/pub/scm/linux/kernel/git...
[karo-tx-linux.git] / fs / ceph / debugfs.c
index 5a743ac141ab1e745063ba09974c098703c9b5b7..5d5a4c8c8496588c0c749abdb53ebf0b1be2e31e 100644 (file)
@@ -158,10 +158,47 @@ static int dentry_lru_show(struct seq_file *s, void *ptr)
        return 0;
 }
 
+static int mds_sessions_show(struct seq_file *s, void *ptr)
+{
+       struct ceph_fs_client *fsc = s->private;
+       struct ceph_mds_client *mdsc = fsc->mdsc;
+       struct ceph_auth_client *ac = fsc->client->monc.auth;
+       struct ceph_options *opt = fsc->client->options;
+       int mds = -1;
+
+       mutex_lock(&mdsc->mutex);
+
+       /* The 'num' portion of an 'entity name' */
+       seq_printf(s, "global_id %llu\n", ac->global_id);
+
+       /* The -o name mount argument */
+       seq_printf(s, "name \"%s\"\n", opt->name ? opt->name : "");
+
+       /* The list of MDS session rank+state */
+       for (mds = 0; mds < mdsc->max_sessions; mds++) {
+               struct ceph_mds_session *session =
+                       __ceph_lookup_mds_session(mdsc, mds);
+               if (!session) {
+                       continue;
+               }
+               mutex_unlock(&mdsc->mutex);
+               seq_printf(s, "mds.%d %s\n",
+                               session->s_mds,
+                               ceph_session_state_name(session->s_state));
+
+               ceph_put_mds_session(session);
+               mutex_lock(&mdsc->mutex);
+       }
+       mutex_unlock(&mdsc->mutex);
+
+       return 0;
+}
+
 CEPH_DEFINE_SHOW_FUNC(mdsmap_show)
 CEPH_DEFINE_SHOW_FUNC(mdsc_show)
 CEPH_DEFINE_SHOW_FUNC(caps_show)
 CEPH_DEFINE_SHOW_FUNC(dentry_lru_show)
+CEPH_DEFINE_SHOW_FUNC(mds_sessions_show)
 
 
 /*
@@ -193,6 +230,7 @@ void ceph_fs_debugfs_cleanup(struct ceph_fs_client *fsc)
        debugfs_remove(fsc->debugfs_bdi);
        debugfs_remove(fsc->debugfs_congestion_kb);
        debugfs_remove(fsc->debugfs_mdsmap);
+       debugfs_remove(fsc->debugfs_mds_sessions);
        debugfs_remove(fsc->debugfs_caps);
        debugfs_remove(fsc->debugfs_mdsc);
        debugfs_remove(fsc->debugfs_dentry_lru);
@@ -231,6 +269,14 @@ int ceph_fs_debugfs_init(struct ceph_fs_client *fsc)
        if (!fsc->debugfs_mdsmap)
                goto out;
 
+       fsc->debugfs_mds_sessions = debugfs_create_file("mds_sessions",
+                                       0600,
+                                       fsc->client->debugfs_dir,
+                                       fsc,
+                                       &mds_sessions_show_fops);
+       if (!fsc->debugfs_mds_sessions)
+               goto out;
+
        fsc->debugfs_mdsc = debugfs_create_file("mdsc",
                                                0600,
                                                fsc->client->debugfs_dir,