summaryrefslogtreecommitdiffstats
path: root/fs/ceph/debugfs.c
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2010-02-15 21:08:46 +0100
committerSage Weil <sage@newdream.net>2010-02-17 07:01:08 +0100
commit44ca18f2682eb1cfbed153849adedb79e3e19790 (patch)
tree063dd8382179e65717ec10dc1ffc135950050abd /fs/ceph/debugfs.c
parentceph: cancel delayed work when closing connection (diff)
downloadlinux-44ca18f2682eb1cfbed153849adedb79e3e19790.tar.xz
linux-44ca18f2682eb1cfbed153849adedb79e3e19790.zip
ceph: use rbtree for mds requests
The rbtree is a more appropriate data structure than a radix_tree. It avoids extra memory usage and simplifies the code. It also fixes a bug where the debugfs 'mdsc' file wasn't including the most recent mds request. Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/debugfs.c')
-rw-r--r--fs/ceph/debugfs.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/fs/ceph/debugfs.c b/fs/ceph/debugfs.c
index fba44b2a6086..cd5dd805e4be 100644
--- a/fs/ceph/debugfs.c
+++ b/fs/ceph/debugfs.c
@@ -142,21 +142,16 @@ static int monc_show(struct seq_file *s, void *p)
static int mdsc_show(struct seq_file *s, void *p)
{
struct ceph_client *client = s->private;
- struct ceph_mds_request *req;
- u64 nexttid = 0;
- int got;
struct ceph_mds_client *mdsc = &client->mdsc;
+ struct ceph_mds_request *req;
+ struct rb_node *rp;
int pathlen;
u64 pathbase;
char *path;
mutex_lock(&mdsc->mutex);
- while (nexttid < mdsc->last_tid) {
- got = radix_tree_gang_lookup(&mdsc->request_tree,
- (void **)&req, nexttid, 1);
- if (got == 0)
- break;
- nexttid = req->r_tid + 1;
+ for (rp = rb_first(&mdsc->request_tree); rp; rp = rb_next(rp)) {
+ req = rb_entry(rp, struct ceph_mds_request, r_node);
if (req->r_request)
seq_printf(s, "%lld\tmds%d\t", req->r_tid, req->r_mds);