Whamcloud - gitweb
LU-9890 osd-zfs: dmu_objset_own/disown changes 93/28593/3
authorGiuseppe Di Natale <dinatale2@llnl.gov>
Thu, 17 Aug 2017 17:16:49 +0000 (10:16 -0700)
committerOleg Drokin <oleg.drokin@intel.com>
Mon, 28 Aug 2017 06:27:21 +0000 (06:27 +0000)
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 <dinatale2@llnl.gov>
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 <nathaniel.l.clark@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
config/lustre-build-zfs.m4
lustre/osd-zfs/osd_handler.c
lustre/osd-zfs/osd_internal.h

index b92d17f..9e39c80 100644 (file)
@@ -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 <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])
index 44a0c99..0d135b4 100644 (file)
@@ -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;
        }
 
index d7e6e99..1996ab2 100644 (file)
@@ -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 */