lkml.org 
[lkml]   [2018]   [Apr]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 10/25] staging: lustre: libcfs: provide debugfs files for distance handling
    Date
    From: Amir Shehata <amir.shehata@intel.com>

    On systems with large number of NUMA nodes and cores it is easy
    to incorrectly configure their use with Lustre. Provide debugfs
    files which can help track down any issues.

    Signed-off-by: Amir Shehata <amir.shehata@intel.com>
    Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-7734
    Reviewed-on: http://review.whamcloud.com/18916
    Reviewed-by: Olaf Weber <olaf@sgi.com>
    Reviewed-by: Doug Oucharek <dougso@me.com>
    Signed-off-by: James Simmons <jsimmons@infradead.org>
    ---
    drivers/staging/lustre/lnet/libcfs/module.c | 53 +++++++++++++++++++++++++++++
    1 file changed, 53 insertions(+)

    diff --git a/drivers/staging/lustre/lnet/libcfs/module.c b/drivers/staging/lustre/lnet/libcfs/module.c
    index a03f924..95af000 100644
    --- a/drivers/staging/lustre/lnet/libcfs/module.c
    +++ b/drivers/staging/lustre/lnet/libcfs/module.c
    @@ -336,6 +336,53 @@ static int proc_cpt_table(struct ctl_table *table, int write,
    __proc_cpt_table);
    }

    +static int __proc_cpt_distance(void *data, int write,
    + loff_t pos, void __user *buffer, int nob)
    +{
    + char *buf = NULL;
    + int len = 4096;
    + int rc = 0;
    +
    + if (write)
    + return -EPERM;
    +
    + LASSERT(cfs_cpt_table);
    +
    + while (1) {
    + buf = kzalloc(len, GFP_KERNEL);
    + if (!buf)
    + return -ENOMEM;
    +
    + rc = cfs_cpt_distance_print(cfs_cpt_table, buf, len);
    + if (rc >= 0)
    + break;
    +
    + if (rc == -EFBIG) {
    + kfree(buf);
    + len <<= 1;
    + continue;
    + }
    + goto out;
    + }
    +
    + if (pos >= rc) {
    + rc = 0;
    + goto out;
    + }
    +
    + rc = cfs_trace_copyout_string(buffer, nob, buf + pos, NULL);
    +out:
    + kfree(buf);
    + return rc;
    +}
    +
    +static int proc_cpt_distance(struct ctl_table *table, int write,
    + void __user *buffer, size_t *lenp, loff_t *ppos)
    +{
    + return lprocfs_call_handler(table->data, write, ppos, buffer, lenp,
    + __proc_cpt_distance);
    +}
    +
    static struct ctl_table lnet_table[] = {
    {
    .procname = "debug",
    @@ -365,6 +412,12 @@ static int proc_cpt_table(struct ctl_table *table, int write,
    .proc_handler = &proc_cpt_table,
    },
    {
    + .procname = "cpu_partition_distance",
    + .maxlen = 128,
    + .mode = 0444,
    + .proc_handler = &proc_cpt_distance,
    + },
    + {
    .procname = "debug_log_upcall",
    .data = lnet_debug_log_upcall,
    .maxlen = sizeof(lnet_debug_log_upcall),
    --
    1.8.3.1
    \
     
     \ /
      Last update: 2018-04-16 06:14    [W:2.661 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site