X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fosc%2Flproc_osc.c;h=742733c430bb8f621c484172a9544c1e6812fe69;hb=3ad0df02123a49a8c98ecf4661f677af509ac6d4;hp=237200bb4e572c9da3d40a48c053ed26aa789894;hpb=655d5e708e01a77368459a1dd9c34fab5b6838b1;p=fs%2Flustre-release.git diff --git a/lustre/osc/lproc_osc.c b/lustre/osc/lproc_osc.c index 237200b..742733c 100644 --- a/lustre/osc/lproc_osc.c +++ b/lustre/osc/lproc_osc.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -28,6 +26,8 @@ /* * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2011, Whamcloud, Inc. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -79,44 +79,6 @@ static int osc_wr_active(struct file *file, const char *buffer, return count; } -static int osc_rd_max_pages_per_rpc(char *page, char **start, off_t off, - int count, int *eof, void *data) -{ - struct obd_device *dev = data; - struct client_obd *cli = &dev->u.cli; - int rc; - - client_obd_list_lock(&cli->cl_loi_list_lock); - rc = snprintf(page, count, "%d\n", cli->cl_max_pages_per_rpc); - client_obd_list_unlock(&cli->cl_loi_list_lock); - return rc; -} - -static int osc_wr_max_pages_per_rpc(struct file *file, const char *buffer, - unsigned long count, void *data) -{ - struct obd_device *dev = data; - struct client_obd *cli = &dev->u.cli; - struct obd_connect_data *ocd = &cli->cl_import->imp_connect_data; - int val, rc; - - rc = lprocfs_write_helper(buffer, count, &val); - if (rc) - return rc; - - LPROCFS_CLIMP_CHECK(dev); - if (val < 1 || val > ocd->ocd_brw_size >> CFS_PAGE_SHIFT) { - LPROCFS_CLIMP_EXIT(dev); - return -ERANGE; - } - client_obd_list_lock(&cli->cl_loi_list_lock); - cli->cl_max_pages_per_rpc = val; - client_obd_list_unlock(&cli->cl_loi_list_lock); - - LPROCFS_CLIMP_EXIT(dev); - return count; -} - static int osc_rd_max_rpcs_in_flight(char *page, char **start, off_t off, int count, int *eof, void *data) { @@ -603,6 +565,35 @@ static int osc_rd_destroys_in_flight(char *page, char **start, off_t off, cfs_atomic_read(&obd->u.cli.cl_destroy_in_flight)); } +static int lprocfs_osc_wr_max_pages_per_rpc(struct file *file, + const char *buffer, unsigned long count, void *data) +{ + struct obd_device *dev = data; + struct client_obd *cli = &dev->u.cli; + struct obd_connect_data *ocd = &cli->cl_import->imp_connect_data; + int chunk_mask, val, rc; + + rc = lprocfs_write_helper(buffer, count, &val); + if (rc) + return rc; + + LPROCFS_CLIMP_CHECK(dev); + + chunk_mask = ~((1 << (cli->cl_chunkbits - CFS_PAGE_SHIFT)) - 1); + /* max_pages_per_rpc must be chunk aligned */ + val = (val + ~chunk_mask) & chunk_mask; + if (val == 0 || val > ocd->ocd_brw_size >> CFS_PAGE_SHIFT) { + LPROCFS_CLIMP_EXIT(dev); + return -ERANGE; + } + client_obd_list_lock(&cli->cl_loi_list_lock); + cli->cl_max_pages_per_rpc = val; + client_obd_list_unlock(&cli->cl_loi_list_lock); + + LPROCFS_CLIMP_EXIT(dev); + return count; +} + static struct lprocfs_vars lprocfs_osc_obd_vars[] = { { "uuid", lprocfs_rd_uuid, 0, 0 }, { "ping", 0, lprocfs_wr_ping, 0, 0, 0222 }, @@ -618,8 +609,8 @@ static struct lprocfs_vars lprocfs_osc_obd_vars[] = { { "ost_conn_uuid", lprocfs_rd_conn_uuid, 0, 0 }, { "active", osc_rd_active, osc_wr_active, 0 }, - { "max_pages_per_rpc", osc_rd_max_pages_per_rpc, - osc_wr_max_pages_per_rpc, 0 }, + { "max_pages_per_rpc", lprocfs_obd_rd_max_pages_per_rpc, + lprocfs_osc_wr_max_pages_per_rpc, 0 }, { "max_rpcs_in_flight", osc_rd_max_rpcs_in_flight, osc_wr_max_rpcs_in_flight, 0 }, { "destroys_in_flight", osc_rd_destroys_in_flight, 0, 0 }, @@ -643,8 +634,10 @@ static struct lprocfs_vars lprocfs_osc_obd_vars[] = { osc_wr_contention_seconds, 0 }, { "lockless_truncate", osc_rd_lockless_truncate, osc_wr_lockless_truncate, 0 }, - { "import", lprocfs_rd_import, 0, 0 }, + { "import", lprocfs_rd_import, lprocfs_wr_import, 0 }, { "state", lprocfs_rd_state, 0, 0 }, + { "pinger_recov", lprocfs_rd_pinger_recov, + lprocfs_wr_pinger_recov, 0, 0 }, { 0 } }; @@ -674,9 +667,9 @@ static int osc_rpc_stats_seq_show(struct seq_file *seq, void *v) seq_printf(seq, "write RPCs in flight: %d\n", cli->cl_w_in_flight); seq_printf(seq, "pending write pages: %d\n", - cli->cl_pending_w_pages); + cfs_atomic_read(&cli->cl_pending_w_pages)); seq_printf(seq, "pending read pages: %d\n", - cli->cl_pending_r_pages); + cfs_atomic_read(&cli->cl_pending_r_pages)); seq_printf(seq, "\n\t\t\tread\t\t\twrite\n"); seq_printf(seq, "pages per rpc rpcs %% cum %% |");