Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

dm: add uevent to core

This patch adds a uevent skeleton to device-mapper.

Signed-off-by: Mike Anderson <andmike@linux.vnet.ibm.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>

authored by

Mike Anderson and committed by
Alasdair G Kergon
51e5b2bd 96a1f7db

+133
+6
drivers/md/Kconfig
··· 282 282 283 283 If unsure, say N. 284 284 285 + config DM_UEVENT 286 + bool "DM uevents (EXPERIMENTAL)" 287 + depends on BLK_DEV_DM && EXPERIMENTAL 288 + ---help--- 289 + Generate udev events for DM events. 290 + 285 291 endif # MD
+4
drivers/md/Makefile
··· 50 50 altivec_flags := -maltivec -mabi=altivec 51 51 endif 52 52 53 + ifeq ($(CONFIG_DM_UEVENT),y) 54 + dm-mod-objs += dm-uevent.o 55 + endif 56 + 53 57 targets += raid6int1.c 54 58 $(obj)/raid6int1.c: UNROLL := 1 55 59 $(obj)/raid6int1.c: $(src)/raid6int.uc $(src)/unroll.pl FORCE
+72
drivers/md/dm-uevent.c
··· 1 + /* 2 + * Device Mapper Uevent Support (dm-uevent) 3 + * 4 + * This program is free software; you can redistribute it and/or modify it 5 + * under the terms of the GNU General Public License as published by the 6 + * Free Software Foundation; either version 2 of the License, or (at your 7 + * option) any later version. 8 + * 9 + * This program is distributed in the hope that it will be useful, but 10 + * WITHOUT ANY WARRANTY; without even the implied warranty of 11 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 + * General Public License for more details. 13 + * 14 + * You should have received a copy of the GNU General Public License along 15 + * with this program; if not, write to the Free Software Foundation, Inc., 16 + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 + * 18 + * Copyright IBM Corporation, 2007 19 + * Author: Mike Anderson <andmike@linux.vnet.ibm.com> 20 + */ 21 + #include <linux/list.h> 22 + #include <linux/slab.h> 23 + #include <linux/kobject.h> 24 + 25 + #include "dm.h" 26 + #include "dm-uevent.h" 27 + 28 + #define DM_MSG_PREFIX "uevent" 29 + 30 + static struct kmem_cache *_dm_event_cache; 31 + 32 + struct dm_uevent { 33 + struct mapped_device *md; 34 + enum kobject_action action; 35 + struct kobj_uevent_env ku_env; 36 + struct list_head elist; 37 + }; 38 + 39 + static void dm_uevent_free(struct dm_uevent *event) 40 + { 41 + kmem_cache_free(_dm_event_cache, event); 42 + } 43 + 44 + static struct dm_uevent *dm_uevent_alloc(struct mapped_device *md) 45 + { 46 + struct dm_uevent *event; 47 + 48 + event = kmem_cache_zalloc(_dm_event_cache, GFP_ATOMIC); 49 + if (!event) 50 + return NULL; 51 + 52 + INIT_LIST_HEAD(&event->elist); 53 + event->md = md; 54 + 55 + return event; 56 + } 57 + 58 + int dm_uevent_init(void) 59 + { 60 + _dm_event_cache = KMEM_CACHE(dm_uevent, 0); 61 + if (!_dm_event_cache) 62 + return -ENOMEM; 63 + 64 + DMINFO("version 1.0.3"); 65 + 66 + return 0; 67 + } 68 + 69 + void dm_uevent_exit(void) 70 + { 71 + kmem_cache_destroy(_dm_event_cache); 72 + }
+41
drivers/md/dm-uevent.h
··· 1 + /* 2 + * Device Mapper Uevent Support 3 + * 4 + * This program is free software; you can redistribute it and/or modify it 5 + * under the terms of the GNU General Public License as published by the 6 + * Free Software Foundation; either version 2 of the License, or (at your 7 + * option) any later version. 8 + * 9 + * This program is distributed in the hope that it will be useful, but 10 + * WITHOUT ANY WARRANTY; without even the implied warranty of 11 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 + * General Public License for more details. 13 + * 14 + * You should have received a copy of the GNU General Public License along 15 + * with this program; if not, write to the Free Software Foundation, Inc., 16 + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 + * 18 + * Copyright IBM Corporation, 2007 19 + * Author: Mike Anderson <andmike@linux.vnet.ibm.com> 20 + */ 21 + #ifndef DM_UEVENT_H 22 + #define DM_UEVENT_H 23 + 24 + #ifdef CONFIG_DM_UEVENT 25 + 26 + extern int dm_uevent_init(void); 27 + extern void dm_uevent_exit(void); 28 + 29 + #else 30 + 31 + static inline int dm_uevent_init(void) 32 + { 33 + return 0; 34 + } 35 + static inline void dm_uevent_exit(void) 36 + { 37 + } 38 + 39 + #endif /* CONFIG_DM_UEVENT */ 40 + 41 + #endif /* DM_UEVENT_H */
+10
drivers/md/dm.c
··· 7 7 8 8 #include "dm.h" 9 9 #include "dm-bio-list.h" 10 + #include "dm-uevent.h" 10 11 11 12 #include <linux/init.h> 12 13 #include <linux/module.h> ··· 144 143 return -ENOMEM; 145 144 } 146 145 146 + r = dm_uevent_init(); 147 + if (r) { 148 + kmem_cache_destroy(_tio_cache); 149 + kmem_cache_destroy(_io_cache); 150 + return r; 151 + } 152 + 147 153 _major = major; 148 154 r = register_blkdev(_major, _name); 149 155 if (r < 0) { 150 156 kmem_cache_destroy(_tio_cache); 151 157 kmem_cache_destroy(_io_cache); 158 + dm_uevent_exit(); 152 159 return r; 153 160 } 154 161 ··· 171 162 kmem_cache_destroy(_tio_cache); 172 163 kmem_cache_destroy(_io_cache); 173 164 unregister_blkdev(_major, _name); 165 + dm_uevent_exit(); 174 166 175 167 _major = 0; 176 168