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