aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib/openzfs/module/os/linux/spl/spl-generic.c
diff options
context:
space:
mode:
authorMartin Matuska <mm@FreeBSD.org>2022-10-04 18:16:52 +0000
committerMartin Matuska <mm@FreeBSD.org>2022-10-04 18:16:52 +0000
commitbe181ee2a28aa2b4b0e76684bce9f673ef668874 (patch)
tree3594f08f35049ed06224974f8464c2c3b7bf9426 /sys/contrib/openzfs/module/os/linux/spl/spl-generic.c
parent6a720fb95a1bc39c6417fa6200789edfe99d5256 (diff)
parentd62bafee9fc38f8b9653c531e1861e83dcba4618 (diff)
downloadsrc-be181ee2a28aa2b4b0e76684bce9f673ef668874.tar.gz
src-be181ee2a28aa2b4b0e76684bce9f673ef668874.zip
zfs: merge openzfs/zfs@d62bafee9
Notable upstream pull request merges: #13857 Enforce "-F" flag on resuming recv of full/newfs on existing dataset #13928 Revert "Reduce dbuf_find() lock contention" #13928 Dynamically size dbuf hash mutex array #13930 zpool: Don't print "repairing" on force faulted drives #13938 Bring per_txg_dirty_frees_percent back to 30 #13939 Fix panic in dsl_process_sub_livelist for EINTR #13954 Fix bad free in skein code #13967 Fix potential NULL pointer dereference in dsl_dataset_promote_check() Obtained from: OpenZFS OpenZFS commit: d62bafee9fc38f8b9653c531e1861e83dcba4618
Diffstat (limited to 'sys/contrib/openzfs/module/os/linux/spl/spl-generic.c')
-rw-r--r--sys/contrib/openzfs/module/os/linux/spl/spl-generic.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/sys/contrib/openzfs/module/os/linux/spl/spl-generic.c b/sys/contrib/openzfs/module/os/linux/spl/spl-generic.c
index de91c44257aa..bc39ece9a427 100644
--- a/sys/contrib/openzfs/module/os/linux/spl/spl-generic.c
+++ b/sys/contrib/openzfs/module/os/linux/spl/spl-generic.c
@@ -47,6 +47,7 @@
#include <linux/mod_compat.h>
#include <sys/cred.h>
#include <sys/vnode.h>
+#include <sys/misc.h>
unsigned long spl_hostid = 0;
EXPORT_SYMBOL(spl_hostid);
@@ -517,6 +518,38 @@ ddi_copyin(const void *from, void *to, size_t len, int flags)
}
EXPORT_SYMBOL(ddi_copyin);
+/*
+ * Post a uevent to userspace whenever a new vdev adds to the pool. It is
+ * necessary to sync blkid information with udev, which zed daemon uses
+ * during device hotplug to identify the vdev.
+ */
+void
+spl_signal_kobj_evt(struct block_device *bdev)
+{
+#if defined(HAVE_BDEV_KOBJ) || defined(HAVE_PART_TO_DEV)
+#ifdef HAVE_BDEV_KOBJ
+ struct kobject *disk_kobj = bdev_kobj(bdev);
+#else
+ struct kobject *disk_kobj = &part_to_dev(bdev->bd_part)->kobj;
+#endif
+ if (disk_kobj) {
+ int ret = kobject_uevent(disk_kobj, KOBJ_CHANGE);
+ if (ret) {
+ pr_warn("ZFS: Sending event '%d' to kobject: '%s'"
+ " (%p): failed(ret:%d)\n", KOBJ_CHANGE,
+ kobject_name(disk_kobj), disk_kobj, ret);
+ }
+ }
+#else
+/*
+ * This is encountered if neither bdev_kobj() nor part_to_dev() is available
+ * in the kernel - likely due to an API change that needs to be chased down.
+ */
+#error "Unsupported kernel: unable to get struct kobj from bdev"
+#endif
+}
+EXPORT_SYMBOL(spl_signal_kobj_evt);
+
int
ddi_copyout(const void *from, void *to, size_t len, int flags)
{