Whamcloud - gitweb
LU-11507 osd-zfs: Use zfs_refcount_add if available 59/33359/7
authorTony Hutter <hutter2@llnl.gov>
Thu, 11 Oct 2018 22:07:44 +0000 (15:07 -0700)
committerOleg Drokin <green@whamcloud.com>
Tue, 6 Nov 2018 06:40:02 +0000 (06:40 +0000)
refcount_add was removed from ZFS master in:

    Linux 4.19-rc3+ compat: Remove refcount_t compat
    https://github.com/zfsonlinux/zfs/pull/7932

It is expected to be removed in zfs-0.7.12 as well.  Update Lustre
to use zfs_refcount_add if zfs supports it, and fall back to
refcount_add if not.

Signed-off-by: Tony Hutter <hutter2@llnl.gov>
Change-Id: Ib1b2ff13eb4ff8c56dd49a427b9827c6649ecd31
Reviewed-on: https://review.whamcloud.com/33359
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Nathaniel Clark <nclark@whamcloud.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
config/lustre-build-zfs.m4
lustre/osd-zfs/osd_internal.h
lustre/osd-zfs/osd_object.c

index 5d024c2..eb82bb4 100644 (file)
@@ -683,6 +683,18 @@ your distribution.
                        AC_DEFINE(HAVE_ZFS_INODE_TIMESPEC, 1,
                                [Have inode_timespec_t])
                ])
                        AC_DEFINE(HAVE_ZFS_INODE_TIMESPEC, 1,
                                [Have inode_timespec_t])
                ])
+               dnl # ZFS 0.7.12/0.8.x uses zfs_refcount_add() instead of
+               dnl # refcount_add().
+               dnl #
+               LB_CHECK_COMPILE([if ZFS has 'zfs_refcount_add'],
+               zfs_refcount_add, [
+                       #include <sys/refcount.h>
+               ],[
+                       zfs_refcount_add((zfs_refcount_t *) NULL, NULL);
+               ],[
+                       AC_DEFINE(HAVE_ZFS_REFCOUNT_ADD, 1,
+                               [Have zfs_refcount_add])
+               ])
        ])
 
        AS_IF([test "x$enable_zfs" = xyes], [
        ])
 
        AS_IF([test "x$enable_zfs" = xyes], [
index d34afe5..20656b4 100644 (file)
 
 #define OSD_MAX_CACHE_SIZE OBD_OBJECT_EOF
 
 
 #define OSD_MAX_CACHE_SIZE OBD_OBJECT_EOF
 
+#ifndef HAVE_ZFS_REFCOUNT_ADD
+#define zfs_refcount_add       refcount_add
+#endif
+
 extern struct dt_body_operations osd_body_scrub_ops;
 
 /**
 extern struct dt_body_operations osd_body_scrub_ops;
 
 /**
@@ -925,7 +929,7 @@ static inline int osd_sa_handle_get(struct osd_object *obj)
                                    SA_HDL_PRIVATE, &obj->oo_sa_hdl);
        if (rc)
                return rc;
                                    SA_HDL_PRIVATE, &obj->oo_sa_hdl);
        if (rc)
                return rc;
-       refcount_add(&dn->dn_bonus->db_holds, osd_obj_tag);
+       zfs_refcount_add(&dn->dn_bonus->db_holds, osd_obj_tag);
        return 0;
 }
 
        return 0;
 }
 
index 909af49..dd42a45 100644 (file)
@@ -1639,8 +1639,8 @@ int osd_find_new_dnode(const struct lu_env *env, dmu_tx_t *tx,
                LASSERT(db);
                LASSERT(dn->dn_handle);
                DB_DNODE_ENTER(db);
                LASSERT(db);
                LASSERT(dn->dn_handle);
                DB_DNODE_ENTER(db);
-               if (refcount_add(&db->db_holds, osd_obj_tag) == 1) {
-                       refcount_add(&dn->dn_holds, osd_obj_tag);
+               if (zfs_refcount_add(&db->db_holds, osd_obj_tag) == 1) {
+                       zfs_refcount_add(&dn->dn_holds, osd_obj_tag);
                        atomic_inc_32(&dn->dn_dbufs_count);
                }
                *dnp = dn;
                        atomic_inc_32(&dn->dn_dbufs_count);
                }
                *dnp = dn;