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);