X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Futils%2Fdebug.c;h=33699ff9327939b64022974eea6ff8418d0f4596;hb=f97446c2bc3dd023e93a7e20c53a264d6ca0cd43;hp=fc1248b1cfd50b730848af117c00257124b905e4;hpb=433e66ee7807bf1611f298a0ac0796110c343782;p=fs%2Flustre-release.git diff --git a/lnet/utils/debug.c b/lnet/utils/debug.c index fc1248b..33699ff 100644 --- a/lnet/utils/debug.c +++ b/lnet/utils/debug.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -26,8 +24,10 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2011, 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -56,23 +56,8 @@ static int debug_mask = ~0; #define MAX_MARK_SIZE 256 -static const char *libcfs_debug_subsystems[] = - {"undefined", "mdc", "mds", "osc", - "ost", "class", "log", "llite", - "rpc", "mgmt", "lnet", "lnd", - "pinger", "filter", "", "echo", - "ldlm", "lov", "lquota", "", - "", "", "", "lmv", - "", "sec", "gss", "", - "mgc", "mgs", "fid", "fld", NULL}; -static const char *libcfs_debug_masks[] = - {"trace", "inode", "super", "ext2", - "malloc", "cache", "info", "ioctl", - "neterror", "net", "warning", "buffs", - "other", "dentry", "nettrace", "page", - "dlmtrace", "error", "emerg", "ha", - "rpctrace", "vfstrace", "reada", "mmap", - "config", "console", "quota", "sec", NULL}; +static const char *libcfs_debug_subsystems[] = LIBCFS_DEBUG_SUBSYS_NAMES; +static const char *libcfs_debug_masks[] = LIBCFS_DEBUG_MASKS_NAMES; #ifdef __linux__ @@ -352,7 +337,7 @@ static int cmp_rec(const void *p1, const void *p2) return 0; return 1; } - + static void print_rec(struct dbg_line ***linevp, int used, int fdout) { struct dbg_line **linev = *linevp; @@ -363,15 +348,24 @@ static void print_rec(struct dbg_line ***linevp, int used, int fdout) struct dbg_line *line = linev[i]; struct ptldebug_header *hdr = line->hdr; char out[4097]; + char *buf = out; int bytes; + ssize_t bytes_written; - bytes = sprintf(out, "%08x:%08x:%u:%u.%06llu:%u:%u:%u:(%s:%u:%s()) %s", - hdr->ph_subsys, hdr->ph_mask, hdr->ph_cpu_id, + bytes = sprintf(out, "%08x:%08x:%u.%u%s:%u.%06llu:%u:%u:%u:(%s:%u:%s()) %s", + hdr->ph_subsys, hdr->ph_mask, + hdr->ph_cpu_id, hdr->ph_type, + hdr->ph_flags & PH_FLAG_FIRST_RECORD ? "F" : "", hdr->ph_sec, (unsigned long long)hdr->ph_usec, hdr->ph_stack, hdr->ph_pid, hdr->ph_extern_pid, line->file, hdr->ph_line_num, line->fn, line->text); - - write(fdout, out, bytes); + while (bytes > 0) { + bytes_written = write(fdout, buf, bytes); + if (bytes_written <= 0) + break; + bytes -= bytes_written; + buf += bytes_written; + } free(line->hdr); free(line); } @@ -408,6 +402,7 @@ static void dump_hdr(unsigned long long offset, struct ptldebug_header *hdr) fprintf(stderr, " subsystem = %x\n", hdr->ph_subsys); fprintf(stderr, " mask = %x\n", hdr->ph_mask); fprintf(stderr, " cpu_id = %u\n", hdr->ph_cpu_id); + fprintf(stderr, " type = %u\n", hdr->ph_type); fprintf(stderr, " seconds = %u\n", hdr->ph_sec); fprintf(stderr, " microseconds = %lu\n", (long)hdr->ph_usec); fprintf(stderr, " stack = %u\n", hdr->ph_stack); @@ -447,7 +442,7 @@ static int parse_buffer(int fdin, int fdout) goto readhdr; if (hdr->ph_len > 4094 || /* is this header bogus? */ - hdr->ph_cpu_id > 65536 || + hdr->ph_type >= libcfs_tcd_type_max() || hdr->ph_stack > 65536 || hdr->ph_sec < (1 << 30) || hdr->ph_usec > 1000000000 || @@ -561,7 +556,7 @@ print: printf("Debug log: %lu lines, %lu kept, %lu dropped, %lu bad.\n", dropped + kept + bad, kept, dropped, bad); - + return 0; } @@ -594,11 +589,11 @@ int jt_dbg_debug_kernel(int argc, char **argv) strcpy(filename, argv[1]); else sprintf(filename, "%s"CFS_TIME_T".%u", - DEBUG_FILE_PATH_DEFAULT, time(NULL), getpid()); + LIBCFS_DEBUG_FILE_PATH_DEFAULT, time(NULL), getpid()); if (stat(filename, &st) == 0 && S_ISREG(st.st_mode)) unlink(filename); - + fdin = dbg_open_ctlhandle(DUMP_KERNEL_CTL_NAME); if (fdin < 0) { fprintf(stderr, "open(dump_kernel) failed: %s\n", @@ -617,7 +612,7 @@ int jt_dbg_debug_kernel(int argc, char **argv) if (raw) return 0; - + fdin = open(filename, O_RDONLY); if (fdin < 0) { if (errno == ENOENT) /* no dump file created */ @@ -627,7 +622,8 @@ int jt_dbg_debug_kernel(int argc, char **argv) return 1; } if (argc > 1) { - fdout = open(argv[1], O_WRONLY|O_CREAT); + fdout = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, + S_IRUSR | S_IWUSR); if (fdout < 0) { fprintf(stderr, "fopen(%s) failed: %s\n", argv[1], strerror(errno)); @@ -838,72 +834,57 @@ int jt_dbg_mark_debug_buf(int argc, char **argv) } static struct mod_paths { - char *name, *path; + char *name, *path; } mod_paths[] = { - {"libcfs", "libcfs/libcfs"}, - {"lnet", "lnet/lnet"}, - {"kciblnd", "lnet/klnds/ciblnd"}, - {"kgmlnd", "lnet/klnds/gmlnd"}, - {"kmxlnd", "lnet/klnds/mxlnd"}, - {"kiiblnd", "lnet/klnds/iiblnd"}, - {"ko2iblnd", "lnet/klnds/o2iblnd"}, - {"kopeniblnd", "lnet/klnds/openiblnd"}, - {"kptllnd", "lnet/klnds/ptllnd"}, - {"kqswlnd", "lnet/klnds/qswlnd"}, - {"kralnd", "lnet/klnds/ralnd"}, - {"ksocklnd", "lnet/klnds/socklnd"}, - {"ktdilnd", "lnet/klnds/tdilnd"}, - {"kviblnd", "lnet/klnds/viblnd"}, - {"lvfs", "lustre/lvfs"}, - {"obdclass", "lustre/obdclass"}, - {"llog_test", "lustre/obdclass"}, - {"ptlrpc_gss", "lustre/ptlrpc/gss"}, - {"ptlrpc", "lustre/ptlrpc"}, - {"gks", "lustre/sec/gks"}, - {"gkc", "lustre/sec/gks"}, - {"ost", "lustre/ost"}, - {"osc", "lustre/osc"}, - {"mds", "lustre/mds"}, - {"mdc", "lustre/mdc"}, - {"llite", "lustre/llite"}, - {"lustre", "lustre/llite"}, - {"llite_lloop", "lustre/llite"}, - {"ldiskfs", "ldiskfs/ldiskfs"}, - {"smfs", "lustre/smfs"}, - {"obdecho", "lustre/obdecho"}, - {"ldlm", "lustre/ldlm"}, - {"obdfilter", "lustre/obdfilter"}, - {"lov", "lustre/lov"}, - {"lmv", "lustre/lmv"}, - {"fsfilt_ext3", "lustre/lvfs"}, - {"fsfilt_reiserfs", "lustre/lvfs"}, - {"fsfilt_smfs", "lustre/lvfs"}, - {"fsfilt_ldiskfs", "lustre/lvfs"}, - {"mds_ext3", "lustre/mds"}, - {"cobd", "lustre/cobd"}, - {"cmobd", "lustre/cmobd"}, - {"lquota", "lustre/quota"}, - {"mgs", "lustre/mgs"}, - {"mgc", "lustre/mgc"}, - {"mdt", "lustre/mdt"}, - {"mdd", "lustre/mdd"}, - {"osd", "lustre/osd"}, - {"cmm", "lustre/cmm"}, + { "libcfs", "libcfs/libcfs" }, + { "lnet", "lnet/lnet" }, + { "kmxlnd", "lnet/klnds/mxlnd" }, + { "ko2iblnd", "lnet/klnds/o2iblnd" }, + { "kptllnd", "lnet/klnds/ptllnd" }, + { "kgnilnd", "lnet/klnds/gnilnd"}, + { "kqswlnd", "lnet/klnds/qswlnd" }, + { "kralnd", "lnet/klnds/ralnd" }, + { "ksocklnd", "lnet/klnds/socklnd" }, + { "ktdilnd", "lnet/klnds/tdilnd" }, + { "lvfs", "lustre/lvfs" }, + { "obdclass", "lustre/obdclass" }, + { "llog_test", "lustre/obdclass" }, + { "ptlrpc_gss", "lustre/ptlrpc/gss" }, + { "ptlrpc", "lustre/ptlrpc" }, + { "gks", "lustre/sec/gks" }, + { "gkc", "lustre/sec/gks" }, + { "ost", "lustre/ost" }, + { "osc", "lustre/osc" }, + { "mds", "lustre/mds" }, + { "mdc", "lustre/mdc" }, + { "lustre", "lustre/llite" }, + { "llite_lloop", "lustre/llite" }, + { "ldiskfs", "ldiskfs" }, + { "obdecho", "lustre/obdecho" }, + { "ldlm", "lustre/ldlm" }, + { "obdfilter", "lustre/obdfilter" }, + { "lov", "lustre/lov" }, + { "lmv", "lustre/lmv" }, + { "fsfilt_ldiskfs", "lustre/lvfs" }, + { "lquota", "lustre/quota" }, + { "mgs", "lustre/mgs" }, + { "mgc", "lustre/mgc" }, + { "mdt", "lustre/mdt" }, + { "mdd", "lustre/mdd" }, + { "osd", "lustre/osd" }, + { "cmm", "lustre/cmm" }, {"fid", "lustre/fid"}, {"fld", "lustre/fld"}, + {"lod", "lustre/lod"}, + {"osp", "lustre/osp"}, + { "lfsck", "lustre/lfsck" }, {NULL, NULL} }; -static int jt_dbg_modules_2_4(int argc, char **argv) -{ - return -EINVAL; -} - -static int jt_dbg_modules_2_5(int argc, char **argv) +int jt_dbg_modules(int argc, char **argv) { struct mod_paths *mp; char *path = ""; - char *kernel = "linux"; const char *proc = "/proc/modules"; char modname[128], buf[4096]; long modaddr; @@ -911,8 +892,6 @@ static int jt_dbg_modules_2_5(int argc, char **argv) if (argc >= 2) path = argv[1]; - if (argc == 3) - kernel = argv[2]; if (argc > 3) { printf("%s [path] [kernel]\n", argv[0]); return 0; @@ -930,11 +909,11 @@ static int jt_dbg_modules_2_5(int argc, char **argv) if (!strcmp(mp->name, modname)) break; } - if (mp->name) { - printf("add-symbol-file %s%s%s/%s.o 0x%0lx\n", - path, path[0] ? "/" : "", - mp->path, mp->name, modaddr); - } + if (mp->name) { + printf("add-symbol-file %s%s%s/%s.o 0x%0lx\n", + path, path[0] ? "/" : "", + mp->path, mp->name, modaddr); + } } } @@ -942,26 +921,6 @@ static int jt_dbg_modules_2_5(int argc, char **argv) return 0; } -int jt_dbg_modules(int argc, char **argv) -{ - int rc = 0; - struct utsname sysinfo; - - rc = uname(&sysinfo); - if (rc) { - printf("uname() failed: %s\n", strerror(errno)); - return 0; - } - - if (sysinfo.release[2] > '4') { - return jt_dbg_modules_2_5(argc, argv); - } else { - return jt_dbg_modules_2_4(argc, argv); - } - - return 0; -} - int jt_dbg_panic(int argc, char **argv) { int rc;