Revision 1:
  2.5 backport

Revision 2:
  The locking when leaving __request was broken.
  
  Split off __deferring()

Revision 3:
  s->table wasn't being set in the snapshot contructor

Revision 4:
  I don't know why dm-ioctl.c was including <linux/compatmac.h>
  rather than <asm/uaccess.h>

Revision 5:
  Four constants:
     DM_DIR,
     DM_MAX_TYPE_NAME,
     DM_NAME_LEN,
     DM_UUID_LEN
  
  Were being declared in device-mapper.h, these are all specific to 
  the ioctl interface, so they've been moved to dm-ioctl.h.  Nobody
  in userland should ever include <linux/device-mapper.h> so remove 
  ifdef __KERNEL guards.

Revision 6:
  No need to validate the parameters if we are doing a
  REMOVE_ALL command.

Revision 7:
  Fluff

Revision 8:
  Mempool version by Christoph Hellwig that holds the free objects
  in an array rather than a list.  This prevents the objects getting
  dirtied, eg, people maybe expecting them to come out of a slab with
  a particular state.

Revision 9:
  Return -ENOTBLK if lookup_device() finds the inode, but it
  is not a block device. [Cristoph Hellwig]

Revision 10:
  get_kdev() was locking _minor_lock rather than
  &_minor_lock. [Heinz Mauelshagen]

Revision 11:
  minor change for dm-strip.c. Tests for correct chunksize before it allocates
  the stripe context. [Heinz Mauelshagen]

Revision 12:
  There's a bug in the dm-stripe.c constructor failing top check if enough
  destinations are handed in. [Heinz Mauelshagen]

Revision 13:
  Give each device its own io mempool to avoid a potential
  deadlock with stacked devices.  [HM + EJT]

Revision 14:
  Let the persistent/non persistent arg to the snapshot constructor
  be case insensitive. [Heinz Mauelshagen]

Revision 15:
  queue_io() was checking the DMF_SUSPENDED flag rather than the new
  DMF_BLOCK_IO flag.  This meant suspend could deadlock under load.

Revision 16:
  dm_suspend(): Stop holding the read lock around the while loop that
  waits for pending io to complete.

Revision 17:
  Add a run_task_queue(&tq_disk) to encourage pending io to flush
  when we're doing a dm_suspend().

Revision 18:
  Don't hook the io until after the target->map function has been
  called.

Revision 19:
  Lift the dm_io allocation out of __map_buffer so that it is outside of
  the read lock.
  
  Hook all io, not just simple mappings.

Revision 20:
  Use a rw_semaphore in dm_target.c rather than a rwlock_t, just to keep
  in line with dm.c

Revision 21:
  Don't let the ioctl interface drop a suspended device.

Revision 22:
  Call dm_put_target_type() *after* calling the destructor.

Revision 23:
  Fluff

Revision 24:
  printk tgt->error if dm_table_add_target() fails.

Revision 25:
  Just return an error from the error targets map function, rather than
  erroring the buffer_head.

Revision 26:
  Export dm_table_get_mode()

Revision 27:
  If an alloc_page() call fails in init_pages(), unlock all locked
  pages before freeing them. [Kevin Corry]

Revision 28:
  The calls to calc_block_sizes() in kcopyd_write_pages() and kcopyd_copy() are
  redundant, since kcopyd_io() already calls calc_block_sizes().

Revision 29:
  Remove the line in dispatch_bh() that sets bh->b_dev to B_FREE, since it sets
  bh->b_dev to job->disk.dev a few lines later. [Kevin Corry]

Revision 30:
  Move a set_bit() into the preceeding assignment statement.  [Kevin Corry]

Revision 31:
  Set bh->b_count to 1 in dispatch_bh().  [Kevin Corry]

Revision 32:
  Comment fix in run_pages_job().  [Kevin Corry]

Revision 33:
  In copy_write(), don't need to set job->context = info, since it is already
  set to that when the function is called.  [Kevin Corry]

Revision 34:
  Always halt a copy if the read part failed, not just when there is a
  notify_fn (fix coding error).  [Kevin Corry]

Revision 35:
  'Persistent' flag checking in the snapshot target constructor had a
  coding error which meant that it was always invalid.

Revision 36:
  Introduce an end_io method to the target types.

Revision 37:
  Allow the map method to pass some context to the endio method.