[PATCH] dm: create error table
Add a library function dm_create_error_table() to create a table that rejects any I/O sent to a device with EIO. Signed-off-by: Alasdair G Kergon <agk@redhat.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
17b2f66f2a
commit
c2ade42dd3
|
@ -237,6 +237,44 @@ int dm_table_create(struct dm_table **result, int mode,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int dm_create_error_table(struct dm_table **result, struct mapped_device *md)
|
||||
{
|
||||
struct dm_table *t;
|
||||
sector_t dev_size = 1;
|
||||
int r;
|
||||
|
||||
/*
|
||||
* Find current size of device.
|
||||
* Default to 1 sector if inactive.
|
||||
*/
|
||||
t = dm_get_table(md);
|
||||
if (t) {
|
||||
dev_size = dm_table_get_size(t);
|
||||
dm_table_put(t);
|
||||
}
|
||||
|
||||
r = dm_table_create(&t, FMODE_READ, 1, md);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
r = dm_table_add_target(t, "error", 0, dev_size, NULL);
|
||||
if (r)
|
||||
goto out;
|
||||
|
||||
r = dm_table_complete(t);
|
||||
if (r)
|
||||
goto out;
|
||||
|
||||
*result = t;
|
||||
|
||||
out:
|
||||
if (r)
|
||||
dm_table_put(t);
|
||||
|
||||
return r;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dm_create_error_table);
|
||||
|
||||
static void free_devices(struct list_head *devices)
|
||||
{
|
||||
struct list_head *tmp, *next;
|
||||
|
|
|
@ -227,5 +227,11 @@ void dm_table_event(struct dm_table *t);
|
|||
*/
|
||||
int dm_swap_table(struct mapped_device *md, struct dm_table *t);
|
||||
|
||||
/*
|
||||
* Prepare a table for a device that will error all I/O.
|
||||
* To make it active, call dm_suspend(), dm_swap_table() then dm_resume().
|
||||
*/
|
||||
int dm_create_error_table(struct dm_table **result, struct mapped_device *md);
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* _LINUX_DEVICE_MAPPER_H */
|
||||
|
|
Loading…
Reference in New Issue