+
+ dnl #
+ dnl # ZFS 0.7.x adds support for large dnodes. This
+ dnl # allows Lustre to optionally specify the size of a
+ dnl # dnode which ZFS will then use to store metadata such
+ dnl # as xattrs. The default dnode size specified by the
+ dnl # 'dnodesize' dataset property will be used unless a
+ dnl # specific value is provided.
+ dnl #
+ LB_CHECK_COMPILE([if zfs defines dmu_object_alloc_dnsize],
+ dmu_object_alloc_dnsize, [
+ #include <sys/dmu.h>
+ #include <sys/dnode.h>
+ ],[
+ objset_t *os = NULL;
+ dmu_object_type_t objtype = DMU_OT_NONE;
+ int blocksize = 0;
+ dmu_object_type_t bonustype = DMU_OT_SA;
+ int dnodesize = DNODE_MIN_SIZE;
+ dmu_tx_t *tx = NULL;
+ uint64_t id;
+
+ id = dmu_object_alloc_dnsize(os, objtype, blocksize,
+ bonustype,
+ DN_BONUS_SIZE(dnodesize),
+ dnodesize, tx);
+ ],[
+ AC_DEFINE(HAVE_DMU_OBJECT_ALLOC_DNSIZE, 1,
+ [Have dmu_object_alloc_dnsize in ZFS])
+ ])
+
+ dnl #
+ dnl # ZFS 0.7.x extended dmu_prefetch() to take an additional
+ dnl # 'level' and 'priority' argument. Use a level of 0 and a
+ dnl # priority of ZIO_PRIORITY_SYNC_READ to replicate the
+ dnl # behavior of the four argument version.
+ dnl #
+ LB_CHECK_COMPILE([if ZFS has 'dmu_prefetch' with 6 args],
+ dmu_prefetch, [
+ #include <sys/dmu.h>
+ ],[
+ objset_t *os = NULL;
+ uint64_t object = 0;
+ int64_t level = 0;
+ uint64_t offset = 0;
+ uint64_t len = 0;
+ enum zio_priority pri = ZIO_PRIORITY_SYNC_READ;
+
+ dmu_prefetch(os, object, level, offset, len, pri);
+ ],[
+ AC_DEFINE(HAVE_DMU_PREFETCH_6ARG, 1,
+ [Have 6 argument dmu_pretch in ZFS])
+ ])
+ dnl #
+ dnl # ZFS 0.7.0 feature: SPA_FEATURE_USEROBJ_ACCOUNTING
+ dnl #
+ LB_CHECK_COMPILE([if ZFS has native dnode accounting supported],
+ dmu_objset_userobjused_enabled, [
+ #include <sys/dmu_objset.h>
+ ],[
+ dmu_objset_userobjused_enabled(NULL);
+ ],[
+ AC_DEFINE(HAVE_DMU_USEROBJ_ACCOUNTING, 1,
+ [Have native dnode accounting in ZFS])
+ ])
+ dnl # ZFS 0.7.x adds new method zap_lookup_by_dnode
+ dnl #
+ LB_CHECK_COMPILE([if ZFS has 'zap_lookup_by_dnode'],
+ zap_lookup_by_dnode, [
+ #include <sys/zap.h>
+ #include <sys/dnode.h>
+ ],[
+ dnode_t *dn = NULL;
+ zap_lookup_by_dnode(dn, NULL, 1, 1, NULL);
+ ],[
+ AC_DEFINE(HAVE_ZAP_LOOKUP_BY_DNODE, 1,
+ [Have zap_lookup_by_dnode() in ZFS])
+ ])
+ dnl #
+ dnl # ZFS 0.7.x adds new method zap_add_by_dnode
+ dnl #
+ LB_CHECK_COMPILE([if ZFS has 'zap_add_by_dnode'],
+ zap_add_by_dnode, [
+ #include <sys/zap.h>
+ #include <sys/dnode.h>
+ ],[
+ dnode_t *dn = NULL;
+ zap_add_by_dnode(dn, NULL, 1, 1, NULL, NULL);
+ ],[
+ AC_DEFINE(HAVE_ZAP_ADD_BY_DNODE, 1,
+ [Have zap_add_by_dnode() in ZFS])
+ ])
+ dnl #
+ dnl # ZFS 0.7.x adds new method zap_remove_by_dnode
+ dnl #
+ LB_CHECK_COMPILE([if ZFS has 'zap_remove_by_dnode'],
+ zap_remove_by_dnode, [
+ #include <sys/zap.h>
+ #include <sys/dnode.h>
+ ],[
+ dnode_t *dn = NULL;
+ zap_remove_by_dnode(dn, NULL, NULL);
+ ],[
+ AC_DEFINE(HAVE_ZAP_REMOVE_ADD_BY_DNODE, 1,
+ [Have zap_remove_by_dnode() in ZFS])
+ ])
+ dnl #
+ dnl # ZFS 0.7.x adds new method dmu_tx_hold_zap_by_dnode
+ dnl #
+ LB_CHECK_COMPILE([if ZFS has 'dmu_tx_hold_zap_by_dnode'],
+ dmu_tx_hold_zap_by_dnode, [
+ #include <sys/zap.h>
+ #include <sys/dnode.h>
+ ],[
+ dnode_t *dn = NULL;
+ dmu_tx_hold_zap_by_dnode(NULL, dn, TRUE, NULL);
+ ],[
+ AC_DEFINE(HAVE_DMU_TX_HOLD_ZAP_BY_DNODE, 1,
+ [Have dmu_tx_hold_zap_by_dnode() in ZFS])
+ ])
+ dnl #
+ dnl # ZFS 0.7.x adds new method dmu_tx_hold_write_by_dnode
+ dnl #
+ LB_CHECK_COMPILE([if ZFS has 'dmu_tx_hold_write_by_dnode'],
+ dmu_tx_hold_write_by_dnode, [
+ #include <sys/zap.h>
+ #include <sys/dnode.h>
+ ],[
+ dnode_t *dn = NULL;
+ dmu_tx_hold_write_by_dnode(NULL, dn, 0, 0);
+ ],[
+ AC_DEFINE(HAVE_DMU_TX_HOLD_WRITE_BY_DNODE, 1,
+ [Have dmu_tx_hold_write_by_dnode() in ZFS])
+ ])
+ dnl #
+ dnl # ZFS 0.7.x adds new method dmu_write_by_dnode
+ dnl #
+ LB_CHECK_COMPILE([if ZFS has 'dmu_write_by_dnode'],
+ dmu_write_by_dnode, [
+ #include <sys/zap.h>
+ #include <sys/dnode.h>
+ ],[
+ dnode_t *dn = NULL;
+ dmu_write_by_dnode(dn, 0, 0, NULL, NULL);
+ ],[
+ AC_DEFINE(HAVE_DMU_WRITE_BY_DNODE, 1,
+ [Have dmu_write_by_dnode() in ZFS])
+ ])
+ dnl #
+ dnl # ZFS 0.7.x adds new method dmu_read_by_dnode
+ dnl #
+ LB_CHECK_COMPILE([if ZFS has 'dmu_read_by_dnode'],
+ dmu_read_by_dnode, [
+ #include <sys/zap.h>
+ #include <sys/dnode.h>
+ ],[
+ dnode_t *dn = NULL;
+ dmu_read_by_dnode(dn, 0, 0, NULL, 0);
+ ],[
+ AC_DEFINE(HAVE_DMU_READ_BY_DNODE, 1,
+ [Have dmu_read_by_dnode() in ZFS])
+ ])
+ dnl #
+ dnl # ZFS 0.8.x changes dmu_objset_own for encryption
+ dnl #
+ LB_CHECK_COMPILE([if ZFS has 'dmu_objset_own' with 6 args],
+ dmu_objset_own, [
+ #include <sys/dmu_objset.h>
+ ],[
+ objset_t *os = NULL;
+ dmu_objset_type_t type = DMU_OST_ANY;
+ dmu_objset_own(NULL, type, B_FALSE, B_FALSE, FTAG, &os);
+ ],[
+ AC_DEFINE(HAVE_DMU_OBJSET_OWN_6ARG, 1,
+ [Have dmu_objset_own() with 6 args])
+ ])
+ dnl #
+ dnl # ZFS 0.8.x changes dmu_objset_disown for encryption
+ dnl #
+ LB_CHECK_COMPILE([if ZFS has 'dmu_objset_disown' with 3 args],
+ dmu_objset_disown, [
+ #include <sys/dmu_objset.h>
+ ],[
+ objset_t *os = NULL;
+ dmu_objset_disown(os, B_FALSE, FTAG);
+ ],[
+ AC_DEFINE(HAVE_DMU_OBJSET_DISOWN_3ARG, 1,
+ [Have dmu_objset_disown() with 3 args])
+ ])
+ dnl #
+ dnl # ZFS 0.7.2 adds new method dmu_tx_mark_netfree
+ dnl #
+ LB_CHECK_COMPILE([if ZFS has 'dmu_tx_mark_netfree'],
+ dmu_tx_mark_netfree, [
+ #include <sys/dmu.h>
+ ],[
+ dmu_tx_t *tx = NULL;
+ dmu_tx_mark_netfree(tx);
+ ],[
+ AC_DEFINE(HAVE_DMU_TX_MARK_NETFREE, 1,
+ [Have dmu_tx_mark_netfree])
+ ])