xref: /linux/drivers/md/dm-uevent.c (revision 51e5b2bd34ded40ef48cade8a6a8f1baa0b4275e)
1*51e5b2bdSMike Anderson /*
2*51e5b2bdSMike Anderson  * Device Mapper Uevent Support (dm-uevent)
3*51e5b2bdSMike Anderson  *
4*51e5b2bdSMike Anderson  * This program is free software; you can redistribute it and/or modify it
5*51e5b2bdSMike Anderson  * under the terms of the GNU General Public License as published by the
6*51e5b2bdSMike Anderson  * Free Software Foundation; either version 2 of the License, or (at your
7*51e5b2bdSMike Anderson  * option) any later version.
8*51e5b2bdSMike Anderson  *
9*51e5b2bdSMike Anderson  * This program is distributed in the hope that it will be useful, but
10*51e5b2bdSMike Anderson  * WITHOUT ANY WARRANTY; without even the implied warranty of
11*51e5b2bdSMike Anderson  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12*51e5b2bdSMike Anderson  * General Public License for more details.
13*51e5b2bdSMike Anderson  *
14*51e5b2bdSMike Anderson  * You should have received a copy of the GNU General Public License along
15*51e5b2bdSMike Anderson  * with this program; if not, write to the Free Software Foundation, Inc.,
16*51e5b2bdSMike Anderson  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17*51e5b2bdSMike Anderson  *
18*51e5b2bdSMike Anderson  * Copyright IBM Corporation, 2007
19*51e5b2bdSMike Anderson  * 	Author: Mike Anderson <andmike@linux.vnet.ibm.com>
20*51e5b2bdSMike Anderson  */
21*51e5b2bdSMike Anderson #include <linux/list.h>
22*51e5b2bdSMike Anderson #include <linux/slab.h>
23*51e5b2bdSMike Anderson #include <linux/kobject.h>
24*51e5b2bdSMike Anderson 
25*51e5b2bdSMike Anderson #include "dm.h"
26*51e5b2bdSMike Anderson #include "dm-uevent.h"
27*51e5b2bdSMike Anderson 
28*51e5b2bdSMike Anderson #define DM_MSG_PREFIX "uevent"
29*51e5b2bdSMike Anderson 
30*51e5b2bdSMike Anderson static struct kmem_cache *_dm_event_cache;
31*51e5b2bdSMike Anderson 
32*51e5b2bdSMike Anderson struct dm_uevent {
33*51e5b2bdSMike Anderson 	struct mapped_device *md;
34*51e5b2bdSMike Anderson 	enum kobject_action action;
35*51e5b2bdSMike Anderson 	struct kobj_uevent_env ku_env;
36*51e5b2bdSMike Anderson 	struct list_head elist;
37*51e5b2bdSMike Anderson };
38*51e5b2bdSMike Anderson 
39*51e5b2bdSMike Anderson static void dm_uevent_free(struct dm_uevent *event)
40*51e5b2bdSMike Anderson {
41*51e5b2bdSMike Anderson 	kmem_cache_free(_dm_event_cache, event);
42*51e5b2bdSMike Anderson }
43*51e5b2bdSMike Anderson 
44*51e5b2bdSMike Anderson static struct dm_uevent *dm_uevent_alloc(struct mapped_device *md)
45*51e5b2bdSMike Anderson {
46*51e5b2bdSMike Anderson 	struct dm_uevent *event;
47*51e5b2bdSMike Anderson 
48*51e5b2bdSMike Anderson 	event = kmem_cache_zalloc(_dm_event_cache, GFP_ATOMIC);
49*51e5b2bdSMike Anderson 	if (!event)
50*51e5b2bdSMike Anderson 		return NULL;
51*51e5b2bdSMike Anderson 
52*51e5b2bdSMike Anderson 	INIT_LIST_HEAD(&event->elist);
53*51e5b2bdSMike Anderson 	event->md = md;
54*51e5b2bdSMike Anderson 
55*51e5b2bdSMike Anderson 	return event;
56*51e5b2bdSMike Anderson }
57*51e5b2bdSMike Anderson 
58*51e5b2bdSMike Anderson int dm_uevent_init(void)
59*51e5b2bdSMike Anderson {
60*51e5b2bdSMike Anderson 	_dm_event_cache = KMEM_CACHE(dm_uevent, 0);
61*51e5b2bdSMike Anderson 	if (!_dm_event_cache)
62*51e5b2bdSMike Anderson 		return -ENOMEM;
63*51e5b2bdSMike Anderson 
64*51e5b2bdSMike Anderson 	DMINFO("version 1.0.3");
65*51e5b2bdSMike Anderson 
66*51e5b2bdSMike Anderson 	return 0;
67*51e5b2bdSMike Anderson }
68*51e5b2bdSMike Anderson 
69*51e5b2bdSMike Anderson void dm_uevent_exit(void)
70*51e5b2bdSMike Anderson {
71*51e5b2bdSMike Anderson 	kmem_cache_destroy(_dm_event_cache);
72*51e5b2bdSMike Anderson }
73