diff --git a/config/kernel-percpu.m4 b/config/kernel-percpu.m4
index e9654a69ee..700d97a258 100644
--- a/config/kernel-percpu.m4
+++ b/config/kernel-percpu.m4
@@ -25,10 +25,36 @@ AC_DEFUN([ZFS_AC_KERNEL_PERCPU_COUNTER_INIT], [
 	])
 ])
 
+dnl #
+dnl # 5.10 API change,
+dnl # The "count" was moved into ref->data, from ref
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_SRC_PERCPU_REF_COUNT_IN_DATA], [
+	ZFS_LINUX_TEST_SRC([percpu_ref_count_in_data], [
+		#include <linux/percpu-refcount.h>
+	],[
+		struct percpu_ref_data d;
+
+		atomic_long_set(&d.count, 1L);
+	])
+])
+
+AC_DEFUN([ZFS_AC_KERNEL_PERCPU_REF_COUNT_IN_DATA], [
+	AC_MSG_CHECKING([whether is inside percpu_ref.data])
+	ZFS_LINUX_TEST_RESULT([percpu_ref_count_in_data], [
+		AC_MSG_RESULT(yes)
+		AC_DEFINE(ZFS_PERCPU_REF_COUNT_IN_DATA, 1,
+		    [count is located in percpu_ref.data])
+	],[
+		AC_MSG_RESULT(no)
+	])
+])
 AC_DEFUN([ZFS_AC_KERNEL_SRC_PERCPU], [
 	ZFS_AC_KERNEL_SRC_PERCPU_COUNTER_INIT
+	ZFS_AC_KERNEL_SRC_PERCPU_REF_COUNT_IN_DATA
 ])
 
 AC_DEFUN([ZFS_AC_KERNEL_PERCPU], [
 	ZFS_AC_KERNEL_PERCPU_COUNTER_INIT
+	ZFS_AC_KERNEL_PERCPU_REF_COUNT_IN_DATA
 ])
diff --git a/module/os/linux/zfs/vdev_disk.c b/module/os/linux/zfs/vdev_disk.c
index a54961c768..858edc63bf 100644
--- a/module/os/linux/zfs/vdev_disk.c
+++ b/module/os/linux/zfs/vdev_disk.c
@@ -468,7 +468,11 @@ vdev_blkg_tryget(struct blkcg_gq *blkg)
 		this_cpu_inc(*count);
 		rc = true;
 	} else {
+#ifdef ZFS_PERCPU_REF_COUNT_IN_DATA
+		rc = atomic_long_inc_not_zero(&ref->data->count);
+#else
 		rc = atomic_long_inc_not_zero(&ref->count);
+#endif
 	}
 
 	rcu_read_unlock_sched();