Lines Matching refs:jhdr

201 	if (jnl->jhdr->magic != JOURNAL_HEADER_MAGIC) {			\
202 panic("%s:%d: jhdr magic corrupted (0x%x != 0x%x)\n", \
203 __FILE__, __LINE__, jnl->jhdr->magic, JOURNAL_HEADER_MAGIC); \
205 if ( jnl->jhdr->start <= 0 \
206 || jnl->jhdr->start > jnl->jhdr->size) { \
207 panic("%s:%d: jhdr start looks bad (0x%llx max size 0x%llx)\n", \
208 __FILE__, __LINE__, jnl->jhdr->start, jnl->jhdr->size); \
210 if ( jnl->jhdr->end <= 0 \
211 || jnl->jhdr->end > jnl->jhdr->size) { \
212 panic("%s:%d: jhdr end looks bad (0x%llx max size 0x%llx)\n", \
213 __FILE__, __LINE__, jnl->jhdr->end, jnl->jhdr->size); \
237 if (tr->blhdr && (tr->blhdr->max_blocks <= 0 || tr->blhdr->max_blocks > (tr->jnl->jhdr->size/tr->jnl->jhdr->jhdr_size))) { \
343 if (*offset < 0 || *offset > jnl->jhdr->size) {
344 panic("jnl: do_jnl_io: bad offset 0x%llx (max 0x%llx)\n", *offset, jnl->jhdr->size);
357 if (*offset + (off_t)curlen > jnl->jhdr->size && *offset != 0 && jnl->jhdr->size != 0) {
358 if (*offset == jnl->jhdr->size) {
359 *offset = jnl->jhdr->jhdr_size;
361 curlen = (off_t)jnl->jhdr->size - *offset;
402 buf_setblkno(bp, (daddr64_t) ((jnl->jdev_offset + *offset) / (off_t)jnl->jhdr->jhdr_size));
403 buf_setlblkno(bp, (daddr64_t) ((jnl->jdev_offset + *offset) / (off_t)jnl->jhdr->jhdr_size));
429 if (*offset >= jnl->jhdr->size) {
430 *offset = jnl->jhdr->jhdr_size;
497 jnl->jhdr->sequence_num = sequence_num;
498 jnl->jhdr->checksum = 0;
499 jnl->jhdr->checksum = calc_checksum((char *)jnl->jhdr, JOURNAL_HEADER_CKSUM_SIZE);
501 if (do_journal_io(jnl, &jhdr_offset, jnl->header_buf, jnl->jhdr->jhdr_size, JNL_WRITE|JNL_HEADER) != (size_t)jnl->jhdr->jhdr_size) {
748 jnl->jhdr->magic = SWAP32(jnl->jhdr->magic);
749 jnl->jhdr->endian = SWAP32(jnl->jhdr->endian);
750 jnl->jhdr->start = SWAP64(jnl->jhdr->start);
751 jnl->jhdr->end = SWAP64(jnl->jhdr->end);
752 jnl->jhdr->size = SWAP64(jnl->jhdr->size);
753 jnl->jhdr->blhdr_size = SWAP32(jnl->jhdr->blhdr_size);
754 jnl->jhdr->checksum = SWAP32(jnl->jhdr->checksum);
755 jnl->jhdr->jhdr_size = SWAP32(jnl->jhdr->jhdr_size);
756 jnl->jhdr->sequence_num = SWAP32(jnl->jhdr->sequence_num);
770 if (blhdr->num_blocks >= ((jnl->jhdr->blhdr_size / sizeof(block_info)) - 1)) {
771 printf("jnl: %s: blhdr num blocks looks suspicious (%d / blhdr size %d). not swapping.\n", jnl->jdev_name, blhdr->num_blocks, jnl->jhdr->blhdr_size);
950 if ((off_t)offset >= jnl->jhdr->size) {
951 offset = jnl->jhdr->jhdr_size + (offset - jnl->jhdr->size);
969 size_t jhdr_size = jnl->jhdr->jhdr_size, new_offset;
1036 if ((off_t)new_offset >= jnl->jhdr->size) {
1037 new_offset = jhdr_size + (new_offset - jnl->jhdr->size);
1127 if (jnl->jhdr->start == jnl->jhdr->size) {
1128 jnl->jhdr->start = jnl->jhdr->jhdr_size;
1130 if (jnl->jhdr->end == jnl->jhdr->size) {
1131 jnl->jhdr->end = jnl->jhdr->jhdr_size;
1134 if (jnl->jhdr->start == jnl->jhdr->end) {
1138 orig_jnl_start = jnl->jhdr->start;
1141 if (kmem_alloc_kobject(kernel_map, (vm_offset_t *)&buff, jnl->jhdr->blhdr_size)) {
1143 jnl->jdev_name, jnl->jhdr->blhdr_size);
1163 jnl->jdev_name, jnl->jhdr->start, jnl->jhdr->end, jnl->jdev_offset);
1165 while (check_past_jnl_end || jnl->jhdr->start != jnl->jhdr->end) {
1166 offset = blhdr_offset = jnl->jhdr->start;
1167 ret = read_journal_data(jnl, &offset, buff, jnl->jhdr->blhdr_size);
1168 if (ret != (size_t)jnl->jhdr->blhdr_size) {
1198 if (blhdr_offset != jnl->jhdr->end) {
1203 jnl->jhdr->end = blhdr_offset;
1224 txn_start_offset = jnl->jhdr->end = blhdr_offset;
1240 if (blhdr_offset >= jnl->jhdr->end && jnl->jhdr->start <= jnl->jhdr->end) {
1244 jnl->jdev_name, jnl->jhdr->start, jnl->jhdr->end);
1245 if (jnl->jhdr->start != jnl->jhdr->end) {
1246 jnl->jhdr->start = jnl->jhdr->end;
1253 if ( blhdr->max_blocks <= 0 || blhdr->max_blocks > (jnl->jhdr->size/jnl->jhdr->jhdr_size)
1288 // blhdr->num_blocks-1, jnl->jhdr->start);
1350 if (offset >= jnl->jhdr->size) {
1351 offset = jnl->jhdr->jhdr_size + (offset - jnl->jhdr->size);
1381 jnl->jhdr->start = orig_jnl_start;
1382 jnl->jhdr->end = txn_start_offset;
1385 printf("jnl: %s: restarting journal replay (%lld - %lld)!\n", jnl->jdev_name, jnl->jhdr->start, jnl->jhdr->end);
1389 jnl->jhdr->start += blhdr->bytes_used;
1390 if (jnl->jhdr->start >= jnl->jhdr->size) {
1392 jnl->jhdr->start = (jnl->jhdr->start % jnl->jhdr->size) + jnl->jhdr->jhdr_size;
1395 if (jnl->jhdr->start == jnl->jhdr->end) {
1400 if (jnl->jhdr->start != jnl->jhdr->end) {
1401 printf("jnl: %s: start %lld != end %lld. resetting end.\n", jnl->jdev_name, jnl->jhdr->start, jnl->jhdr->end);
1402 jnl->jhdr->end = jnl->jhdr->start;
1459 if (write_journal_header(jnl, 1, jnl->jhdr->sequence_num) != 0) {
1475 kmem_free(kernel_map, (vm_offset_t)buff, jnl->jhdr->blhdr_size);
1485 kmem_free(kernel_map, (vm_offset_t)buff, jnl->jhdr->blhdr_size);
1500 // size of the blhdr. It assumes that jnl->jhdr->size
1501 // and jnl->jhdr->jhdr_size are already valid.
1528 if (tbuffer_size < jnl->jhdr->blhdr_size * 2) {
1529 tbuffer_size = jnl->jhdr->blhdr_size * 2;
1532 if ((tbuffer_size % jnl->jhdr->jhdr_size) != 0) {
1533 tbuffer_size -= (tbuffer_size % jnl->jhdr->jhdr_size);
1539 if (jnl->tbuffer_size > (jnl->jhdr->size / 2)) {
1540 jnl->tbuffer_size = (jnl->jhdr->size / 2);
1547 jnl->jhdr->blhdr_size = (jnl->tbuffer_size / jnl->jhdr->jhdr_size) * sizeof(block_info);
1548 if (jnl->jhdr->blhdr_size < phys_blksz) {
1549 jnl->jhdr->blhdr_size = phys_blksz;
1550 } else if ((jnl->jhdr->blhdr_size % phys_blksz) != 0) {
1552 jnl->jhdr->blhdr_size = (jnl->jhdr->blhdr_size + (phys_blksz - 1)) & ~(phys_blksz - 1);
1724 jnl->jhdr = (journal_header *)jnl->header_buf;
1725 memset(jnl->jhdr, 0, sizeof(journal_header));
1728 jnl->jhdr->jhdr_size = phys_blksz;
1746 if ( read_journal_header(jnl, jnl->jhdr, phys_blksz) == phys_blksz
1747 && jnl->jhdr->magic == JOURNAL_HEADER_MAGIC
1748 && jnl->jhdr->sequence_num != 0) {
1750 new_txn_base = (jnl->jhdr->sequence_num + (journal_size / phys_blksz) + (random() % 16384)) & 0x00ffffff;
1751 printf("jnl: %s: create: avoiding old sequence number 0x%x (0x%x)\n", jdev_name, jnl->jhdr->sequence_num, new_txn_base);
1773 jnl->jhdr->magic = JOURNAL_HEADER_MAGIC;
1774 jnl->jhdr->endian = ENDIAN_MAGIC;
1775 jnl->jhdr->start = phys_blksz; // start at block #1, block #0 is for the jhdr itself
1776 jnl->jhdr->end = phys_blksz;
1777 jnl->jhdr->size = journal_size;
1778 jnl->jhdr->jhdr_size = phys_blksz;
1781 jnl->active_start = jnl->jhdr->start;
1784 // jnl->jhdr->start = jnl->jhdr->size - (phys_blksz*3);
1785 // jnl->jhdr->end = jnl->jhdr->size - (phys_blksz*3);
1787 jnl->jhdr->sequence_num = new_txn_base;
1799 jnl->sequence_num = jnl->jhdr->sequence_num;
1801 if (write_journal_header(jnl, 1, jnl->jhdr->sequence_num) != 0) {
1812 jnl->jhdr = NULL;
1902 jnl->jhdr = (journal_header *)jnl->header_buf;
1903 memset(jnl->jhdr, 0, sizeof(journal_header));
1906 jnl->jhdr->jhdr_size = phys_blksz;
1908 if (read_journal_header(jnl, jnl->jhdr, phys_blksz) != phys_blksz) {
1914 orig_checksum = jnl->jhdr->checksum;
1915 jnl->jhdr->checksum = 0;
1917 if (jnl->jhdr->magic == SWAP32(JOURNAL_HEADER_MAGIC)) {
1920 checksum = calc_checksum((char *)jnl->jhdr, JOURNAL_HEADER_CKSUM_SIZE);
1924 checksum = calc_checksum((char *)jnl->jhdr, JOURNAL_HEADER_CKSUM_SIZE);
1927 if (jnl->jhdr->magic != JOURNAL_HEADER_MAGIC && jnl->jhdr->magic != OLD_JOURNAL_HEADER_MAGIC) {
1929 jnl->jdev_name, jnl->jhdr->magic, JOURNAL_HEADER_MAGIC);
1934 if (jnl->jhdr->magic == JOURNAL_HEADER_MAGIC) {
1945 if (jnl->jhdr->magic == OLD_JOURNAL_HEADER_MAGIC) {
1946 jnl->jhdr->magic = JOURNAL_HEADER_MAGIC;
1949 if (phys_blksz != (size_t)jnl->jhdr->jhdr_size && jnl->jhdr->jhdr_size != 0) {
1961 phys_blksz = jnl->jhdr->jhdr_size;
1967 if ( jnl->jhdr->start <= 0
1968 || jnl->jhdr->start > jnl->jhdr->size
1969 || jnl->jhdr->start > 1024*1024*1024) {
1970 printf("jnl: %s: open: jhdr start looks bad (0x%llx max size 0x%llx)\n",
1971 jdev_name, jnl->jhdr->start, jnl->jhdr->size);
1975 if ( jnl->jhdr->end <= 0
1976 || jnl->jhdr->end > jnl->jhdr->size
1977 || jnl->jhdr->end > 1024*1024*1024) {
1978 printf("jnl: %s: open: jhdr end looks bad (0x%llx max size 0x%llx)\n",
1979 jdev_name, jnl->jhdr->end, jnl->jhdr->size);
1983 if (jnl->jhdr->size < (256*1024) || jnl->jhdr->size > 1024*1024*1024) {
1984 printf("jnl: %s: open: jhdr size looks bad (0x%llx)\n", jdev_name, jnl->jhdr->size);
1993 // XXXdbg if ((jnl->jhdr->start % jnl->jhdr->jhdr_size) != 0) {
1994 if ((jnl->jhdr->start % 512) != 0) {
1996 jdev_name, jnl->jhdr->start);
2000 //XXXdbg if ((jnl->jhdr->end % jnl->jhdr->jhdr_size) != 0) {
2001 if ((jnl->jhdr->end % 512) != 0) {
2003 jdev_name, jnl->jhdr->end, jnl->jhdr->jhdr_size);
2010 jdev_name, jnl, jnl->jhdr->start, jnl->jhdr->end);
2011 jnl->jhdr->start = jnl->jhdr->end;
2018 * When we get here, we know that the journal is empty (jnl->jhdr->start ==
2019 * jnl->jhdr->end). If the device's logical block size was different from
2035 jnl->jhdr->jhdr_size = phys_blksz;
2036 jnl->jhdr->start = phys_blksz;
2037 jnl->jhdr->end = phys_blksz;
2038 jnl->jhdr->sequence_num = (jnl->jhdr->sequence_num +
2042 if (write_journal_header(jnl, 1, jnl->jhdr->sequence_num)) {
2049 jnl->active_start = jnl->jhdr->start;
2050 jnl->sequence_num = jnl->jhdr->sequence_num;
2056 if ((off_t)(jnl->jhdr->blhdr_size/sizeof(block_info)-1) > (jnl->jhdr->size/jnl->jhdr->jhdr_size)) {
2057 printf("jnl: %s: open: jhdr size and blhdr size are not compatible (0x%llx, %d, %d)\n", jdev_name, jnl->jhdr->size,
2058 jnl->jhdr->blhdr_size, jnl->jhdr->jhdr_size);
2141 jnl.jhdr = (journal_header *)jnl.header_buf;
2142 memset(jnl.jhdr, 0, sizeof(journal_header));
2149 jnl.jhdr->jhdr_size = phys_blksz;
2151 if (read_journal_header(&jnl, jnl.jhdr, phys_blksz) != (unsigned)phys_blksz) {
2158 orig_checksum = jnl.jhdr->checksum;
2159 jnl.jhdr->checksum = 0;
2161 if (jnl.jhdr->magic == SWAP32(JOURNAL_HEADER_MAGIC)) {
2164 checksum = calc_checksum((char *)jnl.jhdr, JOURNAL_HEADER_CKSUM_SIZE);
2168 checksum = calc_checksum((char *)jnl.jhdr, JOURNAL_HEADER_CKSUM_SIZE);
2171 if (jnl.jhdr->magic != JOURNAL_HEADER_MAGIC && jnl.jhdr->magic != OLD_JOURNAL_HEADER_MAGIC) {
2173 jdev_name, jnl.jhdr->magic, JOURNAL_HEADER_MAGIC);
2188 if (jnl.jhdr->start == jnl.jhdr->end) {
2250 //start = &jnl->jhdr->start;
2252 end = &jnl->jhdr->end;
2268 jnl->jhdr->start = jnl->active_start;
2299 jnl->jhdr = (void *)0xbeefbabe;
2321 printf(" magic: 0x%.8x\n", jnl->jhdr->magic);
2322 printf(" start: 0x%.8llx\n", jnl->jhdr->start);
2323 printf(" end: 0x%.8llx\n", jnl->jhdr->end);
2324 printf(" size: 0x%.8llx\n", jnl->jhdr->size);
2325 printf(" blhdr size: %d\n", jnl->jhdr->blhdr_size);
2326 printf(" jhdr size: %d\n", jnl->jhdr->jhdr_size);
2327 printf(" chksum: 0x%.8x\n", jnl->jhdr->checksum);
2342 if (jnl->jhdr->start < jnl->jhdr->end) {
2343 free_space_offset = jnl->jhdr->size - (jnl->jhdr->end - jnl->jhdr->start) - jnl->jhdr->jhdr_size;
2344 } else if (jnl->jhdr->start > jnl->jhdr->end) {
2345 free_space_offset = jnl->jhdr->start - jnl->jhdr->end;
2348 free_space_offset = jnl->jhdr->size - jnl->jhdr->jhdr_size;
2382 jnl->jhdr->start, jnl->jhdr->end, free_space(jnl), jnl->active_start);
2390 // here's where we lazily bump up jnl->jhdr->start. we'll consume
2419 jnl->jhdr->start = jnl->old_start[i];
2442 // bump the jhdr->start to be the same as active_start
2445 // this then jhdr->start would never get updated and we
2449 jnl->jhdr->start = jnl->active_start;
2510 memset(tr->tbuffer + BLHDR_CHECKSUM_SIZE, 0x5a, jnl->jhdr->blhdr_size - BLHDR_CHECKSUM_SIZE);
2513 tr->blhdr->max_blocks = (jnl->jhdr->blhdr_size / sizeof(block_info)) - 1;
2515 tr->blhdr->bytes_used = jnl->jhdr->blhdr_size;
2520 tr->total_bytes = jnl->jhdr->blhdr_size;
2565 // as well as updating jnl->jhdr->start
2633 if ((buf_size(bp) % jnl->jhdr->jhdr_size) != 0) {
2638 } else if (phys_blksz != (uint32_t)jnl->jhdr->jhdr_size) {
2641 phys_blksz, buf_size(bp), jnl->jhdr->jhdr_size);
2646 } else if (phys_blksz < (uint32_t)jnl->jhdr->jhdr_size) {
2647 jnl->jhdr->jhdr_size = phys_blksz;
2649 // the phys_blksz is now larger... need to realloc the jhdr
2653 jnl->jdev_name, jnl->header_buf_size, jnl->jhdr->jhdr_size, phys_blksz);
2656 jnl->jdev_name, jnl->jhdr->jhdr_size, phys_blksz);
2665 jnl->jhdr = (journal_header *)jnl->header_buf;
2666 jnl->jhdr->jhdr_size = phys_blksz;
2675 buf_size(bp), jnl->jhdr->jhdr_size);
2681 if (tr->total_bytes+buf_size(bp) >= (jnl->jhdr->size - jnl->jhdr->jhdr_size)) {
2683 tr->total_bytes, (tr->jnl->jhdr->size - jnl->jhdr->jhdr_size), buf_size(bp), tr, bp);
2810 tbuffer_offset = jnl->jhdr->blhdr_size;
2855 memset(nblhdr + BLHDR_CHECKSUM_SIZE, 0x5a, jnl->jhdr->blhdr_size - BLHDR_CHECKSUM_SIZE);
2858 nblhdr->max_blocks = (jnl->jhdr->blhdr_size / sizeof(block_info)) - 1;
2860 nblhdr->bytes_used = jnl->jhdr->blhdr_size;
2864 tr->total_bytes += jnl->jhdr->blhdr_size;
2871 tbuffer_offset = jnl->jhdr->blhdr_size;
3744 if (tr->total_bytes == jnl->jhdr->blhdr_size) {
3832 if (jnl->jhdr->end <= 0 || jnl->jhdr->end > jnl->jhdr->size) {
3834 jnl->jhdr->end, jnl->jhdr->size);
3852 tr->journal_start = jnl->jhdr->end;
3871 tbuffer_offset = jnl->jhdr->blhdr_size;
4045 end = jnl->jhdr->end;
4073 tbuffer_offset = jnl->jhdr->blhdr_size;
4185 jnl->jhdr->end = end; // update where the journal now ends
4217 tr->num_flushed = tr->num_blhdrs * jnl->jhdr->blhdr_size;
4721 if ((offset % jnl->jhdr->jhdr_size) != 0) {
4723 jnl->jdev_name, offset, jnl->jhdr->jhdr_size);
4726 if ((journal_size % jnl->jhdr->jhdr_size) != 0) {
4728 jnl->jdev_name, journal_size, jnl->jhdr->jhdr_size);
4745 size_up_tbuffer(jnl, tbuffer_size, jnl->jhdr->jhdr_size);
4781 jnl->jhdr->start = jnl->jhdr->end = jnl->jhdr->jhdr_size;
4782 jnl->jhdr->size = journal_size;
4783 jnl->active_start = jnl->jhdr->start;