/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
* vim:expandtab:shiftwidth=8:tabstop=8:
+ *
+ * GPL HEADER START
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 only,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License version 2 for more details (a copy is included
+ * in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; If not, see
+ * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ *
+ * GPL HEADER END
*/
+/*
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved
+ * Use is subject to license terms.
+ */
+/*
+ * This file is part of Lustre, http://www.lustre.org/
+ * Lustre is a trademark of Sun Microsystems, Inc.
+ */
+
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
CHECK_VALUE((int)offsetof(struct s, m)); \
} while(0)
+#define CHECK_MEMBER_OFFSET_TYPEDEF(s,m) \
+do { \
+ CHECK_VALUE((int)offsetof(s, m)); \
+} while(0)
+
#define CHECK_MEMBER_SIZEOF(s,m) \
do { \
CHECK_VALUE((int)sizeof(((struct s *)0)->m)); \
} while(0)
+#define CHECK_MEMBER_SIZEOF_TYPEDEF(s,m) \
+do { \
+ CHECK_VALUE((int)sizeof(((s *)0)->m)); \
+} while(0)
+
#define CHECK_MEMBER(s,m) \
do { \
CHECK_MEMBER_OFFSET(s, m); \
CHECK_MEMBER_SIZEOF(s, m); \
} while(0)
+#define CHECK_MEMBER_TYPEDEF(s,m) \
+do { \
+ CHECK_MEMBER_OFFSET_TYPEDEF(s, m); \
+ CHECK_MEMBER_SIZEOF_TYPEDEF(s, m); \
+} while(0)
+
#define CHECK_STRUCT(s) \
do { \
COMMENT("Checks for struct "#s); \
CHECK_VALUE((int)sizeof(struct s)); \
} while(0)
+#define CHECK_STRUCT_TYPEDEF(s) \
+do { \
+ COMMENT("Checks for type "#s); \
+ CHECK_VALUE((int)sizeof(s)); \
+} while(0)
static void
check_lustre_handle(void)
}
void
-check_lustre_msg_v1(void)
-{
- BLANK_LINE();
- CHECK_STRUCT(lustre_msg_v1);
- CHECK_MEMBER(lustre_msg_v1, lm_handle);
- CHECK_MEMBER(lustre_msg_v1, lm_magic);
- CHECK_MEMBER(lustre_msg_v1, lm_type);
- CHECK_MEMBER(lustre_msg_v1, lm_version);
- CHECK_MEMBER(lustre_msg_v1, lm_opc);
- CHECK_MEMBER(lustre_msg_v1, lm_last_xid);
- CHECK_MEMBER(lustre_msg_v1, lm_last_committed);
- CHECK_MEMBER(lustre_msg_v1, lm_transno);
- CHECK_MEMBER(lustre_msg_v1, lm_status);
- CHECK_MEMBER(lustre_msg_v1, lm_flags);
- CHECK_MEMBER(lustre_msg_v1, lm_conn_cnt);
- CHECK_MEMBER(lustre_msg_v1, lm_bufcount);
- CHECK_MEMBER(lustre_msg_v1, lm_buflens[0]);
-}
-
-void
check_lustre_msg_v2(void)
{
BLANK_LINE();
CHECK_MEMBER(lustre_msg_v2, lm_secflvr);
CHECK_MEMBER(lustre_msg_v2, lm_magic);
CHECK_MEMBER(lustre_msg_v2, lm_repsize);
- CHECK_MEMBER(lustre_msg_v2, lm_timeout);
- CHECK_MEMBER(lustre_msg_v2, lm_padding_1);
+ CHECK_MEMBER(lustre_msg_v2, lm_cksum);
+ CHECK_MEMBER(lustre_msg_v2, lm_flags);
CHECK_MEMBER(lustre_msg_v2, lm_padding_2);
CHECK_MEMBER(lustre_msg_v2, lm_padding_3);
CHECK_MEMBER(lustre_msg_v2, lm_buflens[0]);
CHECK_MEMBER(ptlrpc_body, pb_flags);
CHECK_MEMBER(ptlrpc_body, pb_op_flags);
CHECK_MEMBER(ptlrpc_body, pb_conn_cnt);
- CHECK_MEMBER(ptlrpc_body, pb_padding_1);
- CHECK_MEMBER(ptlrpc_body, pb_padding_2);
+ CHECK_MEMBER(ptlrpc_body, pb_timeout);
+ CHECK_MEMBER(ptlrpc_body, pb_service_time);
CHECK_MEMBER(ptlrpc_body, pb_slv);
CHECK_MEMBER(ptlrpc_body, pb_limit);
}
CHECK_MEMBER(obd_connect_data, ocd_nllg);
CHECK_MEMBER(obd_connect_data, ocd_transno);
CHECK_MEMBER(obd_connect_data, ocd_group);
+ CHECK_MEMBER(obd_connect_data, ocd_cksum_types);
CHECK_MEMBER(obd_connect_data, padding1);
CHECK_MEMBER(obd_connect_data, padding2);
- CHECK_MEMBER(obd_connect_data, padding3);
CHECK_CDEFINE(OBD_CONNECT_RDONLY);
CHECK_CDEFINE(OBD_CONNECT_INDEX);
CHECK_CDEFINE(OBD_CONNECT_ACL);
CHECK_CDEFINE(OBD_CONNECT_XATTR);
CHECK_CDEFINE(OBD_CONNECT_REAL);
+ CHECK_CDEFINE(OBD_CONNECT_CKSUM);
CHECK_CDEFINE(OBD_CONNECT_TRUNCLOCK);
CHECK_CDEFINE(OBD_CONNECT_IBITS);
CHECK_CDEFINE(OBD_CONNECT_JOIN);
CHECK_MEMBER(obdo, o_mds);
CHECK_MEMBER(obdo, o_stripe_idx);
CHECK_MEMBER(obdo, o_padding_1);
- CHECK_MEMBER(obdo, o_inline);
-
- CHECK_VALUE(OBD_INLINESZ);
+ CHECK_MEMBER(obdo, o_handle);
+ CHECK_MEMBER(obdo, o_lcookie);
+ CHECK_MEMBER(obdo, o_padding_2);
+ CHECK_MEMBER(obdo, o_padding_3);
+ CHECK_MEMBER(obdo, o_padding_4);
+ CHECK_MEMBER(obdo, o_padding_5);
+ CHECK_MEMBER(obdo, o_padding_6);
CHECK_CDEFINE(OBD_MD_FLID);
CHECK_CDEFINE(OBD_MD_FLATIME);
CHECK_CDEFINE(OBD_MD_FLFLAGS);
CHECK_CDEFINE(OBD_MD_FLNLINK);
CHECK_CDEFINE(OBD_MD_FLGENER);
- CHECK_CDEFINE(OBD_MD_FLINLINE);
CHECK_CDEFINE(OBD_MD_FLRDEV);
CHECK_CDEFINE(OBD_MD_FLEASIZE);
CHECK_CDEFINE(OBD_MD_LINKNAME);
CHECK_CDEFINE(OBD_FL_DEBUG_CHECK);
CHECK_CDEFINE(OBD_FL_NO_USRQUOTA);
CHECK_CDEFINE(OBD_FL_NO_GRPQUOTA);
+ CHECK_CDEFINE(OBD_FL_TRUNCLOCK);
+ CHECK_CDEFINE(OBD_FL_CKSUM_CRC32);
+ CHECK_CDEFINE(OBD_FL_CKSUM_ADLER);
+ CHECK_CVALUE(OBD_CKSUM_CRC32);
+ CHECK_CVALUE(OBD_CKSUM_ADLER);
}
static void
}
static void
+check_lov_mds_md_v3(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(lov_mds_md_v3);
+ CHECK_MEMBER(lov_mds_md_v3, lmm_magic);
+ CHECK_MEMBER(lov_mds_md_v3, lmm_pattern);
+ CHECK_MEMBER(lov_mds_md_v3, lmm_object_id);
+ CHECK_MEMBER(lov_mds_md_v3, lmm_object_gr);
+ CHECK_MEMBER(lov_mds_md_v3, lmm_stripe_size);
+ CHECK_MEMBER(lov_mds_md_v3, lmm_stripe_count);
+ CHECK_MEMBER(lov_mds_md_v3, lmm_pool_name);
+ CHECK_MEMBER(lov_mds_md_v3, lmm_objects);
+
+ BLANK_LINE();
+ CHECK_STRUCT(lov_ost_data_v1);
+ CHECK_MEMBER(lov_ost_data_v1, l_object_id);
+ CHECK_MEMBER(lov_ost_data_v1, l_object_gr);
+ CHECK_MEMBER(lov_ost_data_v1, l_ost_gen);
+ CHECK_MEMBER(lov_ost_data_v1, l_ost_idx);
+
+ CHECK_CDEFINE(LOV_MAGIC_V3);
+
+ CHECK_VALUE(LOV_PATTERN_RAID0);
+ CHECK_VALUE(LOV_PATTERN_RAID1);
+}
+
+static void
check_obd_statfs(void)
{
BLANK_LINE();
CHECK_MEMBER(ost_lvb, lvb_blocks);
}
+static void
+check_cfg_marker(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(cfg_marker);
+ CHECK_MEMBER(cfg_marker, cm_step);
+ CHECK_MEMBER(cfg_marker, cm_flags);
+ CHECK_MEMBER(cfg_marker, cm_vers);
+ CHECK_MEMBER(cfg_marker, cm_createtime);
+ CHECK_MEMBER(cfg_marker, cm_canceltime);
+ CHECK_MEMBER(cfg_marker, cm_tgtname);
+ CHECK_MEMBER(cfg_marker, cm_comment);
+}
static void
check_llog_logid(void)
}
static void
+check_posix_acl_xattr_entry(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT_TYPEDEF(posix_acl_xattr_entry);
+ CHECK_MEMBER_TYPEDEF(posix_acl_xattr_entry, e_tag);
+ CHECK_MEMBER_TYPEDEF(posix_acl_xattr_entry, e_perm);
+ CHECK_MEMBER_TYPEDEF(posix_acl_xattr_entry, e_id);
+}
+
+static void
+check_posix_acl_xattr_header(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT_TYPEDEF(posix_acl_xattr_header);
+ CHECK_MEMBER_TYPEDEF(posix_acl_xattr_header, a_version);
+ CHECK_MEMBER_TYPEDEF(posix_acl_xattr_header, a_entries);
+}
+
+static void
+check_ll_user_fiemap(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(ll_user_fiemap);
+ CHECK_MEMBER(ll_user_fiemap, fm_start);
+ CHECK_MEMBER(ll_user_fiemap, fm_length);
+ CHECK_MEMBER(ll_user_fiemap, fm_flags);
+ CHECK_MEMBER(ll_user_fiemap, fm_mapped_extents);
+ CHECK_MEMBER(ll_user_fiemap, fm_extent_count);
+ CHECK_MEMBER(ll_user_fiemap, fm_reserved);
+ CHECK_MEMBER(ll_user_fiemap, fm_extents);
+
+ CHECK_CDEFINE(FIEMAP_FLAG_SYNC);
+ CHECK_CDEFINE(FIEMAP_FLAG_XATTR);
+ CHECK_CDEFINE(FIEMAP_FLAG_DEVICE_ORDER);
+}
+
+static void
+check_ll_fiemap_extent(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(ll_fiemap_extent);
+ CHECK_MEMBER(ll_fiemap_extent, fe_logical);
+ CHECK_MEMBER(ll_fiemap_extent, fe_physical);
+ CHECK_MEMBER(ll_fiemap_extent, fe_length);
+ CHECK_MEMBER(ll_fiemap_extent, fe_flags);
+ CHECK_MEMBER(ll_fiemap_extent, fe_device);
+
+ CHECK_CDEFINE(FIEMAP_EXTENT_LAST);
+ CHECK_CDEFINE(FIEMAP_EXTENT_UNKNOWN);
+ CHECK_CDEFINE(FIEMAP_EXTENT_DELALLOC);
+ CHECK_CDEFINE(FIEMAP_EXTENT_NO_DIRECT);
+ CHECK_CDEFINE(FIEMAP_EXTENT_SECONDARY);
+ CHECK_CDEFINE(FIEMAP_EXTENT_NET);
+ CHECK_CDEFINE(FIEMAP_EXTENT_DATA_COMPRESSED);
+ CHECK_CDEFINE(FIEMAP_EXTENT_DATA_ENCRYPTED);
+ CHECK_CDEFINE(FIEMAP_EXTENT_NOT_ALIGNED);
+ CHECK_CDEFINE(FIEMAP_EXTENT_DATA_INLINE);
+ CHECK_CDEFINE(FIEMAP_EXTENT_DATA_TAIL);
+ CHECK_CDEFINE(FIEMAP_EXTENT_UNWRITTEN);
+ CHECK_CDEFINE(FIEMAP_EXTENT_MERGED);
+}
+
+static void
system_string (char *cmdline, char *str, int len)
{
int fds[2];
printf ("void lustre_assert_wire_constants(void)\n"
"{\n"
" /* Wire protocol assertions generated by 'wirecheck'\n"
- " * (make -C lustre/utils newwirecheck)\n"
+ " * (make -C lustre/utils newwiretest)\n"
" * running on %s\n"
" * with %s */\n"
"\n", unameinfo, gccinfo);
BLANK_LINE ();
COMMENT("Constants...");
- CHECK_DEFINE(LUSTRE_MSG_MAGIC_V1);
CHECK_DEFINE(LUSTRE_MSG_MAGIC_V2);
CHECK_DEFINE(PTLRPC_MSG_VERSION);
+ CHECK_VALUE(MSGHDR_AT_SUPPORT);
CHECK_VALUE(PTL_RPC_MSG_REQUEST);
CHECK_VALUE(PTL_RPC_MSG_ERR);
CHECK_VALUE(LCK_NL);
CHECK_VALUE(LCK_GROUP);
CHECK_VALUE(LCK_MAXMODE);
+ CHECK_VALUE(LCK_MODE_NUM);
CHECK_CVALUE(LDLM_PLAIN);
CHECK_CVALUE(LDLM_EXTENT);
BLANK_LINE();
CHECK_STRUCT(obd_uuid);
check_lustre_handle();
- check_lustre_msg_v1();
check_lustre_msg_v2();
- printf(" LASSERT(offsetof(struct lustre_msg_v1, lm_magic) == "
- "offsetof(struct lustre_msg_v2, lm_magic));\n");
check_ptlrpc_body();
check_obd_connect_data();
check_obdo();
check_lov_mds_md_v1();
+ check_lov_mds_md_v3();
check_lov_mds_md_join();
check_obd_statfs();
check_obd_ioobj();
check_ldlm_request();
check_ldlm_reply();
check_ldlm_lvb();
+ check_cfg_marker();
check_llog_logid();
check_llog_catid();
check_llog_rec_hdr();
check_qunit_data_old();
check_mgs_target_info();
check_lustre_disk_data();
+ check_ll_user_fiemap();
+ check_ll_fiemap_extent();
+ printf("#ifdef LIBLUSTRE_POSIX_ACL\n");
+#ifndef LIBLUSTRE_POSIX_ACL
+#error build generator without LIBLUSTRE_POSIX_ACL defined - produce wrong check code.
+#endif
+ check_posix_acl_xattr_entry();
+ check_posix_acl_xattr_header();
+ printf("#endif\n");
printf("}\n\n");