bool xfs_log_check_lsn( struct xfs_mount *mp, xfs_lsn_t lsn) { int cycle = CYCLE_LSN(lsn); int block = BLOCK_LSN(lsn); int max_cycle; int max_block; if (lsn == NULLCOMMITLSN) return true; pthread_mutex_lock(&libxfs_max_lsn_lock); max_cycle = CYCLE_LSN(libxfs_max_lsn); max_block = BLOCK_LSN(libxfs_max_lsn); if ((cycle > max_cycle) || (cycle == max_cycle && block > max_block)) libxfs_max_lsn = lsn; pthread_mutex_unlock(&libxfs_max_lsn_lock); return true; }
int xlog_header_check_recover(xfs_mount_t *mp, xlog_rec_header_t *head) { if (print_record_header) printf(_("\nLOG REC AT LSN cycle %d block %d (0x%x, 0x%x)\n"), CYCLE_LSN(be64_to_cpu(head->h_lsn)), BLOCK_LSN(be64_to_cpu(head->h_lsn)), CYCLE_LSN(be64_to_cpu(head->h_lsn)), BLOCK_LSN(be64_to_cpu(head->h_lsn))); if (be32_to_cpu(head->h_magicno) != XLOG_HEADER_MAGIC_NUM) { printf(_("* ERROR: bad magic number in log header: 0x%x\n"), be32_to_cpu(head->h_magicno)); } else if (header_check_uuid(mp, head)) { /* failed - fall through */ } else if (be32_to_cpu(head->h_fmt) != XLOG_FMT) { printf(_("* ERROR: log format incompatible (log=%d, ours=%d)\n"), be32_to_cpu(head->h_fmt), XLOG_FMT); } else { /* everything is ok */ return 0; } /* bail out now or just carry on regardless */ if (print_exit) xlog_exit(_("Bad log")); return 0; }
void print_lsn(char *string, __be64 *lsn) { printf("%s: %u,%u", string, CYCLE_LSN(be64_to_cpu(*lsn)), BLOCK_LSN(be64_to_cpu(*lsn))); }