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