#include <linux/blkdev.h>
#include <linux/device-mapper.h>
#include <linux/kdev_t.h>
#include <linux/mempool.h>
#include <linux/module.h>
#include <linux/vmalloc.h>
#include <linux/dm-kcopyd.h>
#include <linux/semaphore.h>
#include "dm-exception-store.h"
#define DM_MSG_PREFIX "snapshots"
static const char dm_snapshot_merge_target_name[] = "snapshot-merge";
#define dm_target_is_snapshot_merge(ti) \
((ti)->type->name == dm_snapshot_merge_target_name)
#define DM_TRACKED_CHUNK_HASH_SIZE 16
#define DM_TRACKED_CHUNK_HASH(x) ((unsigned long)(x) & \
(DM_TRACKED_CHUNK_HASH_SIZE - 1))
struct dm_exception_table {