Hi Dave,

>>> On 1/9/2012 at 09:25 AM, in message
<c6dce576-2317-45b3-aaca-7b1ac3f97...@zmail15.collab.prod.int.phx2.redhat.com>,
Dave Anderson <[email protected]> wrote: 

> 
> Can you re-post your patch as an attachment?

Certainly, I will do that shortly. I'm sorry for not realizing my mail address 
change was a factor. The change happened quietly for me and I still have 
novell.com as an alias anyway, however I am a SUSE R&D engineer.

> When read from both my mailer, and by cut-and-past from the mailing
> list archive, it seems that all the tabs have been made into spaces?

Understood, thanks for the explanation.

David.

> 
> ----- Original Message -----
>> I have been shown several alleged crash bugs that much effort
>> revealed to be actually just incomplete or corrupt dump files. This
>> set of changes adds a debug level 8 set of messages that allows for
>> an easier optional diagnosis of faulty crash dumps through the
>> runtime read_mem() instance and it's behavior and adds some optional
>> messages for identifiable error cases that currently only use error
>> codes that aren't uniquely found in the source.
>> 
>> This patch is based on crash-6.0.2
>> 
>> Signed-off-by: David Mair <[email protected]>
>> ---
>> diff --git a/a/diskdump.c b/b/diskdump.c
>> index 5519af7..7cad9dc 100644
>> --- a/a/diskdump.c
>> +++ b/b/diskdump.c
>> @@ -432,6 +432,8 @@ restart:
>>  
>>      dd->dumpable_bitmap = calloc(bitmap_len, 1);
>>  
>> +    if (CRASHDEBUG(8))
>> +            error(INFO, "     memory bitmap: %llx\n", offset);
>>      if (FLAT_FORMAT()) {
>>              if (!read_flattened_format(dd->dfd, offset, dd->bitmap,
>>              bitmap_len)) {
>>                      error(INFO, "%s: cannot read memory bitmap\n",
>> @@ -829,6 +831,9 @@ read_diskdump(int fd, void *bufptr, int cnt,
>> ulong addr, physaddr_t paddr)
>>  
>>      pfn = paddr_to_pfn(paddr);
>>  
>> +    if (CRASHDEBUG(8))
>> +            error(INFO, "read_diskdump(%d, %llx, %d, %lx, %llx), pfn=%lx\n",
>> +                    fd, (ulonglong)bufptr, cnt, addr, (ulonglong)paddr, 
>> pfn);
>>      if (KDUMP_SPLIT()) {
>>              /* Find proper dd */
>>              int i;
>> @@ -844,27 +849,54 @@ read_diskdump(int fd, void *bufptr, int cnt,
>> ulong addr, physaddr_t paddr)
>>                      }
>>              }
>>  
>> -            if (i == num_dumpfiles)
>> +            if (i == num_dumpfiles) {
>> +                    if (CRASHDEBUG(8))
>> +                            error(INFO, "Address is beyond last 
>> dumpfile.\n");
>>                      return SEEK_ERROR;
>> +            }
>>      }
>>  
>>      curpaddr = paddr & ~((physaddr_t)(dd->block_size-1));
>>      page_offset = paddr & ((physaddr_t)(dd->block_size-1));
>>  
>> -    if ((pfn >= dd->header->max_mapnr) || !page_is_ram(pfn))
>> +    if ((pfn >= dd->header->max_mapnr) || !page_is_ram(pfn)) {
>> +            if (CRASHDEBUG(8) && (pfn >= dd->header->max_mapnr))
>> +                    error(INFO, "pfn (%lx) is >= maximum map number 
>> (%lx)\n",
>> +                            pfn, dd->header->max_mapnr);
>> +            if (CRASHDEBUG(8) && !page_is_ram(pfn))
>> +                    error(INFO, "pfn (%lx) is not in ram\n", pfn);
>>              return SEEK_ERROR;
>> +    }
>>      if (!page_is_dumpable(pfn)) {
>>              if ((dd->flags & (ZERO_EXCLUDED|ERROR_EXCLUDED)) ==
>> -                ERROR_EXCLUDED)
>> +                ERROR_EXCLUDED) {
>> +                    if (CRASHDEBUG(8))
>> +                            error(INFO, "pfn (%lx) is excluded\n", pfn);
>>                      return PAGE_EXCLUDED;
>> +            }
>> +            if (CRASHDEBUG(8))
>> +                    error(INFO, "Zero-filling page with pfn=%lx\n", pfn);
>>              memset(bufptr, 0, cnt);
>>              return cnt;
>>      }
>>  
>> -    if (!page_is_cached(curpaddr))
>> -            if ((ret = cache_page(curpaddr)) < 0)
>> +    if (!page_is_cached(curpaddr)) {
>> +            if (CRASHDEBUG(8))
>> +                    error(INFO, "caching page with current physaddr=%llx\n",
>> +                          curpaddr);
>> +            if ((ret = cache_page(curpaddr)) < 0) {
>> +                    if (CRASHDEBUG(8))
>> +                            error(INFO, "Failed with err=%d to cache page "
>> +                                    "with current physaddr=%llx\n",
>> +                                            ret, curpaddr);
>>                      return ret;
>> +            }
>> +    }
>>      
>> +    if (CRASHDEBUG(8))
>> +            error(INFO, "Buffering page with pfn=%lx and current "
>> +                    "physaddr=%llx\n",
>> +                            pfn, curpaddr);
>>      memcpy(bufptr, dd->curbufptr + page_offset, cnt);
>>  
>>      return cnt;
>> diff --git a/a/filesys.c b/b/filesys.c
>> index 6994fb0..7a8ec3d 100755
>> --- a/a/filesys.c
>> +++ b/b/filesys.c
>> @@ -163,6 +163,8 @@ memory_source_init(void)
>>                      error(INFO, "using /dev/mem\n\n");
>>                      pc->flags &= ~MEMMOD;
>>                      pc->flags |= DEVMEM;
>> +                    if (CRASHDEBUG(8))
>> +                            error(INFO, "Setting readmem to 
>> read_dev_mem\n");
>>                      pc->readmem = read_dev_mem;
>>                      pc->writemem = write_dev_mem;
>>                      pc->live_memsrc = "/dev/mem";
>> @@ -3382,6 +3384,8 @@ get_live_memory_source(void)
>>      if (use_module) {
>>              pc->flags &= ~DEVMEM;
>>              pc->flags |= MEMMOD;
>> +            if (CRASHDEBUG(8))
>> +                    error(INFO, "Setting readmem to read_memory_device\n");
>>              pc->readmem = read_memory_device;
>>              pc->writemem = write_memory_device;
>>              pc->live_memsrc = pc->memory_device;
>> @@ -3390,6 +3394,9 @@ get_live_memory_source(void)
>>      if (crashbuiltin) {
>>              pc->flags &= ~DEVMEM;
>>              pc->flags |= CRASHBUILTIN;
>> +            if (CRASHDEBUG(8))
>> +                    error(INFO, "Setting readmem to "
>> +                            "read_memory_device/builtin\n");
>>              pc->readmem = read_memory_device;
>>              pc->writemem = write_memory_device;
>>              pc->live_memsrc = pc->memory_device;
>> diff --git a/a/main.c b/b/main.c
>> index ae8d933..5440c72 100755
>> --- a/a/main.c
>> +++ b/b/main.c
>> @@ -431,6 +431,9 @@ main(int argc, char **argv)
>>                              }
>>                              pc->flags |= DEVMEM;
>>                              pc->dumpfile = NULL;
>> +                            if (CRASHDEBUG(8))
>> +                                    error(INFO, "Setting readmem to "
>> +                                                    "read_dev_mem\n");
>>                              pc->readmem = read_dev_mem;
>>                              pc->writemem = write_dev_mem;
>>                              pc->live_memsrc = argv[optind];
>> @@ -443,6 +446,9 @@ main(int argc, char **argv)
>>                              }
>>                              pc->flags |= PROC_KCORE;
>>                              pc->dumpfile = NULL;
>> +                            if (CRASHDEBUG(8))
>> +                                    error(INFO, "Setting readmem to "
>> +                                                    "read_proc_kcore\n");
>>                              pc->readmem = read_proc_kcore;
>>                              pc->writemem = write_proc_kcore;
>>                              pc->live_memsrc = argv[optind];
>> @@ -457,9 +463,15 @@ main(int argc, char **argv)
>>                                  pc->dumpfile = argv[optind];
>>  
>>                              if (is_sadump_xen()) {
>> +                                    if (CRASHDEBUG(8))
>> +                                            error(INFO, "Setting readmem to 
>> "
>> +                                                            "read_kdump\n");
>>                                      pc->readmem = read_kdump;
>>                                      pc->writemem = write_kdump;
>>                              } else {
>> +                                    if (CRASHDEBUG(8))
>> +                                            error(INFO, "Setting readmem to 
>> "
>> +                                                            
>> "read_netdump\n");
>>                                      pc->readmem = read_netdump;
>>                                      pc->writemem = write_netdump;
>>                              }
>> @@ -472,6 +484,9 @@ main(int argc, char **argv)
>>                                  }
>>                                  pc->flags |= KDUMP;
>>                                  pc->dumpfile = argv[optind];
>> +                            if (CRASHDEBUG(8))
>> +                                    error(INFO, "Setting readmem to "
>> +                                            "read_kdump for KDUMP_LOCAL\n");
>>                                  pc->readmem = read_kdump;
>>                                  pc->writemem = write_kdump;
>>  
>> @@ -483,6 +498,9 @@ main(int argc, char **argv)
>>                                  }
>>                                  pc->flags |= KVMDUMP;
>>                                  pc->dumpfile = argv[optind];
>> +                            if (CRASHDEBUG(8))
>> +                                    error(INFO, "Setting readmem to "
>> +                                                    "read_kvmdump\n");
>>                                  pc->readmem = read_kvmdump;
>>                                  pc->writemem = write_kvmdump;
>>  
>> @@ -502,6 +520,9 @@ main(int argc, char **argv)
>>                                  }
>>                                  pc->flags |= XENDUMP;
>>                                  pc->dumpfile = argv[optind];
>> +                            if (CRASHDEBUG(8))
>> +                                    error(INFO, "Setting readmem to "
>> +                                                    "read_xendump\n");
>>                                  pc->readmem = read_xendump;
>>                                  pc->writemem = write_xendump;
>>  
>> @@ -518,6 +539,9 @@ main(int argc, char **argv)
>>                                  }
>>                                  pc->flags |= DISKDUMP;
>>                                  pc->dumpfile = argv[optind];
>> +                            if (CRASHDEBUG(8))
>> +                                    error(INFO, "Setting readmem to "
>> +                                                    "read_diskdump\n");
>>                                  pc->readmem = read_diskdump;
>>                                  pc->writemem = write_diskdump;
>>  
>> @@ -529,6 +553,9 @@ main(int argc, char **argv)
>>                                  }
>>                                  pc->flags |= LKCD;
>>                                  pc->dumpfile = argv[optind];
>> +                            if (CRASHDEBUG(8))
>> +                                    error(INFO, "Setting readmem to "
>> +                                                    "read_lkcddump\n");
>>                              pc->readmem = read_lkcd_dumpfile;
>>                              pc->writemem = write_lkcd_dumpfile;
>>  
>> @@ -540,6 +567,9 @@ main(int argc, char **argv)
>>                                  }
>>                              pc->flags |= MCLXCD;
>>                              pc->dumpfile = argv[optind];
>> +                            if (CRASHDEBUG(8))
>> +                                    error(INFO, "Setting readmem to "
>> +                                                    "read_mclxdump\n");
>>                              pc->readmem = read_mclx_dumpfile;
>>                              pc->writemem = write_mclx_dumpfile;
>>  
>> @@ -551,6 +581,9 @@ main(int argc, char **argv)
>>                                  }
>>                                  pc->flags |= S390D;
>>                                  pc->dumpfile = argv[optind];
>> +                            if (CRASHDEBUG(8))
>> +                                    error(INFO, "Setting readmem to "
>> +                                                    "read_s390_dumpfile\n");
>>                                  pc->readmem = read_s390_dumpfile;
>>                                  pc->writemem = write_s390_dumpfile;
>>  
>> @@ -563,6 +596,9 @@ main(int argc, char **argv)
>>                              }
>>                              pc->flags |= SADUMP;
>>                              pc->dumpfile = argv[optind];
>> +                            if (CRASHDEBUG(8))
>> +                                    error(INFO, "Setting readmem to "
>> +                                                    "read_sadump\n");
>>                              pc->readmem = read_sadump;
>>                              pc->writemem = write_sadump;
>>  
>> @@ -950,6 +986,8 @@ setup_environment(int argc, char **argv)
>>      pc->flags |= DATADEBUG;          /* default until unnecessary */
>>      pc->confd = -2;
>>      pc->machine_type = MACHINE_TYPE;
>> +    if (CRASHDEBUG(8))
>> +            error(INFO, "Setting readmem to default read_dev_mem\n");
>>      pc->readmem = read_dev_mem;      /* defaults until argv[] is parsed
>>      */
>>      pc->writemem = write_dev_mem;
>>      pc->memory_module = NULL;
>> @@ -1600,8 +1638,11 @@ check_xen_hyper(void)
>>  
>>  #ifdef XEN_HYPERVISOR_ARCH
>>      pc->cmd_table = xen_hyper_command_table;
>> -    if (pc->flags & XENDUMP)
>> +    if (pc->flags & XENDUMP) {
>> +            if (CRASHDEBUG(8))
>> +                    error(INFO, "Setting readmem to read_xendump_hyper\n");
>>              pc->readmem = read_xendump_hyper;
>> +    }
>>  #else
>>      error(FATAL, XEN_HYPERVISOR_NOT_SUPPORTED);
>>  #endif
>> diff --git a/a/memory.c b/b/memory.c
>> index 95eefc9..ac64767 100755
>> --- a/a/memory.c
>> +++ b/b/memory.c
>> @@ -2215,6 +2215,8 @@ switch_to_proc_kcore(void)
>>  
>>      pc->flags &= ~DEVMEM;
>>      pc->flags |= PROC_KCORE;
>> +    if (CRASHDEBUG(8))
>> +            error(INFO, "Setting readmem to read_proc_kcore for 
>> memory.c\n");
>>      pc->readmem = read_proc_kcore;
>>      pc->writemem = write_proc_kcore;
>>      pc->live_memsrc = "/proc/kcore";
>> diff --git a/a/netdump.c b/b/netdump.c
>> index 4011f36..28989c9 100644
>> --- a/a/netdump.c
>> +++ b/b/netdump.c
>> @@ -495,6 +495,10 @@ read_netdump(int fd, void *bufptr, int cnt,
>> ulong addr, physaddr_t paddr)
>>      off_t offset;
>>      struct pt_load_segment *pls;
>>      int i;
>> +
>> +    if (CRASHDEBUG(8))
>> +            error(INFO, "read_netdump(%d, %llx, %d, %lx, %llx)\n",
>> +                    fd, (ulonglong)bufptr, cnt, addr, (ulonglong)paddr);
>>  
>>      offset = 0;
>>  
>> @@ -509,6 +513,9 @@ read_netdump(int fd, void *bufptr, int cnt, ulong
>> addr, physaddr_t paddr)
>>      {
>>      case NETDUMP_ELF32:
>>              offset = (off_t)paddr + (off_t)nd->header_size;
>> +            if (CRASHDEBUG(8))
>> +                    error(INFO, "read NETDUMP_ELF32 for offset: %llx\n",
>> +                            (ulonglong)offset);
>>              break;
>>  
>>      case NETDUMP_ELF64:
>> @@ -517,6 +524,10 @@ read_netdump(int fd, void *bufptr, int cnt,
>> ulong addr, physaddr_t paddr)
>>              if (nd->num_pt_load_segments == 1) {
>>                      offset = (off_t)paddr + (off_t)nd->header_size -
>>                              (off_t)nd->pt_load_segments[0].phys_start;
>> +                    if (CRASHDEBUG(8))
>> +                            error(INFO, "read KDUMP or NETDUMP_ELF64 for "
>> +                                            "single segment: %llx\n",
>> +                                                    (ulonglong)offset);
>>                      break;
>>              }
>>  
>> @@ -526,11 +537,18 @@ read_netdump(int fd, void *bufptr, int cnt,
>> ulong addr, physaddr_t paddr)
>>                          (paddr < pls->phys_end)) {
>>                              offset = (off_t)(paddr - pls->phys_start) +
>>                                      pls->file_offset;
>> +                            if (CRASHDEBUG(8))
>> +                                    error(INFO, "read KDUMP or 
>> NETDUMP_ELF64 "
>> +                                            "for multi-segment: %llx\n",
>> +                                                    (ulonglong)offset);
>>                              break;
>>                      }
>>                      if (pls->zero_fill && (paddr >= pls->phys_end) &&
>>                          (paddr < pls->zero_fill)) {
>>                              memset(bufptr, 0, cnt);
>> +                            if (CRASHDEBUG(8))
>> +                                    error(INFO, "read KDUMP or 
>> NETDUMP_ELF64 "
>> +                                                    "for zero-fill\n");
>>                              return cnt;
>>                      }
>>              }
>> @@ -542,9 +560,15 @@ read_netdump(int fd, void *bufptr, int cnt,
>> ulong addr, physaddr_t paddr)
>>      }
>>  
>>      if (FLAT_FORMAT()) {
>> +            if (CRASHDEBUG(8))
>> +                    error(INFO, "read flat-format offset: %llx\n",
>> +                            (ulonglong)offset);
>>              if (!read_flattened_format(nd->ndfd, offset, bufptr, cnt))
>>                      return READ_ERROR;
>>      } else {
>> +            if (CRASHDEBUG(8))
>> +                    error(INFO, "seek and read offset: %llx\n",
>> +                            (ulonglong)offset);
>>              if (lseek(nd->ndfd, offset, SEEK_SET) == -1)
>>                      return SEEK_ERROR;
>>              if (read(nd->ndfd, bufptr, cnt) != cnt)
>> @@ -2618,6 +2642,9 @@ get_kdump_panic_task(void)
>>  int
>>  read_kdump(int fd, void *bufptr, int cnt, ulong addr, physaddr_t
>>  paddr)
>>  {
>> +    if (CRASHDEBUG(8))
>> +            error(INFO, "read_kdump for: virt=%lx phys=%llx\n",
>> +                            addr, (ulonglong)paddr);
>>      if (XEN_CORE_DUMPFILE() && !XEN_HYPER_MODE()) {
>>              if (!(nd->xen_kdump_data->flags & KDUMP_P2M_INIT)) {
>>                      if (!machdep->xen_kdump_p2m_create)
>> @@ -2640,6 +2667,10 @@ read_kdump(int fd, void *bufptr, int cnt,
>> ulong addr, physaddr_t paddr)
>>                      return READ_ERROR;
>>      }
>>  
>> +    if (CRASHDEBUG(8))
>> +            error(INFO, "read_kdump trying read_netdump for: virt=%lx "
>> +                                    "phys=%llx\n",
>> +                            addr, (ulonglong)paddr);
>>      return read_netdump(fd, bufptr, cnt, addr, paddr);
>>  }
>>  
>> diff --git a/a/remote.c b/b/remote.c
>> index a06c14b..d84d556 100755
>> --- a/a/remote.c
>> +++ b/b/remote.c
>> @@ -2244,6 +2244,8 @@ remote_fd_init(void)
>>               *  if no remote dumpfile name was entered.  If it is
>>               /dev/mem,
>>               *  then also go get the remote /proc/version.
>>               */
>> +            if (CRASHDEBUG(8))
>> +                    error(INFO, "Setting readmem to read_daemon\n");
>>              pc->readmem = read_daemon;
>>  
>>              if (!pc->server_memsrc)
>> diff --git a/a/x86.c b/b/x86.c
>> index df91110..f166a02 100755
>> --- a/a/x86.c
>> +++ b/b/x86.c
>> @@ -4390,6 +4390,8 @@ x86_xen_kdump_p2m_create(struct xen_kdump_data
>> *xkd)
>>       *  Temporarily read physical (machine) addresses from vmcore by
>>       *  going directly to read_netdump() instead of via read_kdump().
>>       */
>> +    if (CRASHDEBUG(8))
>> +            error(INFO, "Setting readmem to read_netdump for x86\n");
>>      pc->readmem = read_netdump;
>>  
>>      if (xkd->flags & KDUMP_CR3)
>> @@ -4467,6 +4469,8 @@ x86_xen_kdump_p2m_create(struct xen_kdump_data
>> *xkd)
>>                  fprintf(fp, "\n");
>>          }
>>  
>> +    if (CRASHDEBUG(8))
>> +            error(INFO, "Setting readmem to read_kdump for x86\n");
>>      pc->readmem = read_kdump;
>>      return TRUE;
>>  
>> @@ -4553,6 +4557,9 @@ use_cr3:
>>  
>>          machdep->last_ptbl_read = 0;
>>          machdep->last_pmd_read = 0;
>> +    if (CRASHDEBUG(8))
>> +            error(INFO, "Setting readmem to read_kdump for x86 and "
>> +                                    "use cr3\n");
>>      pc->readmem = read_kdump;
>>  
>>      return TRUE;
>> diff --git a/a/x86_64.c b/b/x86_64.c
>> index 689317f..26fb397 100755
>> --- a/a/x86_64.c
>> +++ b/b/x86_64.c
>> @@ -5398,6 +5398,8 @@ x86_64_xen_kdump_p2m_create(struct
>> xen_kdump_data *xkd)
>>           *  Temporarily read physical (machine) addresses from
>>           vmcore by
>>           *  going directly to read_netdump() instead of via
>>           read_kdump().
>>           */
>> +    if (CRASHDEBUG(8))
>> +            error(INFO, "Setting readmem to read_netdump for x86_64\n");
>>          pc->readmem = read_netdump;
>>  
>>          if (xkd->flags & KDUMP_CR3)
>> @@ -5458,6 +5460,8 @@ x86_64_xen_kdump_p2m_create(struct
>> xen_kdump_data *xkd)
>>              fprintf(fp, "\n");
>>      }
>>  
>> +    if (CRASHDEBUG(8))
>> +            error(INFO, "Setting readmem to read_kdump for x86_64\n");
>>          pc->readmem = read_kdump;
>>      return TRUE;
>>  
>> @@ -5524,6 +5528,9 @@ use_cr3:
>>      machdep->last_pgd_read = 0;
>>          machdep->last_ptbl_read = 0;
>>          machdep->last_pmd_read = 0;
>> +    if (CRASHDEBUG(8))
>> +            error(INFO, "Setting readmem to read_kdump for x86_64 and "
>> +                            "using cr3\n");
>>          pc->readmem = read_kdump;
>>  
>>          return TRUE;
>> 
>> 
>> --
>> Crash-utility mailing list
>> [email protected]
>> https://www.redhat.com/mailman/listinfo/crash-utility
>> 



--
Crash-utility mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/crash-utility

Reply via email to