diff options
author | Martin Matuska <mm@FreeBSD.org> | 2022-10-04 18:16:52 +0000 |
---|---|---|
committer | Martin Matuska <mm@FreeBSD.org> | 2022-10-04 18:16:52 +0000 |
commit | be181ee2a28aa2b4b0e76684bce9f673ef668874 (patch) | |
tree | 3594f08f35049ed06224974f8464c2c3b7bf9426 /sys/contrib/openzfs/module/os/linux/spl/spl-generic.c | |
parent | 6a720fb95a1bc39c6417fa6200789edfe99d5256 (diff) | |
parent | d62bafee9fc38f8b9653c531e1861e83dcba4618 (diff) | |
download | src-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.c | 33 |
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) { |