コード例 #1
0
/**
 * Read logpack header sector from log device.
 *
 * @fd log device fd opened.
 * @super_sectp super sector.
 * @lsid logpack lsid to read.
 * @logh_sect buffer to store logpack header data.
 *   This allocated size must be sector size.
 * @salt log checksum salt.
 *
 * RETURN:
 *   ture in success, or false.
 */
bool read_logpack_header_from_wldev(
	int fd, const struct walb_super_sector* super_sectp,
	u64 lsid, u32 salt, struct sector_data *logh_sect)
{
	/* calc offset in the ring buffer */
	u64 ring_buffer_offset = get_ring_buffer_offset_2(super_sectp);
	u64 ring_buffer_size = super_sectp->ring_buffer_size;
	u64 off = ring_buffer_offset + lsid % ring_buffer_size;
	struct walb_logpack_header *logh = get_logpack_header(logh_sect);

	/* read sector */
	if (!sector_read(fd, off, logh_sect)) {
		LOGe("read logpack header (lsid %"PRIu64") failed.\n", lsid);
		return false;
	}

	/* check lsid */
	if (lsid != logh->logpack_lsid) {
		LOGe("lsid (given %"PRIu64" read %"PRIu64") is invalid.\n",
			lsid, logh->logpack_lsid);
		return false;
	}
	if (!is_valid_logpack_header_with_checksum(
			logh, super_sectp->physical_bs, salt)) {
		LOGe("check logpack header failed.\n");
		return false;
	}
	return true;
}
コード例 #2
0
ファイル: walb_util.c プロジェクト: herumi/walb
/**
 * Print super sector for debug.
 * This will be obsolute. Use print_super_sector() instead.
 */
void print_super_sector_raw(const struct walb_super_sector* super_sect)
{
	ASSERT(super_sect);
	printf("checksum: %08x\n"
		"logical_bs: %u\n"
		"physical_bs: %u\n"
		"metadata_size: %u\n"
		"log_checksum_salt: %"PRIu32"\n",
		super_sect->checksum,
		super_sect->logical_bs,
		super_sect->physical_bs,
		super_sect->metadata_size,
		super_sect->log_checksum_salt);
	printf("uuid: ");
	print_uuid(super_sect->uuid);
	printf("\n"
		"name: \"%s\"\n"
		"ring_buffer_size: %lu\n"
		"oldest_lsid: %lu\n"
		"written_lsid: %lu\n"
		"device_size: %lu\n",
		super_sect->name,
		super_sect->ring_buffer_size,
		super_sect->oldest_lsid,
		super_sect->written_lsid,
		super_sect->device_size);
	printf("ring_buffer_offset: %lu\n",
		get_ring_buffer_offset_2(super_sect));
}