From 131fa21c105733a47f55a93facf66f52886c80af Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 17 Sep 2009 12:04:28 -0700 Subject: [PATCH] kclient: move caps stats into client debugfs dir; fix error checking --- src/TODO | 1 + src/kernel/caps.c | 3 ++- src/kernel/debugfs.c | 53 +++++++++++++++++++++----------------------- src/kernel/super.h | 5 +++-- 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/TODO b/src/TODO index f667c97c7231..91ba25724130 100644 --- 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? diff --git a/src/kernel/caps.c b/src/kernel/caps.c index fd36fca3a1f4..1d3ce57bdf3c 100644 --- a/src/kernel/caps.c +++ b/src/kernel/caps.c @@ -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; diff --git a/src/kernel/debugfs.c b/src/kernel/debugfs.c index 06bc8a632bd9..3902aad9466a 100644 --- a/src/kernel/debugfs.c +++ b/src/kernel/debugfs.c @@ -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 @@ -18,10 +17,10 @@ * .../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); } diff --git a/src/kernel/super.h b/src/kernel/super.h index c5ffe2c4b6e8..57cf1bfe8443 100644 --- a/src/kernel/super.h +++ b/src/kernel/super.h @@ -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) -- 2.47.3