/*
* 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)
{
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"
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:
void ceph_debugfs_cleanup(void)
{
- debugfs_remove(ceph_debugfs_caps_reservation);
debugfs_remove(ceph_debugfs_dir);
}
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)
client->debugfs_dir,
client,
&monc_show_fops);
- if (ret)
+ if (!client->monc.debugfs_file)
goto out;
client->mdsc.debugfs_file = debugfs_create_file("mdsc",
client->debugfs_dir,
client,
&mdsc_show_fops);
- if (ret)
+ if (!client->mdsc.debugfs_file)
goto out;
client->osdc.debugfs_file = debugfs_create_file("osdc",
client->debugfs_dir,
client,
&osdc_show_fops);
- if (ret)
+ if (!client->osdc.debugfs_file)
goto out;
client->debugfs_monmap = debugfs_create_file("monmap",
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;
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);
}
__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;
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)