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])
int rc;
ENTRY;
- rc = -dmu_objset_own(o->od_mntdev, DMU_OST_ZFS,
+ rc = -osd_dmu_objset_own(o->od_mntdev, DMU_OST_ZFS,
o->od_dt_dev.dd_rdonly ? B_TRUE : B_FALSE,
- o, &o->od_os);
+ B_FALSE, o, &o->od_os);
+
if (rc) {
CERROR("%s: can't open %s\n", o->od_svname, o->od_mntdev);
o->od_os = NULL;
out:
if (rc != 0 && o->od_os != NULL) {
- dmu_objset_disown(o->od_os, o);
+ osd_dmu_objset_disown(o->od_os, B_FALSE, o);
o->od_os = NULL;
}
osd_unlinked_drain(env, o);
err:
if (rc && o->od_os) {
- dmu_objset_disown(o->od_os, o);
+ osd_dmu_objset_disown(o->od_os, B_FALSE, o);
o->od_os = NULL;
}
txg_wait_synced(dmu_objset_pool(o->od_os), 0ULL);
/* close the object set */
- dmu_objset_disown(o->od_os, o);
-
+ osd_dmu_objset_disown(o->od_os, B_FALSE, o);
o->od_os = NULL;
}
#endif
}
+#ifdef HAVE_DMU_OBJSET_OWN_6ARG
+#define osd_dmu_objset_own(name, type, ronly, decrypt, tag, os) \
+ dmu_objset_own((name), (type), (ronly), (decrypt), (tag), (os))
+#else
+#define osd_dmu_objset_own(name, type, ronly, decrypt, tag, os) \
+ dmu_objset_own((name), (type), (ronly), (tag), (os))
+#endif
+
+#ifdef HAVE_DMU_OBJSET_DISOWN_3ARG
+#define osd_dmu_objset_disown(os, decrypt, tag) \
+ dmu_objset_disown((os), (decrypt), (tag))
+#else
+#define osd_dmu_objset_disown(os, decrypt, tag) \
+ dmu_objset_disown((os), (tag))
+#endif
+
#endif /* _OSD_INTERNAL_H */