X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fofd%2Flproc_ofd.c;h=86de1ad70055b557a1d64d011f1eca3aee04f07f;hb=f13b2a4cea69d8c4c079d03d58f55d32a54a9679;hp=65b57f3be6f08b112dcef7129499f57ab0e2d571;hpb=26b8238659974959780cd49de92595b4b0bdf89f;p=fs%2Flustre-release.git diff --git a/lustre/ofd/lproc_ofd.c b/lustre/ofd/lproc_ofd.c index 65b57f3..86de1ad 100644 --- a/lustre/ofd/lproc_ofd.c +++ b/lustre/ofd/lproc_ofd.c @@ -23,7 +23,7 @@ * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2012, 2014 Intel Corporation. + * Copyright (c) 2012, 2016, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -64,7 +64,8 @@ static int ofd_seqs_seq_show(struct seq_file *m, void *data) struct obd_device *obd = m->private; struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - return seq_printf(m, "%u\n", ofd->ofd_seq_count); + seq_printf(m, "%u\n", ofd->ofd_seq_count); + return 0; } LPROC_SEQ_FOPS_RO(ofd_seqs); @@ -84,7 +85,8 @@ static int ofd_tot_dirty_seq_show(struct seq_file *m, void *data) LASSERT(obd != NULL); ofd = ofd_dev(obd->obd_lu_dev); - return seq_printf(m, LPU64"\n", ofd->ofd_tot_dirty); + seq_printf(m, "%llu\n", ofd->ofd_tot_dirty); + return 0; } LPROC_SEQ_FOPS_RO(ofd_tot_dirty); @@ -104,7 +106,8 @@ static int ofd_tot_granted_seq_show(struct seq_file *m, void *data) LASSERT(obd != NULL); ofd = ofd_dev(obd->obd_lu_dev); - return seq_printf(m, LPU64"\n", ofd->ofd_tot_granted); + seq_printf(m, "%llu\n", ofd->ofd_tot_granted); + return 0; } LPROC_SEQ_FOPS_RO(ofd_tot_granted); @@ -124,7 +127,8 @@ static int ofd_tot_pending_seq_show(struct seq_file *m, void *data) LASSERT(obd != NULL); ofd = ofd_dev(obd->obd_lu_dev); - return seq_printf(m, LPU64"\n", ofd->ofd_tot_pending); + seq_printf(m, "%llu\n", ofd->ofd_tot_pending); + return 0; } LPROC_SEQ_FOPS_RO(ofd_tot_pending); @@ -142,74 +146,13 @@ static int ofd_grant_precreate_seq_show(struct seq_file *m, void *data) struct obd_device *obd = m->private; LASSERT(obd != NULL); - return seq_printf(m, "%ld\n", - obd->obd_self_export->exp_filter_data.fed_grant); + seq_printf(m, "%ld\n", + obd->obd_self_export->exp_filter_data.fed_grant); + return 0; } LPROC_SEQ_FOPS_RO(ofd_grant_precreate); /** - * Show total amount of free space reserved for grants. - * - * \param[in] m seq_file handle - * \param[in] data unused for single entry - * - * \retval 0 on success - * \retval negative value on error - */ -static int ofd_grant_ratio_seq_show(struct seq_file *m, void *data) -{ - struct obd_device *obd = m->private; - struct ofd_device *ofd; - - LASSERT(obd != NULL); - ofd = ofd_dev(obd->obd_lu_dev); - return seq_printf(m, "%d%%\n", - (int) ofd_grant_reserved(ofd, 100)); -} - -/** - * Change amount of free space reserved for grants. - * - * \param[in] file proc file - * \param[in] buffer string which represents maximum number - * \param[in] count \a buffer length - * \param[in] off unused for single entry - * - * \retval \a count on success - * \retval negative number on error - */ -static ssize_t -ofd_grant_ratio_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 ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - int val; - int rc; - - rc = lprocfs_write_helper(buffer, count, &val); - if (rc) - return rc; - - if (val > 100 || val < 0) - return -EINVAL; - - if (val == 0) - CWARN("%s: disabling grant error margin\n", obd->obd_name); - if (val > 50) - CWARN("%s: setting grant error margin >50%%, be warned that " - "a huge part of the free space is now reserved for " - "grants\n", obd->obd_name); - - spin_lock(&ofd->ofd_grant_lock); - ofd->ofd_grant_ratio = ofd_grant_ratio_conv(val); - spin_unlock(&ofd->ofd_grant_lock); - return count; -} -LPROC_SEQ_FOPS(ofd_grant_ratio); - -/** * Show number of precreates allowed in a single transaction. * * \param[in] m seq_file handle @@ -225,7 +168,8 @@ static int ofd_precreate_batch_seq_show(struct seq_file *m, void *data) LASSERT(obd != NULL); ofd = ofd_dev(obd->obd_lu_dev); - return seq_printf(m, "%d\n", ofd->ofd_precreate_batch); + seq_printf(m, "%d\n", ofd->ofd_precreate_batch); + return 0; } /** @@ -243,17 +187,17 @@ static ssize_t ofd_precreate_batch_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 *obd = m->private; struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - int val; + __s64 val; int rc; - 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 -EINVAL; spin_lock(&ofd->ofd_batch_lock); @@ -277,7 +221,6 @@ static int ofd_last_id_seq_show(struct seq_file *m, void *data) struct obd_device *obd = m->private; struct ofd_device *ofd; struct ofd_seq *oseq = NULL; - int retval = 0, rc; if (obd == NULL) return 0; @@ -292,15 +235,10 @@ static int ofd_last_id_seq_show(struct seq_file *m, void *data) fid_idif_seq(ostid_id(&oseq->os_oi), ofd->ofd_lut.lut_lsd.lsd_osd_index) : ostid_seq(&oseq->os_oi); - rc = seq_printf(m, DOSTID"\n", seq, ostid_id(&oseq->os_oi)); - if (rc < 0) { - retval = rc; - break; - } - retval += rc; + seq_printf(m, DOSTID"\n", seq, ostid_id(&oseq->os_oi)); } read_unlock(&ofd->ofd_seq_list_lock); - return retval; + return 0; } LPROC_SEQ_FOPS_RO(ofd_last_id); @@ -318,7 +256,8 @@ static int ofd_fmd_max_num_seq_show(struct seq_file *m, void *data) struct obd_device *obd = m->private; struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - return seq_printf(m, "%u\n", ofd->ofd_fmd_max_num); + seq_printf(m, "%u\n", ofd->ofd_fmd_max_num); + return 0; } /** @@ -338,13 +277,13 @@ static ssize_t ofd_fmd_max_num_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 ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - int val; - int rc; + struct seq_file *m = file->private_data; + struct obd_device *obd = m->private; + struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); + __s64 val; + int rc; - rc = lprocfs_write_helper(buffer, count, &val); + rc = lprocfs_str_to_s64(buffer, count, &val); if (rc) return rc; @@ -373,8 +312,9 @@ static int ofd_fmd_max_age_seq_show(struct seq_file *m, void *data) struct obd_device *obd = m->private; struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - return seq_printf(m, "%ld\n", jiffies_to_msecs(ofd->ofd_fmd_max_age) / - MSEC_PER_SEC); + seq_printf(m, "%ld\n", jiffies_to_msecs(ofd->ofd_fmd_max_age) / + MSEC_PER_SEC); + return 0; } /** @@ -398,10 +338,10 @@ ofd_fmd_max_age_seq_write(struct file *file, const char __user *buffer, struct seq_file *m = file->private_data; struct obd_device *obd = m->private; struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - int val; + __s64 val; int rc; - rc = lprocfs_write_helper(buffer, count, &val); + rc = lprocfs_str_to_s64(buffer, count, &val); if (rc) return rc; @@ -433,7 +373,8 @@ static int ofd_degraded_seq_show(struct seq_file *m, void *data) struct obd_device *obd = m->private; struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - return seq_printf(m, "%u\n", ofd->ofd_raid_degraded); + seq_printf(m, "%u\n", ofd->ofd_raid_degraded); + return 0; } /** @@ -457,12 +398,13 @@ static ssize_t ofd_degraded_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 ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - int val, rc; + struct seq_file *m = file->private_data; + struct obd_device *obd = m->private; + struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); + int rc; + __s64 val; - rc = lprocfs_write_helper(buffer, count, &val); + rc = lprocfs_str_to_s64(buffer, count, &val); if (rc) return rc; @@ -491,7 +433,8 @@ static int ofd_fstype_seq_show(struct seq_file *m, void *data) LASSERT(ofd->ofd_osd); d = &ofd->ofd_osd->dd_lu_dev; LASSERT(d->ld_type); - return seq_printf(m, "%s\n", d->ld_type->ldt_name); + seq_printf(m, "%s\n", d->ld_type->ldt_name); + return 0; } LPROC_SEQ_FOPS_RO(ofd_fstype); @@ -517,7 +460,8 @@ static int ofd_syncjournal_seq_show(struct seq_file *m, void *data) struct obd_device *obd = m->private; struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - return seq_printf(m, "%u\n", ofd->ofd_syncjournal); + seq_printf(m, "%u\n", ofd->ofd_syncjournal); + return 0; } /** @@ -537,13 +481,13 @@ static ssize_t ofd_syncjournal_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 ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - int val; - int rc; + struct seq_file *m = file->private_data; + struct obd_device *obd = m->private; + struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); + __s64 val; + int rc; - rc = lprocfs_write_helper(buffer, count, &val); + rc = lprocfs_str_to_s64(buffer, count, &val); if (rc) return rc; @@ -561,6 +505,46 @@ LPROC_SEQ_FOPS(ofd_syncjournal); /* This must be longer than the longest string below */ #define SYNC_STATES_MAXLEN 16 + +static int ofd_brw_size_seq_show(struct seq_file *m, void *data) +{ + struct obd_device *obd = m->private; + struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); + + seq_printf(m, "%u\n", ofd->ofd_brw_size / ONE_MB_BRW_SIZE); + return 0; +} + +static ssize_t +ofd_brw_size_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 ofd_device *ofd = ofd_dev(obd->obd_lu_dev); + __s64 val; + int rc; + + rc = lprocfs_str_to_s64(buffer, count, &val); + if (rc) + return rc; + + if (val < 0) + return -EINVAL; + + val = val * ONE_MB_BRW_SIZE; + if (val <= 0 || val > DT_MAX_BRW_SIZE || + val < (1 << ofd->ofd_blockbits)) + return -ERANGE; + + spin_lock(&ofd->ofd_flags_lock); + ofd->ofd_brw_size = val; + spin_unlock(&ofd->ofd_flags_lock); + + return count; +} +LPROC_SEQ_FOPS(ofd_brw_size); + static char *sync_on_cancel_states[] = {"never", "blocking", "always" }; @@ -579,8 +563,9 @@ static int ofd_sync_lock_cancel_seq_show(struct seq_file *m, void *data) struct obd_device *obd = m->private; struct lu_target *tgt = obd->u.obt.obt_lut; - return seq_printf(m, "%s\n", - sync_on_cancel_states[tgt->lut_sync_lock_cancel]); + seq_printf(m, "%s\n", + sync_on_cancel_states[tgt->lut_sync_lock_cancel]); + return 0; } /** @@ -608,12 +593,12 @@ static ssize_t ofd_sync_lock_cancel_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 lu_target *tgt = obd->u.obt.obt_lut; - char kernbuf[SYNC_STATES_MAXLEN]; - int val = -1; - int i; + struct seq_file *m = file->private_data; + struct obd_device *obd = m->private; + struct lu_target *tgt = obd->u.obt.obt_lut; + char kernbuf[SYNC_STATES_MAXLEN]; + __s64 val = -1; + int i; if (count == 0 || count >= sizeof(kernbuf)) return -EINVAL; @@ -634,11 +619,7 @@ ofd_sync_lock_cancel_seq_write(struct file *file, const char __user *buffer, /* Legacy numeric codes */ if (val == -1) { - int rc; - - /* Safe to use userspace buffer as lprocfs_write_helper will - * use copy from user for parsing */ - rc = lprocfs_write_helper(buffer, count, &val); + int rc = lprocfs_str_to_s64(buffer, count, &val); if (rc) return rc; } @@ -658,7 +639,7 @@ LPROC_SEQ_FOPS(ofd_sync_lock_cancel); * * When ofd_grant_compat_disable is set, we don't grant any space to clients * not supporting OBD_CONNECT_GRANT_PARAM. Otherwise, space granted to such - * a client is inflated since it consumes PAGE_CACHE_SIZE of grant space per + * a client is inflated since it consumes PAGE_SIZE of grant space per * block, (i.e. typically 4kB units), but underlaying file system might have * block size bigger than page size, e.g. ZFS. See LU-2049 for details. * @@ -673,7 +654,8 @@ static int ofd_grant_compat_disable_seq_show(struct seq_file *m, void *data) struct obd_device *obd = m->private; struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - return seq_printf(m, "%u\n", ofd->ofd_grant_compat_disable); + seq_printf(m, "%u\n", ofd->ofd_grant_compat_disable); + return 0; } /** @@ -697,13 +679,13 @@ ofd_grant_compat_disable_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 ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - int val; - int rc; + struct seq_file *m = file->private_data; + struct obd_device *obd = m->private; + struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); + __s64 val; + int rc; - rc = lprocfs_write_helper(buffer, count, &val); + rc = lprocfs_str_to_s64(buffer, count, &val); if (rc) return rc; @@ -803,16 +785,19 @@ static ssize_t ofd_lfsck_speed_limit_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 ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - __u32 val; - int rc; + struct seq_file *m = file->private_data; + struct obd_device *obd = m->private; + struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); + __s64 val; + int rc; - rc = lprocfs_write_helper(buffer, count, &val); + rc = lprocfs_str_to_s64(buffer, count, &val); if (rc != 0) return rc; + if (val < 0) + return -ERANGE; + rc = lfsck_set_speed(ofd->ofd_osd, val); return rc != 0 ? rc : count; @@ -851,11 +836,11 @@ static int ofd_lfsck_verify_pfid_seq_show(struct seq_file *m, void *data) struct obd_device *obd = m->private; struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - return seq_printf(m, - "switch: %s\ndetected: "LPU64"\nrepaired: "LPU64"\n", - ofd->ofd_lfsck_verify_pfid ? "on" : "off", - ofd->ofd_inconsistency_self_detected, - ofd->ofd_inconsistency_self_repaired); + seq_printf(m, "switch: %s\ndetected: %llu\nrepaired: %llu\n", + ofd->ofd_lfsck_verify_pfid ? "on" : "off", + ofd->ofd_inconsistency_self_detected, + ofd->ofd_inconsistency_self_repaired); + return 0; } /** @@ -878,13 +863,13 @@ static ssize_t ofd_lfsck_verify_pfid_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 ofd_device *ofd = ofd_dev(obd->obd_lu_dev); - __u32 val; - int rc; + struct seq_file *m = file->private_data; + struct obd_device *obd = m->private; + struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev); + __s64 val; + int rc; - rc = lprocfs_write_helper(buffer, count, &val); + rc = lprocfs_str_to_s64(buffer, count, &val); if (rc != 0) return rc; @@ -894,6 +879,14 @@ ofd_lfsck_verify_pfid_seq_write(struct file *file, const char __user *buffer, } LPROC_SEQ_FOPS(ofd_lfsck_verify_pfid); +static int ofd_site_stats_seq_show(struct seq_file *m, void *data) +{ + struct obd_device *obd = m->private; + + return lu_site_stats_seq_print(obd->obd_lu_dev->ld_site, m); +} +LPROC_SEQ_FOPS_RO(ofd_site_stats); + LPROC_SEQ_FOPS_RO_TYPE(ofd, uuid); LPROC_SEQ_FOPS_RO_TYPE(ofd, blksize); LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytestotal); @@ -940,8 +933,6 @@ struct lprocfs_vars lprocfs_ofd_obd_vars[] = { .fops = &ofd_tot_granted_fops }, { .name = "grant_precreate", .fops = &ofd_grant_precreate_fops }, - { .name = "grant_ratio", - .fops = &ofd_grant_ratio_fops }, { .name = "precreate_batch", .fops = &ofd_precreate_batch_fops }, { .name = "recovery_status", @@ -958,6 +949,8 @@ struct lprocfs_vars lprocfs_ofd_obd_vars[] = { .fops = &ofd_degraded_fops }, { .name = "sync_journal", .fops = &ofd_syncjournal_fops }, + { .name = "brw_size", + .fops = &ofd_brw_size_fops }, { .name = "sync_on_lock_cancel", .fops = &ofd_sync_lock_cancel_fops }, { .name = "instance", @@ -980,6 +973,8 @@ struct lprocfs_vars lprocfs_ofd_obd_vars[] = { .fops = &ofd_lfsck_layout_fops }, { .name = "lfsck_verify_pfid", .fops = &ofd_lfsck_verify_pfid_fops }, + { .name = "site_stats", + .fops = &ofd_site_stats_fops }, { NULL } };