diff options
author | Sage Weil <sage@newdream.net> | 2010-02-15 12:08:46 -0800 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-02-16 22:01:08 -0800 |
commit | 44ca18f2682eb1cfbed153849adedb79e3e19790 (patch) | |
tree | 063dd8382179e65717ec10dc1ffc135950050abd /fs/ceph/debugfs.c | |
parent | 91e45ce38946a8efa21fefbc65d023ca3c0b434f (diff) | |
download | op-kernel-dev-44ca18f2682eb1cfbed153849adedb79e3e19790.zip op-kernel-dev-44ca18f2682eb1cfbed153849adedb79e3e19790.tar.gz |
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.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/fs/ceph/debugfs.c b/fs/ceph/debugfs.c index fba44b2..cd5dd80 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); |