]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: move caps stats into client debugfs dir; fix error checking
authorSage Weil <sage@newdream.net>
Thu, 17 Sep 2009 19:04:28 +0000 (12:04 -0700)
committerSage Weil <sage@newdream.net>
Thu, 17 Sep 2009 19:04:35 +0000 (12:04 -0700)
src/TODO
src/kernel/caps.c
src/kernel/debugfs.c
src/kernel/super.h

index f667c97c72314010a25af3daecfae355f06c6a65..91ba25724130b0a81af7d0e57b1d89121f9b6721 100644 (file)
--- a/src/TODO
+++ b/src/TODO
@@ -87,6 +87,7 @@ repair
 - mds scrubbing
 
 kclient
+- make caps reservations per-client
 - fix up ESTALE handling
 - don't retry on ENOMEM on non-nofail requests in kick_requests
 - make cap import/export more efficient?
index fd36fca3a1f4221ad7d753fa52ed4a9ef0c66f3c..1d3ce57bdf3c891d44277db64c0688a7497cf1f6 100644 (file)
@@ -287,7 +287,8 @@ static void put_cap(struct ceph_cap *cap,
        spin_unlock(&caps_list_lock);
 }
 
-void ceph_reservation_status(int *total, int *avail, int *used, int *reserved)
+void ceph_reservation_status(struct ceph_client *client,
+                            int *total, int *avail, int *used, int *reserved)
 {
        if (total)
                *total = caps_total_count;
index 06bc8a632bd923ef07cbcf1ac822e7dbaeee06e2..3902aad9466a863dab0d67d1cc0aabdb72a4b523 100644 (file)
@@ -9,7 +9,6 @@
 /*
  * Implement /sys/kernel/debug/ceph fun
  *
- * /sys/kernel/debug/ceph/caps_reservation  - expose caps reservation stats
  * /sys/kernel/debug/ceph/client*  - an instance of the ceph client
  *      .../osdmap      - current osdmap
  *      .../mdsmap      - current mdsmap
  *      .../mdsc        - active mds requests
  *      .../monc        - mon client state
  *      .../dentry_lru  - dump contents of dentry lru
+ *      .../caps        - expose cap (reservation) stats
  */
 
 static struct dentry *ceph_debugfs_dir;
-static struct dentry *ceph_debugfs_caps_reservation;
 
 static int monmap_show(struct seq_file *s, void *p)
 {
@@ -255,12 +254,12 @@ static int osdc_show(struct seq_file *s, void *pp)
        return 0;
 }
 
-static int caps_reservation_show(struct seq_file *s, void *p)
+static int caps_show(struct seq_file *s, void *p)
 {
+       struct ceph_client *client = p;
        int total, avail, used, reserved;
 
-       ceph_reservation_status(&total, &avail, &used, &reserved);
-
+       ceph_reservation_status(client, &total, &avail, &used, &reserved);
        seq_printf(s, "total\t\t%d\n"
                      "avail\t\t%d\n"
                      "used\t\t%d\n"
@@ -311,26 +310,16 @@ DEFINE_SHOW_FUNC(osdmap_show)
 DEFINE_SHOW_FUNC(monc_show)
 DEFINE_SHOW_FUNC(mdsc_show)
 DEFINE_SHOW_FUNC(osdc_show)
-DEFINE_SHOW_FUNC(caps_reservation_show)
 DEFINE_SHOW_FUNC(dentry_lru_show)
+DEFINE_SHOW_FUNC(caps_show)
 
 int ceph_debugfs_init(void)
 {
        int ret = -ENOMEM;
 
        ceph_debugfs_dir = debugfs_create_dir("ceph", NULL);
-
        if (!ceph_debugfs_dir)
                goto out;
-
-       ceph_debugfs_caps_reservation = debugfs_create_file("caps_reservation",
-                                       0400,
-                                       ceph_debugfs_dir,
-                                       NULL,
-                                       &caps_reservation_show_fops);
-       if (!ceph_debugfs_caps_reservation)
-               goto out;
-
        return 0;
 
 out:
@@ -340,7 +329,6 @@ out:
 
 void ceph_debugfs_cleanup(void)
 {
-       debugfs_remove(ceph_debugfs_caps_reservation);
        debugfs_remove(ceph_debugfs_dir);
 }
 
@@ -349,8 +337,8 @@ int ceph_debugfs_client_init(struct ceph_client *client)
        int ret = 0;
        char name[80];
 
-       snprintf(name, sizeof(name), "client%lld." FSID_FORMAT,
-                client->whoami, PR_FSID(&client->monc.monmap->fsid));
+       snprintf(name, sizeof(name), FSID_FORMAT ".client%lld", 
+                PR_FSID(&client->monc.monmap->fsid), client->whoami);
 
        client->debugfs_dir = debugfs_create_dir(name, ceph_debugfs_dir);
        if (!client->debugfs_dir)
@@ -361,7 +349,7 @@ int ceph_debugfs_client_init(struct ceph_client *client)
                                                      client->debugfs_dir,
                                                      client,
                                                      &monc_show_fops);
-       if (ret)
+       if (!client->monc.debugfs_file)
                goto out;
 
        client->mdsc.debugfs_file = debugfs_create_file("mdsc",
@@ -369,7 +357,7 @@ int ceph_debugfs_client_init(struct ceph_client *client)
                                                      client->debugfs_dir,
                                                      client,
                                                      &mdsc_show_fops);
-       if (ret)
+       if (!client->mdsc.debugfs_file)
                goto out;
 
        client->osdc.debugfs_file = debugfs_create_file("osdc",
@@ -377,7 +365,7 @@ int ceph_debugfs_client_init(struct ceph_client *client)
                                                      client->debugfs_dir,
                                                      client,
                                                      &osdc_show_fops);
-       if (ret)
+       if (!client->osdc.debugfs_file)
                goto out;
 
        client->debugfs_monmap = debugfs_create_file("monmap",
@@ -409,7 +397,15 @@ int ceph_debugfs_client_init(struct ceph_client *client)
                                        client->debugfs_dir,
                                        client,
                                        &dentry_lru_show_fops);
-       if (!client->debugfs_osdmap)
+       if (!client->debugfs_dentry_lru)
+               goto out;
+
+       client->debugfs_caps = debugfs_create_file("caps",
+                                                  0400,
+                                                  client->debugfs_dir,
+                                                  client,
+                                                  &caps_show_fops);
+       if (!client->debugfs_caps)
                goto out;
 
        return 0;
@@ -421,13 +417,14 @@ out:
 
 void ceph_debugfs_client_cleanup(struct ceph_client *client)
 {
-       debugfs_remove(client->monc.debugfs_file);
-       debugfs_remove(client->mdsc.debugfs_file);
-       debugfs_remove(client->osdc.debugfs_file);
+       debugfs_remove(client->debugfs_caps);
        debugfs_remove(client->debugfs_dentry_lru);
-       debugfs_remove(client->debugfs_monmap);
-       debugfs_remove(client->debugfs_mdsmap);
        debugfs_remove(client->debugfs_osdmap);
+       debugfs_remove(client->debugfs_mdsmap);
+       debugfs_remove(client->debugfs_monmap);
+       debugfs_remove(client->osdc.debugfs_file);
+       debugfs_remove(client->mdsc.debugfs_file);
+       debugfs_remove(client->monc.debugfs_file);
        debugfs_remove(client->debugfs_dir);
 }
 
index c5ffe2c4b6e80af7c146d44d67432a9f4bab82b8..57cf1bfe8443f716b22b86853ece5c2070724096 100644 (file)
@@ -112,7 +112,7 @@ struct ceph_client {
        __s64 whoami;                   /* my client number */
        struct dentry *debugfs_monmap;
        struct dentry *debugfs_mdsmap, *debugfs_osdmap;
-       struct dentry *debugfs_dir, *debugfs_dentry_lru;
+       struct dentry *debugfs_dir, *debugfs_dentry_lru, *debugfs_caps;
 
        struct mutex mount_mutex;       /* serialize mount attempts */
        struct ceph_mount_args mount_args;
@@ -589,7 +589,8 @@ extern void ceph_caps_init(void);
 extern void ceph_caps_finalize(void);
 extern int ceph_reserve_caps(struct ceph_cap_reservation *ctx, int need);
 extern int ceph_unreserve_caps(struct ceph_cap_reservation *ctx);
-extern void ceph_reservation_status(int *total, int *avail, int *used,
+extern void ceph_reservation_status(struct ceph_client *client,
+                                   int *total, int *avail, int *used,
                                    int *reserved);
 
 static inline struct ceph_client *ceph_inode_to_client(struct inode *inode)