X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fosp%2Flproc_osp.c;h=6dc92878195f8498e8a1c22f7da97c3560489f2d;hb=6b929502063ac0fa8e75a3e09259e9b2b0d0ee6e;hp=43fe2728efd277f95b674803554cd9523a35528d;hpb=0ad4f8a4227ed7dd93fec99d33c6bb25056473fc;p=fs%2Flustre-release.git diff --git a/lustre/osp/lproc_osp.c b/lustre/osp/lproc_osp.c index 43fe272..6dc9287 100644 --- a/lustre/osp/lproc_osp.c +++ b/lustre/osp/lproc_osp.c @@ -23,7 +23,7 @@ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2012, 2013, 2014 Intel Corporation. + * Copyright (c) 2012, 2015, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -40,7 +40,7 @@ #include "osp_internal.h" -#ifdef LPROCFS +#ifdef CONFIG_PROC_FS /** * Show OSP active status * @@ -52,12 +52,11 @@ static int osp_active_seq_show(struct seq_file *m, void *data) { struct obd_device *dev = m->private; - int rc; LPROCFS_CLIMP_CHECK(dev); - rc = seq_printf(m, "%d\n", !dev->u.cli.cl_import->imp_deactive); + seq_printf(m, "%d\n", !dev->u.cli.cl_import->imp_deactive); LPROCFS_CLIMP_EXIT(dev); - return rc; + return 0; } /** @@ -71,14 +70,15 @@ static int osp_active_seq_show(struct seq_file *m, void *data) * \retval negative number on error */ static ssize_t -osp_active_seq_write(struct file *file, const char *buffer, +osp_active_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct seq_file *m = file->private_data; + struct seq_file *m = file->private_data; struct obd_device *dev = m->private; - int val, rc; + int rc; + __s64 val; - rc = lprocfs_write_helper(buffer, count, &val); + rc = lprocfs_str_to_s64(buffer, count, &val); if (rc) return rc; if (val < 0 || val > 1) @@ -89,7 +89,7 @@ osp_active_seq_write(struct file *file, const char *buffer, if (dev->u.cli.cl_import->imp_deactive == val) rc = ptlrpc_set_import_active(dev->u.cli.cl_import, val); else - CDEBUG(D_CONFIG, "activate %d: ignoring repeat request\n", + CDEBUG(D_CONFIG, "activate "LPD64": ignoring repeat request\n", val); LPROCFS_CLIMP_EXIT(dev); @@ -113,7 +113,8 @@ static int osp_syn_in_flight_seq_show(struct seq_file *m, void *data) if (osp == NULL) return -EINVAL; - return seq_printf(m, "%u\n", osp->opd_syn_rpc_in_flight); + seq_printf(m, "%u\n", osp->opd_syn_rpc_in_flight); + return 0; } LPROC_SEQ_FOPS_RO(osp_syn_in_flight); @@ -133,7 +134,8 @@ static int osp_syn_in_prog_seq_show(struct seq_file *m, void *data) if (osp == NULL) return -EINVAL; - return seq_printf(m, "%u\n", osp->opd_syn_rpc_in_progress); + seq_printf(m, "%u\n", osp->opd_syn_rpc_in_progress); + return 0; } LPROC_SEQ_FOPS_RO(osp_syn_in_prog); @@ -153,7 +155,8 @@ static int osp_syn_changes_seq_show(struct seq_file *m, void *data) if (osp == NULL) return -EINVAL; - return seq_printf(m, "%lu\n", osp->opd_syn_changes); + seq_printf(m, "%lu\n", osp->opd_syn_changes); + return 0; } /** @@ -166,7 +169,8 @@ static int osp_syn_changes_seq_show(struct seq_file *m, void *data) * \retval \a count on success * \retval negative number on error */ -static ssize_t osp_syn_changes_seq_write(struct file *file, const char *buffer, +static ssize_t osp_syn_changes_seq_write(struct file *file, + const char __user *buffer, size_t count, loff_t *off) { struct seq_file *m = file->private_data; @@ -202,7 +206,8 @@ static int osp_max_rpcs_in_flight_seq_show(struct seq_file *m, void *data) if (osp == NULL) return -EINVAL; - return seq_printf(m, "%u\n", osp->opd_syn_max_rpc_in_flight); + seq_printf(m, "%u\n", osp->opd_syn_max_rpc_in_flight); + return 0; } /** @@ -216,22 +221,23 @@ static int osp_max_rpcs_in_flight_seq_show(struct seq_file *m, void *data) * \retval negative number on error */ static ssize_t -osp_max_rpcs_in_flight_seq_write(struct file *file, const char *buffer, +osp_max_rpcs_in_flight_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct seq_file *m = file->private_data; - struct obd_device *dev = m->private; - struct osp_device *osp = lu2osp_dev(dev->obd_lu_dev); - int val, rc; + struct seq_file *m = file->private_data; + struct obd_device *dev = m->private; + struct osp_device *osp = lu2osp_dev(dev->obd_lu_dev); + int rc; + __s64 val; if (osp == NULL) return -EINVAL; - rc = lprocfs_write_helper(buffer, count, &val); + rc = lprocfs_str_to_s64(buffer, count, &val); if (rc) return rc; - if (val < 1) + if (val < 1 || val > INT_MAX) return -ERANGE; osp->opd_syn_max_rpc_in_flight = val; @@ -255,7 +261,8 @@ static int osp_max_rpcs_in_prog_seq_show(struct seq_file *m, void *data) if (osp == NULL) return -EINVAL; - return seq_printf(m, "%u\n", osp->opd_syn_max_rpc_in_progress); + seq_printf(m, "%u\n", osp->opd_syn_max_rpc_in_progress); + return 0; } /** @@ -269,22 +276,23 @@ static int osp_max_rpcs_in_prog_seq_show(struct seq_file *m, void *data) * \retval negative number on error */ static ssize_t -osp_max_rpcs_in_prog_seq_write(struct file *file, const char *buffer, +osp_max_rpcs_in_prog_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct seq_file *m = file->private_data; - struct obd_device *dev = m->private; - struct osp_device *osp = lu2osp_dev(dev->obd_lu_dev); - int val, rc; + struct seq_file *m = file->private_data; + struct obd_device *dev = m->private; + struct osp_device *osp = lu2osp_dev(dev->obd_lu_dev); + int rc; + __s64 val; if (osp == NULL) return -EINVAL; - rc = lprocfs_write_helper(buffer, count, &val); + rc = lprocfs_str_to_s64(buffer, count, &val); if (rc) return rc; - if (val < 1) + if (val < 1 || val > INT_MAX) return -ERANGE; osp->opd_syn_max_rpc_in_progress = val; @@ -309,7 +317,8 @@ static int osp_create_count_seq_show(struct seq_file *m, void *data) if (osp == NULL || osp->opd_pre == NULL) return 0; - return seq_printf(m, "%d\n", osp->opd_pre_grow_count); + seq_printf(m, "%d\n", osp->opd_pre_create_count); + return 0; } /** @@ -323,18 +332,19 @@ static int osp_create_count_seq_show(struct seq_file *m, void *data) * \retval negative number on error */ static ssize_t -osp_create_count_seq_write(struct file *file, const char *buffer, +osp_create_count_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct seq_file *m = file->private_data; - struct obd_device *obd = m->private; - struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev); - int val, rc, i; + struct seq_file *m = file->private_data; + struct obd_device *obd = m->private; + struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev); + int rc, i; + __s64 val; if (osp == NULL || osp->opd_pre == NULL) return 0; - rc = lprocfs_write_helper(buffer, count, &val); + rc = lprocfs_str_to_s64(buffer, count, &val); if (rc) return rc; @@ -350,12 +360,12 @@ osp_create_count_seq_write(struct file *file, const char *buffer, * filesystem as a safety measure. */ if (val < OST_MIN_PRECREATE || val > OST_MAX_PRECREATE) return -ERANGE; - if (val > osp->opd_pre_max_grow_count) + if (val > osp->opd_pre_max_create_count) return -ERANGE; for (i = 1; (i << 1) <= val; i <<= 1) ; - osp->opd_pre_grow_count = i; + osp->opd_pre_create_count = i; return count; } @@ -377,7 +387,8 @@ static int osp_max_create_count_seq_show(struct seq_file *m, void *data) if (osp == NULL || osp->opd_pre == NULL) return 0; - return seq_printf(m, "%d\n", osp->opd_pre_max_grow_count); + seq_printf(m, "%d\n", osp->opd_pre_max_create_count); + return 0; } /** @@ -391,30 +402,31 @@ static int osp_max_create_count_seq_show(struct seq_file *m, void *data) * \retval negative number on error */ static ssize_t -osp_max_create_count_seq_write(struct file *file, const char *buffer, +osp_max_create_count_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct seq_file *m = file->private_data; - struct obd_device *obd = m->private; - struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev); - int val, rc; + struct seq_file *m = file->private_data; + struct obd_device *obd = m->private; + struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev); + int rc; + __s64 val; if (osp == NULL || osp->opd_pre == NULL) return 0; - rc = lprocfs_write_helper(buffer, count, &val); + rc = lprocfs_str_to_s64(buffer, count, &val); if (rc) return rc; - if (val < 0) + if (val < 0 || val > INT_MAX) return -ERANGE; if (val > OST_MAX_PRECREATE) return -ERANGE; - if (osp->opd_pre_grow_count > val) - osp->opd_pre_grow_count = val; + if (osp->opd_pre_create_count > val) + osp->opd_pre_create_count = val; - osp->opd_pre_max_grow_count = val; + osp->opd_pre_max_create_count = val; return count; } @@ -436,7 +448,8 @@ static int osp_prealloc_next_id_seq_show(struct seq_file *m, void *data) if (osp == NULL || osp->opd_pre == NULL) return 0; - return seq_printf(m, "%u\n", fid_oid(&osp->opd_pre_used_fid) + 1); + seq_printf(m, "%u\n", fid_oid(&osp->opd_pre_used_fid) + 1); + return 0; } LPROC_SEQ_FOPS_RO(osp_prealloc_next_id); @@ -456,7 +469,8 @@ static int osp_prealloc_last_id_seq_show(struct seq_file *m, void *data) if (osp == NULL || osp->opd_pre == NULL) return 0; - return seq_printf(m, "%u\n", fid_oid(&osp->opd_pre_last_created_fid)); + seq_printf(m, "%u\n", fid_oid(&osp->opd_pre_last_created_fid)); + return 0; } LPROC_SEQ_FOPS_RO(osp_prealloc_last_id); @@ -476,7 +490,8 @@ static int osp_prealloc_next_seq_seq_show(struct seq_file *m, void *data) if (osp == NULL || osp->opd_pre == NULL) return 0; - return seq_printf(m, LPX64"\n", fid_seq(&osp->opd_pre_used_fid)); + seq_printf(m, LPX64"\n", fid_seq(&osp->opd_pre_used_fid)); + return 0; } LPROC_SEQ_FOPS_RO(osp_prealloc_next_seq); @@ -496,8 +511,9 @@ static int osp_prealloc_last_seq_seq_show(struct seq_file *m, void *data) if (osp == NULL || osp->opd_pre == NULL) return 0; - return seq_printf(m, LPX64"\n", - fid_seq(&osp->opd_pre_last_created_fid)); + seq_printf(m, LPX64"\n", + fid_seq(&osp->opd_pre_last_created_fid)); + return 0; } LPROC_SEQ_FOPS_RO(osp_prealloc_last_seq); @@ -517,7 +533,8 @@ static int osp_prealloc_reserved_seq_show(struct seq_file *m, void *data) if (osp == NULL || osp->opd_pre == NULL) return 0; - return seq_printf(m, LPU64"\n", osp->opd_pre_reserved); + seq_printf(m, LPU64"\n", osp->opd_pre_reserved); + return 0; } LPROC_SEQ_FOPS_RO(osp_prealloc_reserved); @@ -537,7 +554,8 @@ static int osp_maxage_seq_show(struct seq_file *m, void *data) if (osp == NULL) return -EINVAL; - return seq_printf(m, "%u\n", osp->opd_statfs_maxage); + seq_printf(m, "%u\n", osp->opd_statfs_maxage); + return 0; } /** @@ -551,22 +569,23 @@ static int osp_maxage_seq_show(struct seq_file *m, void *data) * \retval negative number on error */ static ssize_t -osp_maxage_seq_write(struct file *file, const char *buffer, +osp_maxage_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct seq_file *m = file->private_data; - struct obd_device *dev = m->private; - struct osp_device *osp = lu2osp_dev(dev->obd_lu_dev); - int val, rc; + struct seq_file *m = file->private_data; + struct obd_device *dev = m->private; + struct osp_device *osp = lu2osp_dev(dev->obd_lu_dev); + int rc; + __s64 val; if (osp == NULL) return -EINVAL; - rc = lprocfs_write_helper(buffer, count, &val); + rc = lprocfs_str_to_s64(buffer, count, &val); if (rc) return rc; - if (val < 1) + if (val < 1 || val > INT_MAX) return -ERANGE; osp->opd_statfs_maxage = val; @@ -592,7 +611,8 @@ static int osp_pre_status_seq_show(struct seq_file *m, void *data) if (osp == NULL || osp->opd_pre == NULL) return -EINVAL; - return seq_printf(m, "%d\n", osp->opd_pre_status); + seq_printf(m, "%d\n", osp->opd_pre_status); + return 0; } LPROC_SEQ_FOPS_RO(osp_pre_status); @@ -619,8 +639,9 @@ static int osp_destroys_in_flight_seq_show(struct seq_file *m, void *data) if (osp == NULL) return -EINVAL; - return seq_printf(m, "%lu\n", - osp->opd_syn_rpc_in_progress + osp->opd_syn_changes); + seq_printf(m, "%lu\n", + osp->opd_syn_rpc_in_progress + osp->opd_syn_changes); + return 0; } LPROC_SEQ_FOPS_RO(osp_destroys_in_flight); @@ -640,7 +661,8 @@ static int osp_old_sync_processed_seq_show(struct seq_file *m, void *data) if (osp == NULL) return -EINVAL; - return seq_printf(m, "%d\n", osp->opd_syn_prev_done); + seq_printf(m, "%d\n", osp->opd_syn_prev_done); + return 0; } LPROC_SEQ_FOPS_RO(osp_old_sync_processed); @@ -659,7 +681,8 @@ osp_lfsck_max_rpcs_in_flight_seq_show(struct seq_file *m, void *data) __u32 max; max = obd_get_max_rpcs_in_flight(&dev->u.cli); - return seq_printf(m, "%u\n", max); + seq_printf(m, "%u\n", max); + return 0; } /** @@ -679,15 +702,18 @@ osp_lfsck_max_rpcs_in_flight_seq_write(struct file *file, { struct seq_file *m = file->private_data; struct obd_device *dev = m->private; - int val; + __s64 val; int rc; - rc = lprocfs_write_helper(buffer, count, &val); - if (rc == 0) - rc = obd_set_max_rpcs_in_flight(&dev->u.cli, val); + rc = lprocfs_str_to_s64(buffer, count, &val); + if (rc == 0) { + if (val < 0) + return -ERANGE; - if (rc != 0) + rc = obd_set_max_rpcs_in_flight(&dev->u.cli, val); + } else { count = rc; + } return count; } @@ -773,7 +799,44 @@ static struct lprocfs_vars lprocfs_osp_obd_vars[] = { .fops = &osp_destroys_in_flight_fops }, { .name = "lfsck_max_rpcs_in_flight", .fops = &osp_lfsck_max_rpcs_in_flight_fops }, - { 0 } + { NULL } +}; + +static struct lprocfs_vars lprocfs_osp_md_vars[] = { + { .name = "uuid", + .fops = &osp_uuid_fops }, + { .name = "ping", + .fops = &osp_ping_fops, + .proc_mode = 0222 }, + { .name = "connect_flags", + .fops = &osp_connect_flags_fops }, + { .name = "mdt_server_uuid", + .fops = &osp_server_uuid_fops }, + { .name = "mdt_conn_uuid", + .fops = &osp_conn_uuid_fops }, + { .name = "active", + .fops = &osp_active_fops }, + { .name = "max_rpcs_in_flight", + .fops = &osp_max_rpcs_in_flight_fops }, + { .name = "max_rpcs_in_progress", + .fops = &osp_max_rpcs_in_prog_fops }, + { .name = "timeouts", + .fops = &osp_timeouts_fops }, + { .name = "import", + .fops = &osp_import_fops }, + { .name = "state", + .fops = &osp_state_fops }, + { .name = "maxage", + .fops = &osp_maxage_fops }, + { .name = "prealloc_status", + .fops = &osp_pre_status_fops }, + + /* for compatibility reasons */ + { .name = "destroys_in_flight", + .fops = &osp_destroys_in_flight_fops }, + { .name = "lfsck_max_rpcs_in_flight", + .fops = &osp_lfsck_max_rpcs_in_flight_fops }, + { NULL } }; LPROC_SEQ_FOPS_RO_TYPE(osp, dt_blksize); @@ -796,7 +859,7 @@ static struct lprocfs_vars lprocfs_osp_osd_vars[] = { .fops = &osp_dt_filestotal_fops }, { .name = "filesfree", .fops = &osp_dt_filesfree_fops }, - { 0 } + { NULL } }; /** @@ -811,7 +874,10 @@ void osp_lprocfs_init(struct osp_device *osp) struct obd_type *type; int rc; - obd->obd_vars = lprocfs_osp_obd_vars; + if (osp->opd_connect_mdt) + obd->obd_vars = lprocfs_osp_md_vars; + else + obd->obd_vars = lprocfs_osp_obd_vars; if (lprocfs_obd_setup(obd) != 0) return; @@ -823,6 +889,7 @@ void osp_lprocfs_init(struct osp_device *osp) return; } + sptlrpc_lprocfs_cliobd_attach(obd); ptlrpc_lprocfs_register_obd(obd); if (osp->opd_connect_mdt || !strstr(obd->obd_name, "osc")) @@ -848,5 +915,5 @@ void osp_lprocfs_init(struct osp_device *osp) obd->obd_name); } -#endif /* LPROCFS */ +#endif /* CONFIG_PROC_FS */