From 8546f17bb7c85958263cb12f7628678fb97837e1 Mon Sep 17 00:00:00 2001 From: Nathaniel Clark Date: Wed, 10 Oct 2018 17:16:58 -0400 Subject: [PATCH] LU-11393 osd-zfs: time struct changes Account for changes in 0.7.10 and pre 0.8 changes in ZFS that change the time structure. Test-Parameters: trivial Signed-off-by: Nathaniel Clark Change-Id: I5c2373d053ea92d8bf04befe1d096159b8a34126 Reviewed-on: https://review.whamcloud.com/33345 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Alex Zhuravlev Reviewed-by: Tony Hutter Reviewed-by: Andreas Dilger --- config/lustre-build-zfs.m4 | 13 +++++++++++++ lustre/osd-zfs/osd_internal.h | 4 ++++ lustre/osd-zfs/osd_object.c | 14 +++++++------- lustre/osd-zfs/osd_xattr.c | 6 +++--- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/config/lustre-build-zfs.m4 b/config/lustre-build-zfs.m4 index 7ea8071..5d024c2 100644 --- a/config/lustre-build-zfs.m4 +++ b/config/lustre-build-zfs.m4 @@ -670,6 +670,19 @@ your distribution. AC_DEFINE(HAVE_DMU_TX_MARK_NETFREE, 1, [Have dmu_tx_mark_netfree]) ]) + dnl # + dnl # ZFS 0.7.10 changes timestruc_t to inode_timespec_t + dnl # + LB_CHECK_COMPILE([if SPL has 'inode_timespec_t'], + zfs_have_inode_timespec, [ + #include + ],[ + inode_timespec_t now; + gethrestime(&now); + ],[ + AC_DEFINE(HAVE_ZFS_INODE_TIMESPEC, 1, + [Have inode_timespec_t]) + ]) ]) AS_IF([test "x$enable_zfs" = xyes], [ diff --git a/lustre/osd-zfs/osd_internal.h b/lustre/osd-zfs/osd_internal.h index 3b53401..d34afe5 100644 --- a/lustre/osd-zfs/osd_internal.h +++ b/lustre/osd-zfs/osd_internal.h @@ -1096,4 +1096,8 @@ osd_index_backup(const struct lu_env *env, struct osd_device *osd, bool backup) #define dmu_tx_mark_netfree(tx) #endif +#ifndef HAVE_ZFS_INODE_TIMESPEC +#define inode_timespec_t timestruc_t +#endif + #endif /* _OSD_INTERNAL_H */ diff --git a/lustre/osd-zfs/osd_object.c b/lustre/osd-zfs/osd_object.c index 6d8c3dd..909af49 100644 --- a/lustre/osd-zfs/osd_object.c +++ b/lustre/osd-zfs/osd_object.c @@ -1515,13 +1515,13 @@ int __osd_attr_init(const struct lu_env *env, struct osd_device *osd, struct lu_attr *la, uint64_t parent, nvlist_t *xattr) { - sa_bulk_attr_t *bulk = osd_oti_get(env)->oti_attr_bulk; - struct osa_attr *osa = &osd_oti_get(env)->oti_osa; - uint64_t gen; - uint64_t crtime[2]; - timestruc_t now; - int cnt; - int rc; + sa_bulk_attr_t *bulk = osd_oti_get(env)->oti_attr_bulk; + struct osa_attr *osa = &osd_oti_get(env)->oti_osa; + uint64_t gen; + uint64_t crtime[2]; + inode_timespec_t now; + int cnt; + int rc; char *dxattr = NULL; size_t sa_size; diff --git a/lustre/osd-zfs/osd_xattr.c b/lustre/osd-zfs/osd_xattr.c index f6ac3a7..67be1b4 100644 --- a/lustre/osd-zfs/osd_xattr.c +++ b/lustre/osd-zfs/osd_xattr.c @@ -426,12 +426,12 @@ int osd_declare_xattr_set(const struct lu_env *env, struct dt_object *dt, int __osd_sa_attr_init(const struct lu_env *env, struct osd_object *obj, struct osd_thandle *oh) { - sa_bulk_attr_t *bulk = osd_oti_get(env)->oti_attr_bulk; - struct osa_attr *osa = &osd_oti_get(env)->oti_osa; + sa_bulk_attr_t *bulk = osd_oti_get(env)->oti_attr_bulk; + struct osa_attr *osa = &osd_oti_get(env)->oti_osa; struct lu_buf *lb = &osd_oti_get(env)->oti_xattr_lbuf; struct osd_device *osd = osd_obj2dev(obj); uint64_t crtime[2], gen; - timestruc_t now; + inode_timespec_t now; size_t size; int rc, cnt; -- 1.8.3.1