#include "dm.h"
#include <linux/device-mapper.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/blkdev.h>
#include <linux/bio.h>
#include <linux/dax.h>
#include <linux/slab.h>
#include <linux/log2.h>
static struct workqueue_struct *dm_stripe_wq;
#define DM_MSG_PREFIX …
#define DM_IO_ERROR_THRESHOLD …
struct stripe { … };
struct stripe_c { … };
static void trigger_event(struct work_struct *work)
{ … }
static int get_stripe(struct dm_target *ti, struct stripe_c *sc,
unsigned int stripe, char **argv)
{ … }
static int stripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
{ … }
static void stripe_dtr(struct dm_target *ti)
{ … }
static void stripe_map_sector(struct stripe_c *sc, sector_t sector,
uint32_t *stripe, sector_t *result)
{ … }
static void stripe_map_range_sector(struct stripe_c *sc, sector_t sector,
uint32_t target_stripe, sector_t *result)
{ … }
static int stripe_map_range(struct stripe_c *sc, struct bio *bio,
uint32_t target_stripe)
{ … }
int stripe_map(struct dm_target *ti, struct bio *bio)
{ … }
#if IS_ENABLED(CONFIG_FS_DAX)
static struct dax_device *stripe_dax_pgoff(struct dm_target *ti, pgoff_t *pgoff)
{ … }
static long stripe_dax_direct_access(struct dm_target *ti, pgoff_t pgoff,
long nr_pages, enum dax_access_mode mode, void **kaddr,
pfn_t *pfn)
{ … }
static int stripe_dax_zero_page_range(struct dm_target *ti, pgoff_t pgoff,
size_t nr_pages)
{ … }
static size_t stripe_dax_recovery_write(struct dm_target *ti, pgoff_t pgoff,
void *addr, size_t bytes, struct iov_iter *i)
{ … }
#else
#define stripe_dax_direct_access …
#define stripe_dax_zero_page_range …
#define stripe_dax_recovery_write …
#endif
static void stripe_status(struct dm_target *ti, status_type_t type,
unsigned int status_flags, char *result, unsigned int maxlen)
{ … }
static int stripe_end_io(struct dm_target *ti, struct bio *bio,
blk_status_t *error)
{ … }
static int stripe_iterate_devices(struct dm_target *ti,
iterate_devices_callout_fn fn, void *data)
{ … }
static void stripe_io_hints(struct dm_target *ti,
struct queue_limits *limits)
{ … }
static struct target_type stripe_target = …;
int __init dm_stripe_init(void)
{ … }
void dm_stripe_exit(void)
{ … }