mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
zfcpdump: reuse SCSI struct definitions from boot_defs.h
To remove duplication of definitions. Signed-off-by: Alexander Egorenkov <egorenar@linux.ibm.com> Reviewed-by: Mikhail Zaslonko <zaslonko@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This commit is contained in:
committed by
Jan Höppner
parent
561883b1d8
commit
1ae4fd18fe
@@ -35,6 +35,7 @@
|
||||
|
||||
#include "lib/util_base.h"
|
||||
#include "lib/zt_common.h"
|
||||
#include "boot/boot_defs.h"
|
||||
|
||||
#include "zfcpdump.h"
|
||||
|
||||
@@ -49,57 +50,6 @@ struct copy_table_entry {
|
||||
unsigned long off;
|
||||
};
|
||||
|
||||
/*
|
||||
* Single volume SCSI dump superblock
|
||||
*/
|
||||
struct scsi_dump_sb {
|
||||
uint64_t magic;
|
||||
uint64_t version;
|
||||
uint64_t part_start;
|
||||
uint64_t part_size;
|
||||
uint64_t dump_off;
|
||||
uint64_t dump_size;
|
||||
uint64_t csum_off;
|
||||
uint64_t csum_size;
|
||||
uint64_t csum;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* Layout of SCSI disk block pointer
|
||||
*/
|
||||
struct linear_blockptr {
|
||||
uint64_t blockno;
|
||||
uint16_t size;
|
||||
uint16_t blockct;
|
||||
uint8_t reserved[4];
|
||||
} __packed;
|
||||
|
||||
/* From boot.h in zipl */
|
||||
struct boot_info {
|
||||
char magic[4];
|
||||
uint8_t version;
|
||||
uint8_t bp_type;
|
||||
uint8_t dev_type;
|
||||
uint8_t flags;
|
||||
uint64_t sb_off;
|
||||
} __packed;
|
||||
|
||||
/* From install.c in zipl */
|
||||
struct scsi_mbr {
|
||||
uint8_t magic[4];
|
||||
uint32_t version_id;
|
||||
uint8_t reserved[8];
|
||||
struct linear_blockptr lin;
|
||||
uint8_t reserverd[0x50];
|
||||
struct boot_info boot_info;
|
||||
} __packed;
|
||||
|
||||
/* From boot.h in zipl */
|
||||
#define BOOT_INFO_VERSION 1
|
||||
#define BOOT_INFO_MAGIC "zIPL"
|
||||
#define BOOT_INFO_DEV_TYPE_SCSI 0x02
|
||||
#define BOOT_INFO_BP_TYPE_DUMP 0x01
|
||||
|
||||
/*
|
||||
* Globals
|
||||
*/
|
||||
@@ -160,7 +110,7 @@ static int csum_get(uint64_t off, uint64_t len, uint64_t *result)
|
||||
PRINT_ERR("Error reading checksum from disk\n");
|
||||
return -1;
|
||||
}
|
||||
*result = (uint64_t)csum_partial(&buf, len, 0x12345678);
|
||||
*result = (uint64_t)csum_partial(&buf, len, SCSI_DUMP_SB_SEED);
|
||||
PRINT_TRACE("Got crc %llx\n", (unsigned long long) *result);
|
||||
return 0;
|
||||
}
|
||||
@@ -171,12 +121,12 @@ static int csum_get(uint64_t off, uint64_t len, uint64_t *result)
|
||||
static int csum_update(int fd)
|
||||
{
|
||||
/* Write crc into zfcpdump header */
|
||||
if (csum_get(dump_sb.part_start + dump_sb.csum_off,
|
||||
if (csum_get(dump_sb.part_start + dump_sb.csum_offset,
|
||||
dump_sb.csum_size, &dump_sb.csum)) {
|
||||
PRINT_ERR("Get check sum failed\n");
|
||||
return -1;
|
||||
}
|
||||
if (lseek(fd, mbr.boot_info.sb_off, SEEK_SET) < 0) {
|
||||
if (lseek(fd, mbr.boot_info.bp.dump.param.scsi.block, SEEK_SET) < 0) {
|
||||
PRINT_PERR("Seek failed\n");
|
||||
return -1;
|
||||
}
|
||||
@@ -406,11 +356,11 @@ static int get_scsi_dump_params(void)
|
||||
return -1;
|
||||
}
|
||||
if (pread_file(DEV_SCSI, (char *)&dump_sb, sizeof(dump_sb),
|
||||
mbr.boot_info.sb_off) < 0) {
|
||||
mbr.boot_info.bp.dump.param.scsi.block) < 0) {
|
||||
PRINT_ERR("Cannot read superblock\n");
|
||||
return -1;
|
||||
}
|
||||
if (dump_sb.magic != 0x5a46435044554d50ULL) { /* ZFCPDUMP */
|
||||
if (dump_sb.magic != SCSI_DUMP_SB_MAGIC) {
|
||||
PRINT_ERR("Dump data block wrong magic\n");
|
||||
return -1;
|
||||
}
|
||||
@@ -419,7 +369,7 @@ static int get_scsi_dump_params(void)
|
||||
PRINT_ERR("Specified dump partition not found\n");
|
||||
return -1;
|
||||
}
|
||||
if (csum_get(dump_sb.part_start + dump_sb.csum_off,
|
||||
if (csum_get(dump_sb.part_start + dump_sb.csum_offset,
|
||||
dump_sb.csum_size, &csum)) {
|
||||
PRINT_ERR("Getting Checksum failed\n");
|
||||
return -1;
|
||||
@@ -451,6 +401,6 @@ int main(int UNUSED(argc), char *UNUSED(argv[]))
|
||||
print_newline();
|
||||
PRINT("Writing dump:\n");
|
||||
rc = copy_dump("/proc/vmcore", DEV_SCSI,
|
||||
dump_sb.part_start + dump_sb.dump_off);
|
||||
dump_sb.part_start + dump_sb.dump_offset);
|
||||
return terminate(rc);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user