X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fptlrpc%2Fsec_lproc.c;h=2add9953b616241bb4146d9dbfaae913f8aee6ac;hb=ff0c89a73e141ce019ee2a94e5d01a8a37dd830a;hp=0d1d57126c1561354856931fd64b3db8a5c4fc4a;hpb=8a41cc258a4cf12f779b82c32d98e9696aa49833;p=fs%2Flustre-release.git diff --git a/lustre/ptlrpc/sec_lproc.c b/lustre/ptlrpc/sec_lproc.c index 0d1d571..2add995 100644 --- a/lustre/ptlrpc/sec_lproc.c +++ b/lustre/ptlrpc/sec_lproc.c @@ -1,27 +1,41 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: +/* + * GPL HEADER START * - * Copyright (C) 2006 Cluster File Systems, Inc. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * This file is part of Lustre, http://www.lustre.org. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. * - * 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. + * This program 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 version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). * - * 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. + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf * - * 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. + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + * + * GPL HEADER END + */ +/* + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. + * + * lustre/ptlrpc/sec_lproc.c + * + * Author: Eric Mei */ -#ifndef EXPORT_SYMTAB -#define EXPORT_SYMTAB -#endif #define DEBUG_SUBSYSTEM S_SEC #include @@ -47,7 +61,7 @@ struct proc_dir_entry *sptlrpc_proc_root = NULL; EXPORT_SYMBOL(sptlrpc_proc_root); -void sec_flags2str(unsigned long flags, char *buf, int bufsize) +char *sec_flags2str(unsigned long flags, char *buf, int bufsize) { buf[0] = '\0'; @@ -55,95 +69,114 @@ void sec_flags2str(unsigned long flags, char *buf, int bufsize) strncat(buf, "reverse,", bufsize); if (flags & PTLRPC_SEC_FL_ROOTONLY) strncat(buf, "rootonly,", bufsize); + if (flags & PTLRPC_SEC_FL_UDESC) + strncat(buf, "udesc,", bufsize); if (flags & PTLRPC_SEC_FL_BULK) strncat(buf, "bulk,", bufsize); if (buf[0] == '\0') strncat(buf, "-,", bufsize); buf[strlen(buf) - 1] = '\0'; + return buf; +} +static int sptlrpc_info_lprocfs_seq_show(struct seq_file *seq, void *v) +{ + struct obd_device *dev = seq->private; + struct client_obd *cli = &dev->u.cli; + struct ptlrpc_sec *sec = NULL; + char str[32]; + + LASSERT(strcmp(dev->obd_type->typ_name, LUSTRE_OSC_NAME) == 0 || + strcmp(dev->obd_type->typ_name, LUSTRE_MDC_NAME) == 0 || + strcmp(dev->obd_type->typ_name, LUSTRE_MGC_NAME) == 0); + + if (cli->cl_import) + sec = sptlrpc_import_sec_ref(cli->cl_import); + if (sec == NULL) + goto out; + + sec_flags2str(sec->ps_flvr.sf_flags, str, sizeof(str)); + + seq_printf(seq, "rpc flavor: %s\n", + sptlrpc_flavor2name_base(sec->ps_flvr.sf_rpc)); + seq_printf(seq, "bulk flavor: %s\n", + sptlrpc_flavor2name_bulk(&sec->ps_flvr, str, sizeof(str))); + seq_printf(seq, "flags: %s\n", + sec_flags2str(sec->ps_flvr.sf_flags, str, sizeof(str))); + seq_printf(seq, "id: %d\n", sec->ps_id); + seq_printf(seq, "refcount: %d\n", + cfs_atomic_read(&sec->ps_refcount)); + seq_printf(seq, "nctx: %d\n", cfs_atomic_read(&sec->ps_nctx)); + seq_printf(seq, "gc internal %ld\n", sec->ps_gc_interval); + seq_printf(seq, "gc next %ld\n", + sec->ps_gc_interval ? + sec->ps_gc_next - cfs_time_current_sec() : 0); + + sptlrpc_sec_put(sec); +out: + return 0; } +LPROC_SEQ_FOPS_RO(sptlrpc_info_lprocfs); -int sptlrpc_lprocfs_rd(char *page, char **start, off_t off, int count, - int *eof, void *data) +static int sptlrpc_ctxs_lprocfs_seq_show(struct seq_file *seq, void *v) { - struct obd_device *obd = data; - struct sec_flavor_config *conf = &obd->u.cli.cl_sec_conf; - struct ptlrpc_sec *sec = NULL; - char flags_str[32]; - int written; - - if (obd == NULL) - return 0; - - LASSERT(strcmp(obd->obd_type->typ_name, LUSTRE_OSC_NAME) == 0 || - strcmp(obd->obd_type->typ_name, LUSTRE_MDC_NAME) == 0 || - strcmp(obd->obd_type->typ_name, LUSTRE_MGC_NAME) == 0); - LASSERT(conf->sfc_bulk_csum < BULK_CSUM_ALG_MAX); - LASSERT(conf->sfc_bulk_priv < BULK_PRIV_ALG_MAX); - - if (obd->u.cli.cl_import) - sec = obd->u.cli.cl_import->imp_sec; - - if (sec == NULL) { - written = snprintf(page, count, "\n"); + struct obd_device *dev = seq->private; + struct client_obd *cli = &dev->u.cli; + struct ptlrpc_sec *sec = NULL; + + LASSERT(strcmp(dev->obd_type->typ_name, LUSTRE_OSC_NAME) == 0 || + strcmp(dev->obd_type->typ_name, LUSTRE_MDC_NAME) == 0 || + strcmp(dev->obd_type->typ_name, LUSTRE_MGC_NAME) == 0); + + if (cli->cl_import) + sec = sptlrpc_import_sec_ref(cli->cl_import); + if (sec == NULL) goto out; + + if (sec->ps_policy->sp_cops->display) + sec->ps_policy->sp_cops->display(sec, seq); + + sptlrpc_sec_put(sec); +out: + return 0; +} +LPROC_SEQ_FOPS_RO(sptlrpc_ctxs_lprocfs); + +int sptlrpc_lprocfs_cliobd_attach(struct obd_device *dev) +{ + int rc; + + if (strcmp(dev->obd_type->typ_name, LUSTRE_OSC_NAME) != 0 && + strcmp(dev->obd_type->typ_name, LUSTRE_MDC_NAME) != 0 && + strcmp(dev->obd_type->typ_name, LUSTRE_MGC_NAME) != 0) { + CERROR("can't register lproc for obd type %s\n", + dev->obd_type->typ_name); + return -EINVAL; } - sec_flags2str(sec->ps_flags, flags_str, sizeof(flags_str)); - - written = snprintf(page, count, - "rpc msg flavor: %s\n" - "bulk checksum: %s\n" - "bulk encrypt: %s\n" - "flags: %s\n" - "ctx cache busy %d\n" - "gc interval %lu\n" - "gc next %ld\n", - sptlrpc_flavor2name(sec->ps_flavor), - sptlrpc_bulk_csum_alg2name(conf->sfc_bulk_csum), - sptlrpc_bulk_priv_alg2name(conf->sfc_bulk_priv), - flags_str, - atomic_read(&sec->ps_busy), - sec->ps_gc_interval, - sec->ps_gc_interval ? - sec->ps_gc_next - cfs_time_current_sec() : 0 - ); - - if (sec->ps_policy->sp_cops->display) { - written += sec->ps_policy->sp_cops->display( - sec, page + written, count - written); + rc = lprocfs_obd_seq_create(dev, "srpc_info", 0444, + &sptlrpc_info_lprocfs_fops, dev); + if (rc) { + CERROR("create proc entry srpc_info for %s: %d\n", + dev->obd_name, rc); + return rc; } -#if 0 - /* - * list contexts - */ - if (sec->ps_policy->sp_policy != SPTLRPC_POLICY_GSS) - goto out; - written += snprintf(page + written, count - written, - "GSS contexts ==>\n"); - - spin_lock(&sec->ps_lock); - for (i = 0; i < sec->ps_ccache_size; i++) { - hlist_for_each_entry_safe(ctx, pos, next, - &sec->ps_ccache[i], cc_hash) { - if (written >= count) - break; - written += sptlrpc_cli_ctx_display(ctx, page + written, - count - written); - } + rc = lprocfs_obd_seq_create(dev, "srpc_contexts", 0444, + &sptlrpc_ctxs_lprocfs_fops, dev); + if (rc) { + CERROR("create proc entry srpc_contexts for %s: %d\n", + dev->obd_name, rc); + return rc; } - spin_unlock(&sec->ps_lock); -#endif -out: - return written; + return 0; } -EXPORT_SYMBOL(sptlrpc_lprocfs_rd); +EXPORT_SYMBOL(sptlrpc_lprocfs_cliobd_attach); static struct lprocfs_vars sptlrpc_lprocfs_vars[] = { - { "enc_pool", sptlrpc_proc_read_enc_pool, NULL, NULL }, + { "encrypt_page_pools", sptlrpc_proc_read_enc_pool, NULL, NULL }, { NULL } }; @@ -173,6 +206,11 @@ void sptlrpc_lproc_fini(void) #else /* !__KERNEL__ */ +int sptlrpc_lprocfs_cliobd_attach(struct obd_device *dev) +{ + return 0; +} + int sptlrpc_lproc_init(void) { return 0;