2  * Copyright (C) 2003 Sistina Software
 
   4  * This file is released under the GPL.
 
  13         struct block_device *bdev;
 
  15         sector_t count;         /* If this is zero the region is ignored. */
 
  19         struct page_list *next;
 
  23 typedef void (*io_notify_fn)(unsigned long error, void *context);
 
  26         DM_IO_PAGE_LIST,/* Page list */
 
  27         DM_IO_BVEC,     /* Bio vector */
 
  28         DM_IO_VMA,      /* Virtual memory area */
 
  29         DM_IO_KMEM,     /* Kernel memory */
 
  33         enum dm_io_mem_type type;
 
  46         io_notify_fn fn;        /* Callback for asynchronous requests */
 
  47         void *context;          /* Passed to callback */
 
  51  * IO request structure
 
  54 struct dm_io_request {
 
  55         int bi_rw;                      /* READ|WRITE - not READA */
 
  56         struct dm_io_memory mem;        /* Memory to use for io */
 
  57         struct dm_io_notify notify;     /* Synchronous if notify.fn is NULL */
 
  58         struct dm_io_client *client;    /* Client memory handler */
 
  62  * For async io calls, users can alternatively use the dm_io() function below
 
  63  * and dm_io_client_create() to create private mempools for the client.
 
  65  * Create/destroy may block.
 
  67 struct dm_io_client *dm_io_client_create(unsigned num_pages);
 
  68 int dm_io_client_resize(unsigned num_pages, struct dm_io_client *client);
 
  69 void dm_io_client_destroy(struct dm_io_client *client);
 
  72  * IO interface using private per-client pools.
 
  73  * Each bit in the optional 'sync_error_bits' bitset indicates whether an
 
  74  * error occurred doing io to the corresponding region.
 
  76 int dm_io(struct dm_io_request *io_req, unsigned num_regions,
 
  77           struct io_region *region, unsigned long *sync_error_bits);