dm-target.c (748c5151deb56e4b7b5a9b07a884243764933831) | dm-target.c (10d3bd09a3c25df114f74f7f86e1b58d070bef32) |
---|---|
1/* 2 * Copyright (C) 2001 Sistina Software (UK) Limited 3 * 4 * This file is released under the GPL. 5 */ 6 7#include "dm.h" 8 --- 116 unchanged lines hidden (view full) --- 125 list_add(&ti->list, &_targets); 126 127 up_write(&_lock); 128 if (rv) 129 kfree(ti); 130 return rv; 131} 132 | 1/* 2 * Copyright (C) 2001 Sistina Software (UK) Limited 3 * 4 * This file is released under the GPL. 5 */ 6 7#include "dm.h" 8 --- 116 unchanged lines hidden (view full) --- 125 list_add(&ti->list, &_targets); 126 127 up_write(&_lock); 128 if (rv) 129 kfree(ti); 130 return rv; 131} 132 |
133int dm_unregister_target(struct target_type *t) | 133void dm_unregister_target(struct target_type *t) |
134{ 135 struct tt_internal *ti; 136 137 down_write(&_lock); 138 if (!(ti = __find_target_type(t->name))) { | 134{ 135 struct tt_internal *ti; 136 137 down_write(&_lock); 138 if (!(ti = __find_target_type(t->name))) { |
139 up_write(&_lock); 140 return -EINVAL; | 139 DMCRIT("Unregistering unrecognised target: %s", t->name); 140 BUG(); |
141 } 142 143 if (ti->use) { | 141 } 142 143 if (ti->use) { |
144 up_write(&_lock); 145 return -ETXTBSY; | 144 DMCRIT("Attempt to unregister target still in use: %s", 145 t->name); 146 BUG(); |
146 } 147 148 list_del(&ti->list); 149 kfree(ti); 150 151 up_write(&_lock); | 147 } 148 149 list_del(&ti->list); 150 kfree(ti); 151 152 up_write(&_lock); |
152 return 0; | |
153} 154 155/* 156 * io-err: always fails an io, useful for bringing 157 * up LVs that have holes in them. 158 */ 159static int io_err_ctr(struct dm_target *ti, unsigned int argc, char **args) 160{ --- 21 unchanged lines hidden (view full) --- 182 183int __init dm_target_init(void) 184{ 185 return dm_register_target(&error_target); 186} 187 188void dm_target_exit(void) 189{ | 153} 154 155/* 156 * io-err: always fails an io, useful for bringing 157 * up LVs that have holes in them. 158 */ 159static int io_err_ctr(struct dm_target *ti, unsigned int argc, char **args) 160{ --- 21 unchanged lines hidden (view full) --- 182 183int __init dm_target_init(void) 184{ 185 return dm_register_target(&error_target); 186} 187 188void dm_target_exit(void) 189{ |
190 if (dm_unregister_target(&error_target)) 191 DMWARN("error target unregistration failed"); | 190 dm_unregister_target(&error_target); |
192} 193 194EXPORT_SYMBOL(dm_register_target); 195EXPORT_SYMBOL(dm_unregister_target); | 191} 192 193EXPORT_SYMBOL(dm_register_target); 194EXPORT_SYMBOL(dm_unregister_target); |