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.1-RC1~17 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=be1b1fc67451b85f6a42919cd6aab0ad34b3c2fd;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. Test-Parameters: trivial ostfilesystemtype=zfs mdtfilesystemtype=zfs testlist=sanity Lustre-change: https://review.whamcloud.com/28593 Lustre-commit: 0fedb017c12629d145fa0577451d43adc757eb36 Signed-off-by: Giuseppe Di Natale Change-Id: Ide1a712858770e373404445b06596130a574d85b Reviewed-by: Nathaniel Clark Reviewed-by: Andreas Dilger Reviewed-by: Alex Zhuravlev Signed-off-by: Minh Diep Reviewed-on: https://review.whamcloud.com/28764 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: John L. Hammond --- 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 8d9fa0c..8f28498 100644 --- a/lustre/osd-zfs/osd_handler.c +++ b/lustre/osd-zfs/osd_handler.c @@ -851,9 +851,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; @@ -917,7 +918,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; } @@ -1108,7 +1109,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; } @@ -1148,8 +1149,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 */