]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * Copyright (C) 2003 Sistina Software | |
22a1ceb1 HM |
3 | * Copyright (C) 2004 - 2008 Red Hat, Inc. All rights reserved. |
4 | * | |
5 | * Device-Mapper low-level I/O. | |
1da177e4 LT |
6 | * |
7 | * This file is released under the GPL. | |
8 | */ | |
9 | ||
22a1ceb1 HM |
10 | #ifndef _LINUX_DM_IO_H |
11 | #define _LINUX_DM_IO_H | |
12 | ||
13 | #ifdef __KERNEL__ | |
1da177e4 | 14 | |
22a1ceb1 | 15 | #include <linux/types.h> |
1da177e4 | 16 | |
22a1ceb1 | 17 | struct dm_io_region { |
1da177e4 LT |
18 | struct block_device *bdev; |
19 | sector_t sector; | |
bf17ce3a | 20 | sector_t count; /* If this is zero the region is ignored. */ |
1da177e4 LT |
21 | }; |
22 | ||
23 | struct page_list { | |
24 | struct page_list *next; | |
25 | struct page *page; | |
26 | }; | |
27 | ||
1da177e4 LT |
28 | typedef void (*io_notify_fn)(unsigned long error, void *context); |
29 | ||
c8b03afe HM |
30 | enum dm_io_mem_type { |
31 | DM_IO_PAGE_LIST,/* Page list */ | |
32 | DM_IO_BVEC, /* Bio vector */ | |
33 | DM_IO_VMA, /* Virtual memory area */ | |
34 | DM_IO_KMEM, /* Kernel memory */ | |
35 | }; | |
36 | ||
37 | struct dm_io_memory { | |
38 | enum dm_io_mem_type type; | |
39 | ||
924e600d MS |
40 | unsigned offset; |
41 | ||
c8b03afe HM |
42 | union { |
43 | struct page_list *pl; | |
44 | struct bio_vec *bvec; | |
45 | void *vma; | |
46 | void *addr; | |
47 | } ptr; | |
c8b03afe HM |
48 | }; |
49 | ||
50 | struct dm_io_notify { | |
51 | io_notify_fn fn; /* Callback for asynchronous requests */ | |
52 | void *context; /* Passed to callback */ | |
53 | }; | |
54 | ||
55 | /* | |
56 | * IO request structure | |
57 | */ | |
58 | struct dm_io_client; | |
59 | struct dm_io_request { | |
60 | int bi_rw; /* READ|WRITE - not READA */ | |
61 | struct dm_io_memory mem; /* Memory to use for io */ | |
62 | struct dm_io_notify notify; /* Synchronous if notify.fn is NULL */ | |
63 | struct dm_io_client *client; /* Client memory handler */ | |
64 | }; | |
1da177e4 | 65 | |
c8b03afe HM |
66 | /* |
67 | * For async io calls, users can alternatively use the dm_io() function below | |
68 | * and dm_io_client_create() to create private mempools for the client. | |
69 | * | |
70 | * Create/destroy may block. | |
71 | */ | |
bda8efec | 72 | struct dm_io_client *dm_io_client_create(void); |
c8b03afe HM |
73 | void dm_io_client_destroy(struct dm_io_client *client); |
74 | ||
c8b03afe HM |
75 | /* |
76 | * IO interface using private per-client pools. | |
bf17ce3a MB |
77 | * Each bit in the optional 'sync_error_bits' bitset indicates whether an |
78 | * error occurred doing io to the corresponding region. | |
c8b03afe HM |
79 | */ |
80 | int dm_io(struct dm_io_request *io_req, unsigned num_regions, | |
22a1ceb1 | 81 | struct dm_io_region *region, unsigned long *sync_error_bits); |
c8b03afe | 82 | |
22a1ceb1 HM |
83 | #endif /* __KERNEL__ */ |
84 | #endif /* _LINUX_DM_IO_H */ |