[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:
David Teigland 2006-06-26 00:27:33 -07:00 committed by Linus Torvalds
parent 17b2f66f2a
commit c2ade42dd3
2 changed files with 44 additions and 0 deletions

View File

@ -237,6 +237,44 @@ int dm_table_create(struct dm_table **result, int mode,
return 0; 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) static void free_devices(struct list_head *devices)
{ {
struct list_head *tmp, *next; struct list_head *tmp, *next;

View File

@ -227,5 +227,11 @@ void dm_table_event(struct dm_table *t);
*/ */
int dm_swap_table(struct mapped_device *md, 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 /* __KERNEL__ */
#endif /* _LINUX_DEVICE_MAPPER_H */ #endif /* _LINUX_DEVICE_MAPPER_H */