From: Giuseppe Di Natale Date: Thu, 17 Aug 2017 17:16:49 +0000 (-0700) Subject: LU-9890 osd-zfs: dmu_objset_own/disown changes X-Git-Tag: 2.10.53~41 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=0fedb017c12629d145fa0577451d43adc757eb36;p=fs%2Flustre-release.git LU-9890 osd-zfs: dmu_objset_own/disown changes ZFS 0.8.0 will introduce ZFS encryption. The interfaces to 'dmu_objset_own' and 'dmu_objset_disown' have changed. Add configure checks to determine which versions of these functions are available and call them appropriately. Signed-off-by: Giuseppe Di Natale Test-Parameters: trivial ostfilesystemtype=zfs mdtfilesystemtype=zfs testlist=sanity Change-Id: Ide1a712858770e373404445b06596130a574d85b Reviewed-on: https://review.whamcloud.com/28593 Tested-by: Jenkins Reviewed-by: Nathaniel Clark Reviewed-by: Andreas Dilger Tested-by: Maloo Reviewed-by: Alex Zhuravlev --- diff --git a/config/lustre-build-zfs.m4 b/config/lustre-build-zfs.m4 index b92d17f..9e39c80 100644 --- a/config/lustre-build-zfs.m4 +++ b/config/lustre-build-zfs.m4 @@ -628,6 +628,33 @@ your distribution. 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 + ],[ + 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 + ],[ + 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]) diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c index 44a0c99..0d135b4 100644 --- a/lustre/osd-zfs/osd_handler.c +++ b/lustre/osd-zfs/osd_handler.c @@ -850,9 +850,10 @@ static int osd_objset_open(struct osd_device *o) 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; @@ -916,7 +917,7 @@ static int osd_objset_open(struct osd_device *o) 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; } @@ -1107,7 +1108,7 @@ static int osd_mount(const struct lu_env *env, 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; } @@ -1147,8 +1148,7 @@ static void osd_umount(const struct lu_env *env, struct osd_device *o) 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; } diff --git a/lustre/osd-zfs/osd_internal.h b/lustre/osd-zfs/osd_internal.h index d7e6e99..1996ab2 100644 --- a/lustre/osd-zfs/osd_internal.h +++ b/lustre/osd-zfs/osd_internal.h @@ -880,4 +880,20 @@ static inline int osd_dmu_read(struct osd_device *osd, dnode_t *dn, #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 */