From: ericm Date: Tue, 9 Dec 2008 05:31:15 +0000 (+0000) Subject: branch: HEAD X-Git-Tag: v1_9_130~56 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=0e064a3d30547041eb67a4a936d35525e9b3bc33;hp=44ae147016f6b369249d523c8ab5f9ff00261059 branch: HEAD add debugging level for user space lgss_keyring. --- diff --git a/lustre/ptlrpc/gss/gss_cli_upcall.c b/lustre/ptlrpc/gss/gss_cli_upcall.c index f3df6d2..bec0316 100644 --- a/lustre/ptlrpc/gss/gss_cli_upcall.c +++ b/lustre/ptlrpc/gss/gss_cli_upcall.c @@ -298,7 +298,7 @@ int gss_do_ctx_init_rpc(__user char *buffer, unsigned long count) down_read(&obd->u.cli.cl_sem); if (obd->u.cli.cl_import == NULL) { - CERROR("import has gone\n"); + CERROR("obd %s: import has gone\n", obd->obd_name); RETURN(-EINVAL); } imp = class_import_get(obd->u.cli.cl_import); diff --git a/lustre/ptlrpc/gss/lproc_gss.c b/lustre/ptlrpc/gss/lproc_gss.c index 6398661..489c870 100644 --- a/lustre/ptlrpc/gss/lproc_gss.c +++ b/lustre/ptlrpc/gss/lproc_gss.c @@ -64,6 +64,7 @@ #include "gss_api.h" static struct proc_dir_entry *gss_proc_root = NULL; +static struct proc_dir_entry *gss_proc_lk = NULL; /* * statistic of "out-of-sequence-window" @@ -146,45 +147,81 @@ static int gss_proc_write_secinit(struct file *file, const char *buffer, static struct lprocfs_vars gss_lprocfs_vars[] = { { "replays", gss_proc_read_oos, NULL }, - { "init_channel", NULL, gss_proc_write_secinit, NULL }, + { "init_channel", NULL, gss_proc_write_secinit, NULL, NULL, 0222 }, { NULL } }; +/* + * for userspace helper lgss_keyring. + * + * debug_level: [0, 4], defined in utils/gss/lgss_utils.h + */ +static int gss_lk_debug_level = 1; + +static int gss_lk_proc_read_dl(char *page, char **start, off_t off, + int count, int *eof, void *data) +{ + return snprintf(page, count, "%u\n", gss_lk_debug_level); +} + +static int gss_lk_proc_write_dl(struct file *file, const char *buffer, + unsigned long count, void *data) +{ + int val, rc; + + rc = lprocfs_write_helper(buffer, count, &val); + if (rc < 0) + return rc; + + if (val < 0 || val > 4) + return -ERANGE; + + gss_lk_debug_level = val; + return count; +} + +static struct lprocfs_vars gss_lk_lprocfs_vars[] = { + { "debug_level", gss_lk_proc_read_dl, gss_lk_proc_write_dl, NULL }, + { NULL } +}; + +void gss_exit_lproc(void) +{ + if (gss_proc_lk) { + lprocfs_remove(&gss_proc_lk); + gss_proc_lk = NULL; + } + + if (gss_proc_root) { + lprocfs_remove(&gss_proc_root); + gss_proc_root = NULL; + } +} + int gss_init_lproc(void) { - struct proc_dir_entry *ent; - int rc; + int rc; spin_lock_init(&gss_stat_oos.oos_lock); gss_proc_root = lprocfs_register("gss", sptlrpc_proc_root, gss_lprocfs_vars, NULL); - if (IS_ERR(gss_proc_root)) { - rc = PTR_ERR(gss_proc_root); gss_proc_root = NULL; - CERROR("failed to initialize lproc entries: %d\n", rc); - return rc; + GOTO(err_out, rc = PTR_ERR(gss_proc_root)); } - /* FIXME - * here we should hold proc_subdir_lock which is not exported - */ - ent = gss_proc_root->subdir; - while (ent != NULL) { - if (strcmp(ent->name, "init_channel") == 0) { - ent->mode |= 0222; - break; - } + gss_proc_lk = lprocfs_register("lgss_keyring", gss_proc_root, + gss_lk_lprocfs_vars, NULL); + if (IS_ERR(gss_proc_lk)) { + gss_proc_lk = NULL; + GOTO(err_out, rc = PTR_ERR(gss_proc_root)); } - + return 0; -} -void gss_exit_lproc(void) -{ - if (gss_proc_root) { - lprocfs_remove(&gss_proc_root); - gss_proc_root = NULL; - } +err_out: + CERROR("failed to initialize gss lproc entries: %d\n", rc); + gss_exit_lproc(); + return rc; } diff --git a/lustre/utils/gss/lgss_keyring.c b/lustre/utils/gss/lgss_keyring.c index c77fea1..c90c220 100644 --- a/lustre/utils/gss/lgss_keyring.c +++ b/lustre/utils/gss/lgss_keyring.c @@ -595,6 +595,28 @@ static int parse_callout_info(const char *coinfo, return 0; } +#define LOG_LEVEL_PATH "/proc/fs/lustre/sptlrpc/gss/lgss_keyring/debug_level" + +static void set_log_level() +{ + FILE *file; + unsigned int level; + + file = fopen(LOG_LEVEL_PATH, "r"); + if (file == NULL) + return; + + if (fscanf(file, "%u", &level) != 1) + goto out; + + if (level >= LL_MAX) + goto out; + + lgss_set_loglevel(level); +out: + fclose(file); +} + /**************************************** * main process * ****************************************/ @@ -609,6 +631,9 @@ int main(int argc, char *argv[]) struct lgss_mech_type *mech; struct lgss_cred *cred; + set_log_level(); + + logmsg(LL_TRACE, "start parsing parameters\n"); /* * parse & sanity check upcall parameters * expected to be called with: diff --git a/lustre/utils/gss/lgss_utils.h b/lustre/utils/gss/lgss_utils.h index bd2fa93..54d163f 100644 --- a/lustre/utils/gss/lgss_utils.h +++ b/lustre/utils/gss/lgss_utils.h @@ -96,6 +96,8 @@ typedef enum { extern loglevel_t g_log_level; +void lgss_set_loglevel(loglevel_t level); + void __logmsg(loglevel_t level, const char *func, const char *format, ...); void __logmsg_gss(loglevel_t level, const char *func, const gss_OID mech, uint32_t major, uint32_t minor, const char *format, ...);