diff options
| -rw-r--r-- | xlators/performance/read-ahead/src/read-ahead.c | 91 | 
1 files changed, 91 insertions, 0 deletions
diff --git a/xlators/performance/read-ahead/src/read-ahead.c b/xlators/performance/read-ahead/src/read-ahead.c index d41931eeca8..6358b4f48e8 100644 --- a/xlators/performance/read-ahead/src/read-ahead.c +++ b/xlators/performance/read-ahead/src/read-ahead.c @@ -793,6 +793,96 @@ unwind:  } +void +ra_page_dump (struct ra_page *page, char *key_prefix) +{ +        int           i                        = 0; +        call_frame_t *frame                    = NULL; +        char          key[GF_DUMP_MAX_BUF_LEN] = {0, }; +        ra_waitq_t   *trav                     = NULL; + +        if (page == NULL) { +                goto out; +        } + +        gf_proc_dump_build_key (key, key_prefix, "offset"); +        gf_proc_dump_write (key, "%"PRId64, page->offset); + +        gf_proc_dump_build_key (key, key_prefix, "size"); +        gf_proc_dump_write (key, "%"PRId64, page->size); + +        gf_proc_dump_build_key (key, key_prefix, "dirty"); +        gf_proc_dump_write (key, "%s", page->dirty ? "yes" : "no"); + +        gf_proc_dump_build_key (key, key_prefix, "ready"); +        gf_proc_dump_write (key, "%s", page->ready ? "yes" : "no"); + +        for (trav = page->waitq; trav; trav = trav->next) { +		frame = trav->data; +                gf_proc_dump_build_key (key, key_prefix, "waiting-frame[%d]", +                                        i++); +                gf_proc_dump_write (key, "%"PRId64, frame->root->unique); +	} + +out: +        return; +} + +int32_t +ra_fdctx_dump (xlator_t *this, fd_t *fd) +{ +	ra_file_t    *file     = NULL; +        ra_page_t    *page     = NULL; +        int32_t       ret      = 0, i = 0; +        uint64_t      tmp_file = 0; +        char          key[GF_DUMP_MAX_BUF_LEN]        = {0, }; +        char          key_prefix[GF_DUMP_MAX_BUF_LEN] = {0, }; + +	fd_ctx_get (fd, this, &tmp_file); +	file = (ra_file_t *)(long)tmp_file; + +        if (file == NULL) { +                ret = 0; +                goto out; +        } + +        gf_proc_dump_build_key (key_prefix, +                                "xlator.performance.read-ahead", +                                "file"); + +        gf_proc_dump_add_section (key_prefix); + +        gf_proc_dump_build_key (key, key_prefix, "fd"); +        gf_proc_dump_write (key, "%p", fd); + +        gf_proc_dump_build_key (key, key_prefix, "disabled"); +        gf_proc_dump_write (key, "%s", file->disabled ? "yes" : "no"); + +        if (file->disabled) { +                ret = 0; +                goto out; +        } + +        gf_proc_dump_build_key (key, key_prefix, "page-size"); +        gf_proc_dump_write (key, "%"PRId64, file->page_size); + +        gf_proc_dump_build_key (key, key_prefix, "page-count"); +        gf_proc_dump_write (key, "%u", file->page_count); + +        gf_proc_dump_build_key (key, key_prefix, +                                "next-expected-offset-for-sequential-reads"); +        gf_proc_dump_write (key, "%"PRId64, file->offset); + +        for (page = file->pages.next; page != &file->pages; +             page = page->next) { +                gf_proc_dump_build_key (key, key_prefix, "page[%d]", i++); +		ra_page_dump (page, key_prefix); +        } +         +out: +        return ret; +} +  int  ra_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd)  { @@ -1063,6 +1153,7 @@ struct xlator_cbks cbks = {  struct xlator_dumpops dumpops = {          .priv      =  ra_priv_dump, +        .fdctx     =  ra_fdctx_dump,  };  struct volume_options options[] = {  | 
