21 #include <linux/list.h>
22 #include <linux/slab.h>
25 #include <linux/export.h>
30 #define DM_MSG_PREFIX "uevent"
36 } _dm_uevent_type_names[] = {
61 event = kmem_cache_zalloc(_dm_event_cache,
GFP_ATOMIC);
65 INIT_LIST_HEAD(&event->
elist);
74 const char *dm_action,
76 unsigned nr_valid_paths)
80 event = dm_uevent_alloc(md);
82 DMERR(
"%s: dm_uevent_alloc() failed", __func__);
89 DMERR(
"%s: add_uevent_var() for DM_TARGET failed",
95 DMERR(
"%s: add_uevent_var() for DM_ACTION failed",
102 DMERR(
"%s: add_uevent_var() for DM_SEQNUM failed",
108 DMERR(
"%s: add_uevent_var() for DM_PATH failed", __func__);
114 DMERR(
"%s: add_uevent_var() for DM_NR_VALID_PATHS failed",
122 dm_uevent_free(event);
140 list_del_init(&event->
elist);
148 DMINFO(
"%s: skipping sending uevent for lost device",
154 DMERR(
"%s: add_uevent_var() for DM_NAME failed",
160 DMERR(
"%s: add_uevent_var() for DM_UUID failed",
167 DMERR(
"%s: kobject_uevent_env failed", __func__);
169 dm_uevent_free(event);
184 const char *path,
unsigned nr_valid_paths)
189 if (event_type >=
ARRAY_SIZE(_dm_uevent_type_names)) {
190 DMERR(
"%s: Invalid event_type %d", __func__, event_type);
194 event = dm_build_path_uevent(md, ti,
195 _dm_uevent_type_names[event_type].action,
196 _dm_uevent_type_names[event_type].
name,
197 path, nr_valid_paths);
208 if (!_dm_event_cache)