X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fost%2Flproc_ost.c;h=38f951838f7599fe103c026a312fce527120a4cd;hb=d4a31821ccd63fcc5197680300bdc37a9453a332;hp=beef27ade868caaefa82f79cacabbb851d395fdf;hpb=fbb7ead129258897f5a5d5c9ce28d31fbbe5bca2;p=fs%2Flustre-release.git diff --git a/lustre/ost/lproc_ost.c b/lustre/ost/lproc_ost.c index beef27a..38f9518 100644 --- a/lustre/ost/lproc_ost.c +++ b/lustre/ost/lproc_ost.c @@ -3,32 +3,33 @@ * * Copyright (C) 2002, 2003 Cluster File Systems, Inc. * - * This file is part of Lustre, http://www.lustre.org. + * This file is part of the Lustre file system, http://www.lustre.org + * Lustre is a trademark of Cluster File Systems, Inc. * - * Lustre is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. + * You may have signed or agreed to another license before downloading + * this software. If so, you are bound by the terms and conditions + * of that agreement, and the following does not apply to you. See the + * LICENSE file included with this distribution for more information. * - * Lustre is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * If you did not agree to a different license, then this copy of Lustre + * is open source software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. * - * You should have received a copy of the GNU General Public License - * along with Lustre; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * In either case, Lustre is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * license text for more details. * */ #define DEBUG_SUBSYSTEM S_OST -#include -#include +#include +#include #include +#include "ost_internal.h" -#ifndef LPROCFS -static struct lprocfs_vars lprocfs_obd_vars[] = { {0} }; -static struct lprocfs_vars lprocfs_module_vars[] = { {0} }; -#else +#ifdef LPROCFS static struct lprocfs_vars lprocfs_obd_vars[] = { { "uuid", lprocfs_rd_uuid, 0, 0 }, { 0 } @@ -39,100 +40,39 @@ static struct lprocfs_vars lprocfs_module_vars[] = { { 0 } }; -#define PRINTF_STIME(stime) (unsigned long)(stime)->st_num, \ - lprocfs_stime_avg_ms(stime), lprocfs_stime_avg_us(stime) - -static int ost_stimes_seq_show(struct seq_file *seq, void *v) +void +ost_print_req(void *seq_file, struct ptlrpc_request *req) { - struct timeval now; - struct obd_device *dev = seq->private; - struct ost_obd *ost = &dev->u.ost; - - do_gettimeofday(&now); - - spin_lock(&ost->ost_lock); - - seq_printf(seq, "snapshot_time: %lu.%lu (secs.usecs)\n", - now.tv_sec, now.tv_usec); - - seq_printf(seq, "\nread rpc service time: (rpcs, average ms)\n"); - seq_printf(seq, "\tprep\t%lu\t%lu.%04lu\n", - PRINTF_STIME(&ost->ost_stimes[0])); - seq_printf(seq, "\tbulk\t%lu\t%lu.%04lu\n\n", - PRINTF_STIME(&ost->ost_stimes[1])); - seq_printf(seq, "\tcommit\t%lu\t%lu.%04lu\n\n", - PRINTF_STIME(&ost->ost_stimes[2])); - - seq_printf(seq, "\nwrite rpc service time: (rpcs, average ms)\n"); - seq_printf(seq, "\tprep\t%lu\t%lu.%04lu\n", - PRINTF_STIME(&ost->ost_stimes[3])); - seq_printf(seq, "\tbulk\t%lu\t%lu.%04lu\n\n", - PRINTF_STIME(&ost->ost_stimes[4])); - seq_printf(seq, "\tcommit\t%lu\t%lu.%04lu\n\n", - PRINTF_STIME(&ost->ost_stimes[5])); - - spin_unlock(&ost->ost_lock); - - return 0; + /* Called holding srv_lock with irqs disabled. + * Print specific req contents and a newline. + * CAVEAT EMPTOR: check request message length before printing!!! + * You might have received any old crap so you must be just as + * careful here as the service's request parser!!! */ + struct seq_file *sf = seq_file; + + switch (req->rq_phase) { + case RQ_PHASE_NEW: + /* still awaiting a service thread's attention, or rejected + * because the generic request message didn't unpack */ + seq_printf(sf, "\n"); + break; + + case RQ_PHASE_INTERPRET: + /* being handled, so basic msg swabbed, and opc is valid + * but racing with ost_handle() */ + seq_printf(sf, "opc %d\n", lustre_msg_get_opc(req->rq_reqmsg)); + break; + + case RQ_PHASE_COMPLETE: + /* been handled by ost_handle() reply state possibly still + * volatile */ + seq_printf(sf, "opc %d\n", lustre_msg_get_opc(req->rq_reqmsg)); + break; + + default: + LBUG(); + } } -static void *ost_stimes_seq_start(struct seq_file *p, loff_t *pos) -{ - if (*pos == 0) - return (void *)1; - return NULL; -} -static void *ost_stimes_seq_next(struct seq_file *p, void *v, loff_t *pos) -{ - ++*pos; - return NULL; -} -static void ost_stimes_seq_stop(struct seq_file *p, void *v) -{ -} -struct seq_operations ost_stimes_seq_sops = { - .start = ost_stimes_seq_start, - .stop = ost_stimes_seq_stop, - .next = ost_stimes_seq_next, - .show = ost_stimes_seq_show, -}; - -static int ost_stimes_seq_open(struct inode *inode, struct file *file) -{ - struct proc_dir_entry *dp = PDE(inode); - struct seq_file *seq; - int rc; - - rc = seq_open(file, &ost_stimes_seq_sops); - if (rc) - return rc; - seq = file->private_data; - seq->private = dp->data; - return 0; -} - -static ssize_t ost_stimes_seq_write(struct file *file, const char *buf, - size_t len, loff_t *off) -{ - struct seq_file *seq = file->private_data; - struct obd_device *dev = seq->private; - struct ost_obd *ost = &dev->u.ost; - - spin_lock(&ost->ost_lock); - memset(&ost->ost_stimes, 0, sizeof(ost->ost_stimes)); - spin_unlock(&ost->ost_lock); - - return len; -} - -struct file_operations ost_stimes_fops = { - .owner = THIS_MODULE, - .open = ost_stimes_seq_open, - .read = seq_read, - .write = ost_stimes_seq_write, - .llseek = seq_lseek, - .release = seq_release, -}; - -#endif /* LPROCFS */ LPROCFS_INIT_VARS(ost, lprocfs_module_vars, lprocfs_obd_vars) +#endif /* LPROCFS */