Whamcloud - gitweb
LU-7991 quota: project quota against ZFS backend
[fs/lustre-release.git] / config / lustre-build-zfs.m4
index 3aa9314..297e790 100644 (file)
@@ -406,6 +406,22 @@ your distribution.
                ])
        ])
 
+       dnl #
+       dnl # Define zfs source code version
+       dnl #
+       AS_IF([test x$enable_zfs = xyes], [
+               ZFS_MAJOR=$(echo $zfsver | sed -re ['s/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\1/'])
+               ZFS_MINOR=$(echo $zfsver | sed -re ['s/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\2/'])
+               ZFS_PATCH=$(echo $zfsver | sed -re ['s/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\3/'])
+               ZFS_FIX=$(echo $zfsver   | sed -re ['s/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\5/'])
+               AS_IF([test -z "$ZFS_FIX"], [ZFS_FIX="0"])
+
+               AC_DEFINE_UNQUOTED([ZFS_MAJOR], [$ZFS_MAJOR], [zfs major version])
+               AC_DEFINE_UNQUOTED([ZFS_MINOR], [$ZFS_MINOR], [zfs minor version])
+               AC_DEFINE_UNQUOTED([ZFS_PATCH], [$ZFS_PATCH], [zfs patch version])
+               AC_DEFINE_UNQUOTED([ZFS_FIX],   [$ZFS_FIX],   [zfs fix version])
+       ])
+
        AS_IF([test "x$enable_zfs" = xyes], [
                LB_CHECK_COMPILE([if zfs defines dsl_pool_config_enter/exit],
                dsl_pool_config_enter, [
@@ -450,6 +466,7 @@ your distribution.
                        AC_DEFINE(HAVE_SPA_MAXBLOCKSIZE, 1,
                                [Have spa_maxblocksize in ZFS])
                ])
+
                dnl #
                dnl # ZFS 0.7.x adds support for large dnodes.  This
                dnl # allows Lustre to optionally specify the size of a
@@ -479,6 +496,165 @@ your distribution.
                        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_id_quota_upgrade, [
+                       #include <sys/dmu_objset.h>
+               ],[
+                       dmu_objset_id_quota_upgrade(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])
+               ])
        ])
 
        AM_CONDITIONAL(ZFS_ENABLED, [test "x$enable_zfs" = xyes])