+ BLANK_LINE();
+ CHECK_STRUCT(llog_orphan_rec);
+ CHECK_MEMBER(llog_orphan_rec, lor_hdr);
+ CHECK_MEMBER(llog_orphan_rec, lor_oid);
+ CHECK_MEMBER(llog_orphan_rec, lor_ogen);
+ CHECK_MEMBER(llog_orphan_rec, padding);
+ CHECK_MEMBER(llog_orphan_rec, lor_tail);
+}
+
+static void
+check_llog_unlink_rec(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(llog_unlink_rec);
+ CHECK_MEMBER(llog_unlink_rec, lur_hdr);
+ CHECK_MEMBER(llog_unlink_rec, lur_oid);
+ CHECK_MEMBER(llog_unlink_rec, lur_ogen);
+ CHECK_MEMBER(llog_unlink_rec, padding);
+ CHECK_MEMBER(llog_unlink_rec, lur_tail);
+}
+
+static void
+check_llog_setattr_rec(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(llog_setattr_rec);
+ CHECK_MEMBER(llog_setattr_rec, lsr_hdr);
+ CHECK_MEMBER(llog_setattr_rec, lsr_oid);
+ CHECK_MEMBER(llog_setattr_rec, lsr_ogen);
+ CHECK_MEMBER(llog_setattr_rec, lsr_uid);
+ CHECK_MEMBER(llog_setattr_rec, lsr_gid);
+ CHECK_MEMBER(llog_setattr_rec, padding);
+ CHECK_MEMBER(llog_setattr_rec, lsr_tail);
+}
+
+static void
+check_llog_size_change_rec(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(llog_size_change_rec);
+ CHECK_MEMBER(llog_size_change_rec, lsc_hdr);
+ CHECK_MEMBER(llog_size_change_rec, lsc_fid);
+ CHECK_MEMBER(llog_size_change_rec, lsc_io_epoch);
+ CHECK_MEMBER(llog_size_change_rec, padding);
+ CHECK_MEMBER(llog_size_change_rec, lsc_tail);
+}
+
+static void
+check_llog_gen(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(llog_gen);
+ CHECK_MEMBER(llog_gen, mnt_cnt);
+ CHECK_MEMBER(llog_gen, conn_cnt);
+}
+
+static void
+check_llog_gen_rec(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(llog_gen_rec);
+ CHECK_MEMBER(llog_gen_rec, lgr_hdr);
+ CHECK_MEMBER(llog_gen_rec, lgr_gen);
+ CHECK_MEMBER(llog_gen_rec, lgr_tail);
+}
+
+static void
+check_llog_log_hdr(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(llog_log_hdr);
+ CHECK_MEMBER(llog_log_hdr, llh_hdr);
+ CHECK_MEMBER(llog_log_hdr, llh_timestamp);
+ CHECK_MEMBER(llog_log_hdr, llh_count);
+ CHECK_MEMBER(llog_log_hdr, llh_bitmap_offset);
+ CHECK_MEMBER(llog_log_hdr, llh_size);
+ CHECK_MEMBER(llog_log_hdr, llh_flags);
+ CHECK_MEMBER(llog_log_hdr, llh_cat_idx);
+ CHECK_MEMBER(llog_log_hdr, llh_tgtuuid);
+ CHECK_MEMBER(llog_log_hdr, llh_reserved);
+ CHECK_MEMBER(llog_log_hdr, llh_bitmap);
+ CHECK_MEMBER(llog_log_hdr, llh_tail);
+}
+
+static void
+check_llog_cookie(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(llog_cookie);
+ CHECK_MEMBER(llog_cookie, lgc_lgl);
+ CHECK_MEMBER(llog_cookie, lgc_subsys);
+ CHECK_MEMBER(llog_cookie, lgc_index);
+ CHECK_MEMBER(llog_cookie, lgc_padding);
+}
+
+static void
+check_llogd_body(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(llogd_body);
+ CHECK_MEMBER(llogd_body, lgd_logid);
+ CHECK_MEMBER(llogd_body, lgd_ctxt_idx);
+ CHECK_MEMBER(llogd_body, lgd_llh_flags);
+ CHECK_MEMBER(llogd_body, lgd_index);
+ CHECK_MEMBER(llogd_body, lgd_saved_index);
+ CHECK_MEMBER(llogd_body, lgd_len);
+ CHECK_MEMBER(llogd_body, lgd_cur_offset);
+
+ CHECK_CVALUE(LLOG_ORIGIN_HANDLE_CREATE);
+ CHECK_CVALUE(LLOG_ORIGIN_HANDLE_NEXT_BLOCK);
+ CHECK_CVALUE(LLOG_ORIGIN_HANDLE_READ_HEADER);
+ CHECK_CVALUE(LLOG_ORIGIN_HANDLE_WRITE_REC);
+ CHECK_CVALUE(LLOG_ORIGIN_HANDLE_CLOSE);
+ CHECK_CVALUE(LLOG_ORIGIN_CONNECT);
+ CHECK_CVALUE(LLOG_CATINFO);
+ CHECK_CVALUE(LLOG_ORIGIN_HANDLE_PREV_BLOCK);
+ CHECK_CVALUE(LLOG_ORIGIN_HANDLE_DESTROY);
+}
+
+static void
+check_llogd_conn_body(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(llogd_conn_body);
+ CHECK_MEMBER(llogd_conn_body, lgdc_gen);
+ CHECK_MEMBER(llogd_conn_body, lgdc_logid);
+ CHECK_MEMBER(llogd_conn_body, lgdc_ctxt_idx);
+}
+
+static void
+check_mds_extent_desc(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(mds_extent_desc);
+ CHECK_MEMBER(mds_extent_desc, med_start);
+ CHECK_MEMBER(mds_extent_desc, med_len);
+ CHECK_MEMBER(mds_extent_desc, med_lmm);
+}
+
+static void
+check_llog_array_rec(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(llog_array_rec);
+ CHECK_MEMBER(llog_array_rec, lmr_hdr);
+ CHECK_MEMBER(llog_array_rec, lmr_med);
+ CHECK_MEMBER(llog_array_rec, lmr_tail);
+}
+
+static void
+check_qunit_data(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(qunit_data);
+ CHECK_MEMBER(qunit_data, qd_id);
+ CHECK_MEMBER(qunit_data, qd_flags);
+ CHECK_MEMBER(qunit_data, qd_count);
+}
+
+static void
+check_qunit_data_old(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(qunit_data_old);
+ CHECK_MEMBER(qunit_data_old, qd_id);
+ CHECK_MEMBER(qunit_data_old, qd_type);
+ CHECK_MEMBER(qunit_data_old, qd_count);
+ CHECK_MEMBER(qunit_data_old, qd_isblk);
+}
+
+static void
+check_mgs_target_info(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(mgs_target_info);
+ CHECK_MEMBER(mgs_target_info, mti_lustre_ver);
+ CHECK_MEMBER(mgs_target_info, mti_stripe_index);
+ CHECK_MEMBER(mgs_target_info, mti_config_ver);
+ CHECK_MEMBER(mgs_target_info, mti_flags);
+ CHECK_MEMBER(mgs_target_info, mti_nid_count);
+ CHECK_MEMBER(mgs_target_info, mti_fsname);
+ CHECK_MEMBER(mgs_target_info, mti_svname);
+ CHECK_MEMBER(mgs_target_info, mti_uuid);
+ CHECK_MEMBER(mgs_target_info, mti_nids);
+ CHECK_MEMBER(mgs_target_info, mti_params);
+}
+
+static void
+check_lustre_disk_data(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(lustre_disk_data);
+ CHECK_MEMBER(lustre_disk_data, ldd_magic);
+ CHECK_MEMBER(lustre_disk_data, ldd_feature_compat);
+ CHECK_MEMBER(lustre_disk_data, ldd_feature_rocompat);
+ CHECK_MEMBER(lustre_disk_data, ldd_feature_incompat);
+ CHECK_MEMBER(lustre_disk_data, ldd_config_ver);
+ CHECK_MEMBER(lustre_disk_data, ldd_flags);
+ CHECK_MEMBER(lustre_disk_data, ldd_svindex);
+ CHECK_MEMBER(lustre_disk_data, ldd_mount_type);
+ CHECK_MEMBER(lustre_disk_data, ldd_fsname);
+ CHECK_MEMBER(lustre_disk_data, ldd_svname);
+ CHECK_MEMBER(lustre_disk_data, ldd_uuid);
+ CHECK_MEMBER(lustre_disk_data, ldd_userdata);
+ CHECK_MEMBER(lustre_disk_data, ldd_mount_opts);
+ CHECK_MEMBER(lustre_disk_data, ldd_params);
+}
+
+static void
+system_string (char *cmdline, char *str, int len)
+{
+ int fds[2];
+ int rc;
+ pid_t pid;
+
+ rc = pipe(fds);
+ if (rc != 0)
+ abort();
+
+ pid = fork();
+ if (pid == 0) {
+ /* child */
+ int fd = fileno(stdout);
+
+ rc = dup2(fds[1], fd);
+ if (rc != fd)
+ abort();
+
+ exit(system(cmdline));
+ /* notreached */
+ } else if ((int)pid < 0) {
+ abort();
+ } else {
+ FILE *f = fdopen(fds[0], "r");
+
+ if (f == NULL)
+ abort();
+
+ close(fds[1]);
+
+ if (fgets(str, len, f) == NULL)
+ abort();
+
+ if (waitpid(pid, &rc, 0) != pid)
+ abort();
+
+ if (!WIFEXITED(rc) || WEXITSTATUS(rc) != 0)
+ abort();
+
+ if (strnlen(str, len) == len)
+ str[len - 1] = 0;
+
+ if (str[strlen(str) - 1] == '\n')
+ str[strlen(str) - 1] = 0;
+
+ fclose(f);
+ }