X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fptlrpc%2Flproc_ptlrpc.c;h=82fe46886ddd344728dd3fab047cd04274142b40;hp=4c55fe11ba8ecb3bea2bf030e568b09df41ba489;hb=1929bfe81379a9c986bfa4202265f76d201a49bc;hpb=6fc8da41f2ff5156639e89f379adcdbb73ac8567 diff --git a/lustre/ptlrpc/lproc_ptlrpc.c b/lustre/ptlrpc/lproc_ptlrpc.c index 4c55fe1..82fe468 100644 --- a/lustre/ptlrpc/lproc_ptlrpc.c +++ b/lustre/ptlrpc/lproc_ptlrpc.c @@ -70,6 +70,7 @@ static struct ll_rpc_opcode { { OST_QUOTACHECK, "ost_quotacheck" }, { OST_QUOTACTL, "ost_quotactl" }, { OST_QUOTA_ADJUST_QUNIT, "ost_quota_adjust_qunit" }, + { OST_LADVISE, "ost_ladvise" }, { MDS_GETATTR, "mds_getattr" }, { MDS_GETATTR_NAME, "mds_getattr_lock" }, { MDS_CLOSE, "mds_close" }, @@ -77,7 +78,7 @@ static struct ll_rpc_opcode { { MDS_READPAGE, "mds_readpage" }, { MDS_CONNECT, "mds_connect" }, { MDS_DISCONNECT, "mds_disconnect" }, - { MDS_GETSTATUS, "mds_getstatus" }, + { MDS_GET_ROOT, "mds_get_root" }, { MDS_STATFS, "mds_statfs" }, { MDS_PIN, "mds_pin" }, { MDS_UNPIN, "mds_unpin" }, @@ -268,7 +269,8 @@ ptlrpc_lprocfs_req_history_len_seq_show(struct seq_file *m, void *v) ptlrpc_service_for_each_part(svcpt, i, svc) total += svcpt->scp_hist_nrqbds; - return seq_printf(m, "%d\n", total); + seq_printf(m, "%d\n", total); + return 0; } LPROC_SEQ_FOPS_RO(ptlrpc_lprocfs_req_history_len); @@ -283,7 +285,8 @@ ptlrpc_lprocfs_req_history_max_seq_show(struct seq_file *m, void *n) ptlrpc_service_for_each_part(svcpt, i, svc) total += svc->srv_hist_nrqbds_cpt_max; - return seq_printf(m, "%d\n", total); + seq_printf(m, "%d\n", total); + return 0; } static ssize_t @@ -291,33 +294,34 @@ ptlrpc_lprocfs_req_history_max_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct seq_file *m = file->private_data; - struct ptlrpc_service *svc = m->private; - int bufpages; - int val; - int rc; + struct seq_file *m = file->private_data; + struct ptlrpc_service *svc = m->private; + int bufpages; + __s64 val; + int rc; - rc = lprocfs_write_helper(buffer, count, &val); - if (rc < 0) - return rc; + rc = lprocfs_str_to_s64(buffer, count, &val); + if (rc < 0) + return rc; - if (val < 0) - return -ERANGE; + if (val < 0 || val > INT_MAX) + return -ERANGE; - /* This sanity check is more of an insanity check; we can still - * hose a kernel by allowing the request history to grow too - * far. */ + /* This sanity check is more of an insanity check; we can still + * hose a kernel by allowing the request history to grow too + * far. */ bufpages = (svc->srv_buf_size + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT; if (val > totalram_pages/(2 * bufpages)) - return -ERANGE; + return -ERANGE; spin_lock(&svc->srv_lock); if (val == 0) svc->srv_hist_nrqbds_cpt_max = 0; else - svc->srv_hist_nrqbds_cpt_max = max(1, (val / svc->srv_ncpts)); + svc->srv_hist_nrqbds_cpt_max = + max(1, ((int)val / svc->srv_ncpts)); spin_unlock(&svc->srv_lock); @@ -330,8 +334,9 @@ ptlrpc_lprocfs_threads_min_seq_show(struct seq_file *m, void *n) { struct ptlrpc_service *svc = m->private; - return seq_printf(m, "%d\n", - svc->srv_nthrs_cpt_init * svc->srv_ncpts); + seq_printf(m, "%d\n", + svc->srv_nthrs_cpt_init * svc->srv_ncpts); + return 0; } static ssize_t @@ -339,10 +344,10 @@ ptlrpc_lprocfs_threads_min_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct seq_file *m = file->private_data; - struct ptlrpc_service *svc = m->private; - int val; - int rc = lprocfs_write_helper(buffer, count, &val); + struct seq_file *m = file->private_data; + struct ptlrpc_service *svc = m->private; + __s64 val; + int rc = lprocfs_str_to_s64(buffer, count, &val); if (rc < 0) return rc; @@ -356,7 +361,7 @@ ptlrpc_lprocfs_threads_min_seq_write(struct file *file, return -ERANGE; } - svc->srv_nthrs_cpt_init = val / svc->srv_ncpts; + svc->srv_nthrs_cpt_init = (int)val / svc->srv_ncpts; spin_unlock(&svc->srv_lock); @@ -375,7 +380,8 @@ ptlrpc_lprocfs_threads_started_seq_show(struct seq_file *m, void *n) ptlrpc_service_for_each_part(svcpt, i, svc) total += svcpt->scp_nthrs_running; - return seq_printf(m, "%d\n", total); + seq_printf(m, "%d\n", total); + return 0; } LPROC_SEQ_FOPS_RO(ptlrpc_lprocfs_threads_started); @@ -384,8 +390,9 @@ ptlrpc_lprocfs_threads_max_seq_show(struct seq_file *m, void *n) { struct ptlrpc_service *svc = m->private; - return seq_printf(m, "%d\n", - svc->srv_nthrs_cpt_limit * svc->srv_ncpts); + seq_printf(m, "%d\n", + svc->srv_nthrs_cpt_limit * svc->srv_ncpts); + return 0; } static ssize_t @@ -393,10 +400,10 @@ ptlrpc_lprocfs_threads_max_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct seq_file *m = file->private_data; - struct ptlrpc_service *svc = m->private; - int val; - int rc = lprocfs_write_helper(buffer, count, &val); + struct seq_file *m = file->private_data; + struct ptlrpc_service *svc = m->private; + __s64 val; + int rc = lprocfs_str_to_s64(buffer, count, &val); if (rc < 0) return rc; @@ -410,7 +417,7 @@ ptlrpc_lprocfs_threads_max_seq_write(struct file *file, return -ERANGE; } - svc->srv_nthrs_cpt_limit = val / svc->srv_ncpts; + svc->srv_nthrs_cpt_limit = (int)val / svc->srv_ncpts; spin_unlock(&svc->srv_lock); @@ -599,21 +606,21 @@ again: for (pol_idx = 0; pol_idx < num_pols; pol_idx++) { if (strlen(infos[pol_idx].pi_arg) > 0) seq_printf(m, " - name: %s %s\n", - infos[pol_idx].pi_name, - infos[pol_idx].pi_arg); + infos[pol_idx].pi_name, + infos[pol_idx].pi_arg); else seq_printf(m, " - name: %s\n", - infos[pol_idx].pi_name); + infos[pol_idx].pi_name); seq_printf(m, " state: %s\n" - " fallback: %s\n" - " queued: %-20d\n" - " active: %-20d\n\n", - nrs_state2str(infos[pol_idx].pi_state), - infos[pol_idx].pi_fallback ? "yes" : "no", - (int)infos[pol_idx].pi_req_queued, - (int)infos[pol_idx].pi_req_started); + " fallback: %s\n" + " queued: %-20d\n" + " active: %-20d\n\n", + nrs_state2str(infos[pol_idx].pi_state), + infos[pol_idx].pi_fallback ? "yes" : "no", + (int)infos[pol_idx].pi_req_queued, + (int)infos[pol_idx].pi_req_started); } if (!hp && nrs_svc_has_hp(svc)) { @@ -957,23 +964,34 @@ static int ptlrpc_lprocfs_svc_req_history_show(struct seq_file *s, void *iter) rc = ptlrpc_lprocfs_svc_req_history_seek(svcpt, srhi, srhi->srhi_seq); if (rc == 0) { + struct timespec arrival, sent, arrivaldiff; char nidstr[LNET_NIDSTR_SIZE]; req = srhi->srhi_req; libcfs_nid2str_r(req->rq_self, nidstr, sizeof(nidstr)); + arrival.tv_sec = req->rq_arrival_time.tv_sec; + arrival.tv_nsec = + req->rq_arrival_time.tv_usec * NSEC_PER_USEC; + sent.tv_sec = req->rq_sent; + sent.tv_nsec = 0; + arrivaldiff = timespec_sub(sent, arrival); + /* Print common req fields. * CAVEAT EMPTOR: we're racing with the service handler * here. The request could contain any old crap, so you * must be just as careful as the service's request * parser. Currently I only print stuff here I know is OK * to look at coz it was set up in request_in_callback()!!! */ - seq_printf(s, LPD64":%s:%s:x"LPU64":%d:%s:%ld:%lds(%+lds) ", + seq_printf(s, LPD64":%s:%s:x"LPU64":%d:%s:" + "%ld.%06ld:%ld.%06lds(%+ld.0s) ", req->rq_history_seq, nidstr, libcfs_id2str(req->rq_peer), req->rq_xid, req->rq_reqlen, ptlrpc_rqphase2str(req), req->rq_arrival_time.tv_sec, - req->rq_sent - req->rq_arrival_time.tv_sec, + req->rq_arrival_time.tv_usec, + arrivaldiff.tv_sec, + arrivaldiff.tv_nsec / NSEC_PER_USEC, req->rq_sent - req->rq_deadline); if (svc->srv_ops.so_req_printer == NULL) seq_printf(s, "\n"); @@ -1047,23 +1065,24 @@ LPROC_SEQ_FOPS_RO(ptlrpc_lprocfs_timeouts); static int ptlrpc_lprocfs_hp_ratio_seq_show(struct seq_file *m, void *v) { struct ptlrpc_service *svc = m->private; - return seq_printf(m, "%d\n", svc->srv_hpreq_ratio); + seq_printf(m, "%d\n", svc->srv_hpreq_ratio); + return 0; } static ssize_t ptlrpc_lprocfs_hp_ratio_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct seq_file *m = file->private_data; - struct ptlrpc_service *svc = m->private; - int rc; - int val; + struct seq_file *m = file->private_data; + struct ptlrpc_service *svc = m->private; + int rc; + __s64 val; - rc = lprocfs_write_helper(buffer, count, &val); + rc = lprocfs_str_to_s64(buffer, count, &val); if (rc < 0) return rc; - if (val < 0) + if (val < 0 || val > INT_MAX) return -ERANGE; spin_lock(&svc->srv_lock); @@ -1296,12 +1315,11 @@ int lprocfs_pinger_recov_seq_show(struct seq_file *m, void *n) { struct obd_device *obd = m->private; struct obd_import *imp = obd->u.cli.cl_import; - int rc; LPROCFS_CLIMP_CHECK(obd); - rc = seq_printf(m, "%d\n", !imp->imp_no_pinger_recover); + seq_printf(m, "%d\n", !imp->imp_no_pinger_recover); LPROCFS_CLIMP_EXIT(obd); - return rc; + return 0; } EXPORT_SYMBOL(lprocfs_pinger_recov_seq_show); @@ -1309,13 +1327,14 @@ ssize_t lprocfs_pinger_recov_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 client_obd *cli = &obd->u.cli; - struct obd_import *imp = cli->cl_import; - int rc, val; + struct seq_file *m = file->private_data; + struct obd_device *obd = m->private; + struct client_obd *cli = &obd->u.cli; + struct obd_import *imp = cli->cl_import; + int rc; + __s64 val; - rc = lprocfs_write_helper(buffer, count, &val); + rc = lprocfs_str_to_s64(buffer, count, &val); if (rc < 0) return rc;