* vim:expandtab:shiftwidth=8:tabstop=8:
*/
#include <stdio.h>
+#include <sys/types.h>
+#include <sys/wait.h>
#include <liblustre.h>
#include <linux/lustre_lib.h>
#include <linux/lustre_idl.h>
#define CHECK_DEFINE(a) \
do { \
- printf(" LASSERT("#a" == "STRINGIFY(a)");\n"); \
+ printf(" LASSERTF("#a" == "STRINGIFY(a) \
+ ",\" found %%lld\\n\",\n " \
+ "(long long)"#a");\n"); \
} while(0)
#define CHECK_VALUE(a) \
do { \
- printf(" LASSERT("#a" == %d);\n", a); \
+ printf(" LASSERTF("#a \
+ " == %d, \" found %%lld\\n\",\n "\
+ "(long long)"#a");\n",a);\
} while(0)
#define CHECK_MEMBER_OFFSET(s,m) \
do { \
- CHECK_VALUE(offsetof(struct s, m)); \
+ CHECK_VALUE((int)offsetof(struct s, m)); \
} while(0)
#define CHECK_MEMBER_SIZEOF(s,m) \
CHECK_MEMBER(obdo, o_ctime);
CHECK_MEMBER(obdo, o_size);
CHECK_MEMBER(obdo, o_blocks);
- CHECK_MEMBER(obdo, o_rdev);
+ CHECK_MEMBER(obdo, o_grant);
CHECK_MEMBER(obdo, o_blksize);
CHECK_MEMBER(obdo, o_mode);
CHECK_MEMBER(obdo, o_uid);
CHECK_MEMBER(obdo, o_nlink);
CHECK_MEMBER(obdo, o_generation);
CHECK_MEMBER(obdo, o_valid);
- CHECK_MEMBER(obdo, o_obdflags);
+ CHECK_MEMBER(obdo, o_misc);
CHECK_MEMBER(obdo, o_easize);
CHECK_MEMBER(obdo, o_inline);
CHECK_VALUE(OBD_MD_FLUID);
CHECK_VALUE(OBD_MD_FLGID);
CHECK_VALUE(OBD_MD_FLFLAGS);
- CHECK_VALUE(OBD_MD_FLOBDFLG);
CHECK_VALUE(OBD_MD_FLNLINK);
CHECK_VALUE(OBD_MD_FLGENER);
CHECK_VALUE(OBD_MD_FLINLINE);
CHECK_VALUE(OBD_FL_DELORPHAN);
CHECK_VALUE(OBD_FL_NORPC);
CHECK_VALUE(OBD_FL_IDONLY);
+ CHECK_VALUE(OBD_FL_RECREATE_OBJS);
}
void
CHECK_VALUE(OBD_BRW_READ);
CHECK_VALUE(OBD_BRW_WRITE);
- CHECK_VALUE(OBD_BRW_CREATE);
CHECK_VALUE(OBD_BRW_SYNC);
CHECK_VALUE(OBD_BRW_FROM_GRANT);
}
CHECK_STRUCT(ldlm_extent);
CHECK_MEMBER(ldlm_extent, start);
CHECK_MEMBER(ldlm_extent, end);
+ CHECK_MEMBER(ldlm_extent, gid);
}
void
CHECK_STRUCT(ldlm_flock);
CHECK_MEMBER(ldlm_flock, start);
CHECK_MEMBER(ldlm_flock, end);
- CHECK_MEMBER(ldlm_flock, blocking_export);
- CHECK_MEMBER(ldlm_flock, blocking_pid);
CHECK_MEMBER(ldlm_flock, pid);
+ CHECK_MEMBER(ldlm_flock, blocking_pid);
+ CHECK_MEMBER(ldlm_flock, blocking_export);
}
void
CHECK_STRUCT(ldlm_resource_desc);
CHECK_MEMBER(ldlm_resource_desc, lr_type);
CHECK_MEMBER(ldlm_resource_desc, lr_name);
- CHECK_MEMBER(ldlm_resource_desc, lr_version[RES_VERSION_SIZE]);
}
void
CHECK_MEMBER(ldlm_lock_desc, l_req_mode);
CHECK_MEMBER(ldlm_lock_desc, l_granted_mode);
CHECK_MEMBER(ldlm_lock_desc, l_policy_data);
- CHECK_MEMBER(ldlm_lock_desc, l_version[RES_VERSION_SIZE]);
}
void
BLANK_LINE();
CHECK_STRUCT(ldlm_reply);
CHECK_MEMBER(ldlm_reply, lock_flags);
- CHECK_MEMBER(ldlm_reply, lock_mode);
- CHECK_MEMBER(ldlm_reply, lock_resource_name);
+ CHECK_MEMBER(ldlm_request, lock_desc);
CHECK_MEMBER(ldlm_reply, lock_handle);
- CHECK_MEMBER(ldlm_reply, lock_policy_data);
CHECK_MEMBER(ldlm_reply, lock_policy_res1);
CHECK_MEMBER(ldlm_reply, lock_policy_res2);
}
void
+check_ldlm_lvb(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(ost_lvb);
+ CHECK_MEMBER(ost_lvb, lvb_size);
+ CHECK_MEMBER(ost_lvb, lvb_mtime);
+ CHECK_MEMBER(ost_lvb, lvb_atime);
+ CHECK_MEMBER(ost_lvb, lvb_ctime);
+ CHECK_MEMBER(ost_lvb, lvb_blocks);
+}
+
+void
check_ptlbd_op(void)
{
BLANK_LINE();
}
void
+check_llog_catid(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(llog_catid);
+ CHECK_MEMBER(llog_catid, lci_logid);
+}
+
+void
check_llog_rec_hdr(void)
{
BLANK_LINE();
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);
}
CHECK_MEMBER(llogd_body, lgd_len);
CHECK_MEMBER(llogd_body, lgd_cur_offset);
- CHECK_VALUE(LLOG_ORIGIN_HANDLE_CREATE);
+ CHECK_VALUE(LLOG_ORIGIN_HANDLE_OPEN);
CHECK_VALUE(LLOG_ORIGIN_HANDLE_NEXT_BLOCK);
CHECK_VALUE(LLOG_ORIGIN_HANDLE_READ_HEADER);
CHECK_VALUE(LLOG_ORIGIN_HANDLE_WRITE_REC);
CHECK_MEMBER(llogd_conn_body, lgdc_ctxt_idx);
}
+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);
+ }
+}
+
int
main(int argc, char **argv)
{
- printf("void lustre_assert_wire_constants(void)\n"
- "{\n");
+ char unameinfo[80];
+ char gccinfo[80];
- COMMENT("Wire protocol assertions generated by 'wirecheck'");
- BLANK_LINE();
+ system_string("uname -a", unameinfo, sizeof(unameinfo));
+ system_string("gcc -v 2>&1 | tail -1", gccinfo, sizeof(gccinfo));
+
+ printf ("void lustre_assert_wire_constants(void)\n"
+ "{\n"
+ " /* Wire protocol assertions generated by 'wirecheck'\n"
+ " * running on %s\n"
+ " * with %s */\n"
+ "\n", unameinfo, gccinfo);
+
+ BLANK_LINE ();
COMMENT("Constants...");
CHECK_DEFINE(PTLRPC_MSG_MAGIC);
CHECK_VALUE(MSG_LAST_REPLAY);
CHECK_VALUE(MSG_RESENT);
+ CHECK_VALUE(MSG_REPLAY);
CHECK_VALUE(MSG_CONNECT_RECOVERING);
CHECK_VALUE(MSG_CONNECT_RECONNECT);
check_ldlm_lock_desc();
check_ldlm_request();
check_ldlm_reply();
+ check_ldlm_lvb();
check_ptlbd_op();
check_ptlbd_niob();
check_ptlbd_rsp();
check_llog_logid();
+ check_llog_catid();
check_llog_rec_hdr();
check_llog_rec_tail();
+ check_llog_logid_rec();
+ check_llog_create_rec();
+ check_llog_orphan_rec();
+ check_llog_unlink_rec();
+ check_llog_size_change_rec();
+ check_llog_gen();
+ check_llog_gen_rec();
check_llog_log_hdr();
check_llog_cookie();
check_llogd_body();