1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * Copyright (C) 2001 Sistina Software (UK) Limited.
4 * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved.
6 * This file is released under the LGPL.
9 #ifndef _LINUX_DEVICE_MAPPER_H
10 #define _LINUX_DEVICE_MAPPER_H
12 #include <linux/bio.h>
13 #include <linux/blkdev.h>
14 #include <linux/dm-ioctl.h>
15 #include <linux/math64.h>
16 #include <linux/ratelimit.h>
21 struct dm_report_zones_args
;
27 * Type of table, mapped_device's mempool and request_queue
31 DM_TYPE_BIO_BASED
= 1,
32 DM_TYPE_REQUEST_BASED
= 2,
33 DM_TYPE_DAX_BIO_BASED
= 3,
36 typedef enum { STATUSTYPE_INFO
, STATUSTYPE_TABLE
, STATUSTYPE_IMA
} status_type_t
;
43 * In the constructor the target parameter will already have the
44 * table, type, begin and len fields filled in.
46 typedef int (*dm_ctr_fn
) (struct dm_target
*target
,
47 unsigned int argc
, char **argv
);
50 * The destructor doesn't need to free the dm_target, just
51 * anything hidden ti->private.
53 typedef void (*dm_dtr_fn
) (struct dm_target
*ti
);
56 * The map function must return:
58 * = 0: The target will handle the io by resubmitting it later
59 * = 1: simple remap complete
60 * = 2: The target wants to push back the io
62 typedef int (*dm_map_fn
) (struct dm_target
*ti
, struct bio
*bio
);
63 typedef int (*dm_clone_and_map_request_fn
) (struct dm_target
*ti
,
65 union map_info
*map_context
,
66 struct request
**clone
);
67 typedef void (*dm_release_clone_request_fn
) (struct request
*clone
,
68 union map_info
*map_context
);
72 * < 0 : error (currently ignored)
73 * 0 : ended successfully
74 * 1 : for some reason the io has still not completed (eg,
75 * multipath target might want to requeue a failed io).
76 * 2 : The target wants to push back the io
78 typedef int (*dm_endio_fn
) (struct dm_target
*ti
,
79 struct bio
*bio
, blk_status_t
*error
);
80 typedef int (*dm_request_endio_fn
) (struct dm_target
*ti
,
81 struct request
*clone
, blk_status_t error
,
82 union map_info
*map_context
);
84 typedef void (*dm_presuspend_fn
) (struct dm_target
*ti
);
85 typedef void (*dm_presuspend_undo_fn
) (struct dm_target
*ti
);
86 typedef void (*dm_postsuspend_fn
) (struct dm_target
*ti
);
87 typedef int (*dm_preresume_fn
) (struct dm_target
*ti
);
88 typedef void (*dm_resume_fn
) (struct dm_target
*ti
);
90 typedef void (*dm_status_fn
) (struct dm_target
*ti
, status_type_t status_type
,
91 unsigned int status_flags
, char *result
, unsigned int maxlen
);
93 typedef int (*dm_message_fn
) (struct dm_target
*ti
, unsigned int argc
, char **argv
,
94 char *result
, unsigned int maxlen
);
96 typedef int (*dm_prepare_ioctl_fn
) (struct dm_target
*ti
, struct block_device
**bdev
);
98 #ifdef CONFIG_BLK_DEV_ZONED
99 typedef int (*dm_report_zones_fn
) (struct dm_target
*ti
,
100 struct dm_report_zones_args
*args
,
101 unsigned int nr_zones
);
104 * Define dm_report_zones_fn so that targets can assign to NULL if
105 * CONFIG_BLK_DEV_ZONED disabled. Otherwise each target needs to do
106 * awkward #ifdefs in their target_type, etc.
108 typedef int (*dm_report_zones_fn
) (struct dm_target
*dummy
);
112 * These iteration functions are typically used to check (and combine)
113 * properties of underlying devices.
114 * E.g. Does at least one underlying device support flush?
115 * Does any underlying device not support WRITE_SAME?
117 * The callout function is called once for each contiguous section of
118 * an underlying device. State can be maintained in *data.
119 * Return non-zero to stop iterating through any further devices.
121 typedef int (*iterate_devices_callout_fn
) (struct dm_target
*ti
,
123 sector_t start
, sector_t len
,
127 * This function must iterate through each section of device used by the
128 * target until it encounters a non-zero return code, which it then returns.
129 * Returns zero if no callout returned non-zero.
131 typedef int (*dm_iterate_devices_fn
) (struct dm_target
*ti
,
132 iterate_devices_callout_fn fn
,
135 typedef void (*dm_io_hints_fn
) (struct dm_target
*ti
,
136 struct queue_limits
*limits
);
140 * 0: The target can handle the next I/O immediately.
141 * 1: The target can't handle the next I/O immediately.
143 typedef int (*dm_busy_fn
) (struct dm_target
*ti
);
148 * >= 0 : the number of bytes accessible at the address
150 typedef long (*dm_dax_direct_access_fn
) (struct dm_target
*ti
, pgoff_t pgoff
,
151 long nr_pages
, enum dax_access_mode node
, void **kaddr
,
153 typedef int (*dm_dax_zero_page_range_fn
)(struct dm_target
*ti
, pgoff_t pgoff
,
158 * != 0 : number of bytes transferred
159 * 0 : recovery write failed
161 typedef size_t (*dm_dax_recovery_write_fn
)(struct dm_target
*ti
, pgoff_t pgoff
,
162 void *addr
, size_t bytes
, struct iov_iter
*i
);
164 void dm_error(const char *message
);
167 struct block_device
*bdev
;
168 struct file
*bdev_file
;
169 struct dax_device
*dax_dev
;
175 * Constructors should call these functions to ensure destination devices
176 * are opened/closed correctly.
178 int dm_get_device(struct dm_target
*ti
, const char *path
, blk_mode_t mode
,
179 struct dm_dev
**result
);
180 void dm_put_device(struct dm_target
*ti
, struct dm_dev
*d
);
183 * Helper function for getting devices
185 int dm_devt_from_path(const char *path
, dev_t
*dev_p
);
188 * Information about a target type
194 struct module
*module
;
195 unsigned int version
[3];
199 dm_clone_and_map_request_fn clone_and_map_rq
;
200 dm_release_clone_request_fn release_clone_rq
;
202 dm_request_endio_fn rq_end_io
;
203 dm_presuspend_fn presuspend
;
204 dm_presuspend_undo_fn presuspend_undo
;
205 dm_postsuspend_fn postsuspend
;
206 dm_preresume_fn preresume
;
209 dm_message_fn message
;
210 dm_prepare_ioctl_fn prepare_ioctl
;
211 dm_report_zones_fn report_zones
;
213 dm_iterate_devices_fn iterate_devices
;
214 dm_io_hints_fn io_hints
;
215 dm_dax_direct_access_fn direct_access
;
216 dm_dax_zero_page_range_fn dax_zero_page_range
;
217 dm_dax_recovery_write_fn dax_recovery_write
;
219 /* For internal device-mapper use. */
220 struct list_head list
;
228 * Any table that contains an instance of this target must have only one.
230 #define DM_TARGET_SINGLETON 0x00000001
231 #define dm_target_needs_singleton(type) ((type)->features & DM_TARGET_SINGLETON)
234 * Indicates that a target does not support read-only devices.
236 #define DM_TARGET_ALWAYS_WRITEABLE 0x00000002
237 #define dm_target_always_writeable(type) \
238 ((type)->features & DM_TARGET_ALWAYS_WRITEABLE)
241 * Any device that contains a table with an instance of this target may never
242 * have tables containing any different target type.
244 #define DM_TARGET_IMMUTABLE 0x00000004
245 #define dm_target_is_immutable(type) ((type)->features & DM_TARGET_IMMUTABLE)
248 * Indicates that a target may replace any target; even immutable targets.
249 * .map, .map_rq, .clone_and_map_rq and .release_clone_rq are all defined.
251 #define DM_TARGET_WILDCARD 0x00000008
252 #define dm_target_is_wildcard(type) ((type)->features & DM_TARGET_WILDCARD)
255 * A target implements own bio data integrity.
257 #define DM_TARGET_INTEGRITY 0x00000010
258 #define dm_target_has_integrity(type) ((type)->features & DM_TARGET_INTEGRITY)
261 * A target passes integrity data to the lower device.
263 #define DM_TARGET_PASSES_INTEGRITY 0x00000020
264 #define dm_target_passes_integrity(type) ((type)->features & DM_TARGET_PASSES_INTEGRITY)
267 * Indicates support for zoned block devices:
268 * - DM_TARGET_ZONED_HM: the target also supports host-managed zoned
269 * block devices but does not support combining different zoned models.
270 * - DM_TARGET_MIXED_ZONED_MODEL: the target supports combining multiple
271 * devices with different zoned models.
273 #ifdef CONFIG_BLK_DEV_ZONED
274 #define DM_TARGET_ZONED_HM 0x00000040
275 #define dm_target_supports_zoned_hm(type) ((type)->features & DM_TARGET_ZONED_HM)
277 #define DM_TARGET_ZONED_HM 0x00000000
278 #define dm_target_supports_zoned_hm(type) (false)
282 * A target handles REQ_NOWAIT
284 #define DM_TARGET_NOWAIT 0x00000080
285 #define dm_target_supports_nowait(type) ((type)->features & DM_TARGET_NOWAIT)
288 * A target supports passing through inline crypto support.
290 #define DM_TARGET_PASSES_CRYPTO 0x00000100
291 #define dm_target_passes_crypto(type) ((type)->features & DM_TARGET_PASSES_CRYPTO)
293 #ifdef CONFIG_BLK_DEV_ZONED
294 #define DM_TARGET_MIXED_ZONED_MODEL 0x00000200
295 #define dm_target_supports_mixed_zoned_model(type) \
296 ((type)->features & DM_TARGET_MIXED_ZONED_MODEL)
298 #define DM_TARGET_MIXED_ZONED_MODEL 0x00000000
299 #define dm_target_supports_mixed_zoned_model(type) (false)
303 struct dm_table
*table
;
304 struct target_type
*type
;
310 /* If non-zero, maximum size of I/O submitted to a target. */
314 * A number of zero-length barrier bios that will be submitted
315 * to the target for the purpose of flushing cache.
317 * The bio number can be accessed with dm_bio_get_target_bio_nr.
318 * It is a responsibility of the target driver to remap these bios
319 * to the real underlying devices.
321 unsigned int num_flush_bios
;
324 * The number of discard bios that will be submitted to the target.
325 * The bio number can be accessed with dm_bio_get_target_bio_nr.
327 unsigned int num_discard_bios
;
330 * The number of secure erase bios that will be submitted to the target.
331 * The bio number can be accessed with dm_bio_get_target_bio_nr.
333 unsigned int num_secure_erase_bios
;
336 * The number of WRITE ZEROES bios that will be submitted to the target.
337 * The bio number can be accessed with dm_bio_get_target_bio_nr.
339 unsigned int num_write_zeroes_bios
;
342 * The minimum number of extra bytes allocated in each io for the
345 unsigned int per_io_data_size
;
347 /* target specific data */
350 /* Used to provide an error string from the ctr */
354 * Set if this target needs to receive flushes regardless of
355 * whether or not its underlying devices have support.
357 bool flush_supported
:1;
360 * Set if this target needs to receive discards regardless of
361 * whether or not its underlying devices have support.
363 bool discards_supported
:1;
366 * Automatically set by dm-core if this target supports
367 * REQ_OP_ZONE_RESET_ALL. Otherwise, this operation will be emulated
368 * using REQ_OP_ZONE_RESET. Target drivers must not set this manually.
370 bool zone_reset_all_supported
:1;
373 * Set if this target requires that discards be split on
374 * 'max_discard_sectors' boundaries.
376 bool max_discard_granularity
:1;
379 * Set if we need to limit the number of in-flight bios when swapping.
381 bool limit_swap_bios
:1;
384 * Set if this target implements a zoned device and needs emulation of
385 * zone append operations using regular writes.
387 bool emulate_zone_append
:1;
390 * Set if the target will submit IO using dm_submit_bio_remap()
391 * after returning DM_MAPIO_SUBMITTED from its map function.
393 bool accounts_remapped_io
:1;
396 * Set if the target will submit the DM bio without first calling
397 * bio_set_dev(). NOTE: ideally a target should _not_ need this.
399 bool needs_bio_set_dev
:1;
402 * Set if the target supports flush optimization. If all the targets in
403 * a table have flush_bypasses_map set, the dm core will not send
404 * flushes to the targets via a ->map method. It will iterate over
405 * dm_table->devices and send flushes to the devices directly. This
406 * optimization reduces the number of flushes being sent when multiple
407 * targets in a table use the same underlying device.
409 * This optimization may be enabled on targets that just pass the
410 * flushes to the underlying devices without performing any other
411 * actions on the flush request. Currently, dm-linear and dm-stripe
414 bool flush_bypasses_map
:1;
417 * Set if the target calls bio_integrity_alloc on bios received
420 bool mempool_needs_integrity
:1;
423 void *dm_per_bio_data(struct bio
*bio
, size_t data_size
);
424 struct bio
*dm_bio_from_per_bio_data(void *data
, size_t data_size
);
425 unsigned int dm_bio_get_target_bio_nr(const struct bio
*bio
);
427 u64
dm_start_time_ns_from_clone(struct bio
*bio
);
429 int dm_register_target(struct target_type
*t
);
430 void dm_unregister_target(struct target_type
*t
);
433 * Target argument parsing.
441 * The minimum and maximum value of a numeric argument, together with
442 * the error message to use if the number is found to be outside that range.
451 * Validate the next argument, either returning it as *value or, if invalid,
452 * returning -EINVAL and setting *error.
454 int dm_read_arg(const struct dm_arg
*arg
, struct dm_arg_set
*arg_set
,
455 unsigned int *value
, char **error
);
458 * Process the next argument as the start of a group containing between
459 * arg->min and arg->max further arguments. Either return the size as
460 * *num_args or, if invalid, return -EINVAL and set *error.
462 int dm_read_arg_group(const struct dm_arg
*arg
, struct dm_arg_set
*arg_set
,
463 unsigned int *num_args
, char **error
);
466 * Return the current argument and shift to the next.
468 const char *dm_shift_arg(struct dm_arg_set
*as
);
471 * Move through num_args arguments.
473 void dm_consume_args(struct dm_arg_set
*as
, unsigned int num_args
);
476 *----------------------------------------------------------------
477 * Functions for creating and manipulating mapped devices.
478 * Drop the reference with dm_put when you finish with the object.
479 *----------------------------------------------------------------
483 * DM_ANY_MINOR chooses the next available minor number.
485 #define DM_ANY_MINOR (-1)
486 int dm_create(int minor
, struct mapped_device
**md
);
489 * Reference counting for md.
491 struct mapped_device
*dm_get_md(dev_t dev
);
492 void dm_get(struct mapped_device
*md
);
493 int dm_hold(struct mapped_device
*md
);
494 void dm_put(struct mapped_device
*md
);
497 * An arbitrary pointer may be stored alongside a mapped device.
499 void dm_set_mdptr(struct mapped_device
*md
, void *ptr
);
500 void *dm_get_mdptr(struct mapped_device
*md
);
503 * A device can still be used while suspended, but I/O is deferred.
505 int dm_suspend(struct mapped_device
*md
, unsigned int suspend_flags
);
506 int dm_resume(struct mapped_device
*md
);
511 uint32_t dm_get_event_nr(struct mapped_device
*md
);
512 int dm_wait_event(struct mapped_device
*md
, int event_nr
);
513 uint32_t dm_next_uevent_seq(struct mapped_device
*md
);
514 void dm_uevent_add(struct mapped_device
*md
, struct list_head
*elist
);
519 const char *dm_device_name(struct mapped_device
*md
);
520 int dm_copy_name_and_uuid(struct mapped_device
*md
, char *name
, char *uuid
);
521 struct gendisk
*dm_disk(struct mapped_device
*md
);
522 int dm_suspended(struct dm_target
*ti
);
523 int dm_post_suspending(struct dm_target
*ti
);
524 int dm_noflush_suspending(struct dm_target
*ti
);
525 void dm_accept_partial_bio(struct bio
*bio
, unsigned int n_sectors
);
526 void dm_submit_bio_remap(struct bio
*clone
, struct bio
*tgt_clone
);
528 #ifdef CONFIG_BLK_DEV_ZONED
529 struct dm_report_zones_args
{
530 struct dm_target
*tgt
;
531 sector_t next_sector
;
534 report_zones_cb orig_cb
;
535 unsigned int zone_idx
;
537 /* must be filled by ->report_zones before calling dm_report_zones_cb */
540 int dm_report_zones(struct block_device
*bdev
, sector_t start
, sector_t sector
,
541 struct dm_report_zones_args
*args
, unsigned int nr_zones
);
542 #endif /* CONFIG_BLK_DEV_ZONED */
545 * Device mapper functions to parse and create devices specified by the
546 * parameter "dm-mod.create="
548 int __init
dm_early_create(struct dm_ioctl
*dmi
,
549 struct dm_target_spec
**spec_array
,
550 char **target_params_array
);
553 * Geometry functions.
555 int dm_get_geometry(struct mapped_device
*md
, struct hd_geometry
*geo
);
556 int dm_set_geometry(struct mapped_device
*md
, struct hd_geometry
*geo
);
559 *---------------------------------------------------------------
560 * Functions for manipulating device-mapper tables.
561 *---------------------------------------------------------------
565 * First create an empty table.
567 int dm_table_create(struct dm_table
**result
, blk_mode_t mode
,
568 unsigned int num_targets
, struct mapped_device
*md
);
571 * Then call this once for each target.
573 int dm_table_add_target(struct dm_table
*t
, const char *type
,
574 sector_t start
, sector_t len
, char *params
);
577 * Target can use this to set the table's type.
578 * Can only ever be called from a target's ctr.
579 * Useful for "hybrid" target (supports both bio-based
580 * and request-based).
582 void dm_table_set_type(struct dm_table
*t
, enum dm_queue_mode type
);
585 * Finally call this to make the table ready for use.
587 int dm_table_complete(struct dm_table
*t
);
590 * Destroy the table when finished.
592 void dm_table_destroy(struct dm_table
*t
);
595 * Target may require that it is never sent I/O larger than len.
597 int __must_check
dm_set_target_max_io_len(struct dm_target
*ti
, sector_t len
);
600 * Table reference counting.
602 struct dm_table
*dm_get_live_table(struct mapped_device
*md
, int *srcu_idx
);
603 void dm_put_live_table(struct mapped_device
*md
, int srcu_idx
);
604 void dm_sync_table(struct mapped_device
*md
);
609 sector_t
dm_table_get_size(struct dm_table
*t
);
610 blk_mode_t
dm_table_get_mode(struct dm_table
*t
);
611 struct mapped_device
*dm_table_get_md(struct dm_table
*t
);
612 const char *dm_table_device_name(struct dm_table
*t
);
617 void dm_table_event(struct dm_table
*t
);
620 * Run the queue for request-based targets.
622 void dm_table_run_md_queue_async(struct dm_table
*t
);
625 * The device must be suspended before calling this method.
626 * Returns the previous table, which the caller must destroy.
628 struct dm_table
*dm_swap_table(struct mapped_device
*md
,
632 * Table blk_crypto_profile functions
634 void dm_destroy_crypto_profile(struct blk_crypto_profile
*profile
);
637 *---------------------------------------------------------------
639 *---------------------------------------------------------------
641 #define DM_NAME "device-mapper"
643 #define DM_FMT(fmt) DM_NAME ": " DM_MSG_PREFIX ": " fmt "\n"
645 #define DMCRIT(fmt, ...) pr_crit(DM_FMT(fmt), ##__VA_ARGS__)
647 #define DMERR(fmt, ...) pr_err(DM_FMT(fmt), ##__VA_ARGS__)
648 #define DMERR_LIMIT(fmt, ...) pr_err_ratelimited(DM_FMT(fmt), ##__VA_ARGS__)
649 #define DMWARN(fmt, ...) pr_warn(DM_FMT(fmt), ##__VA_ARGS__)
650 #define DMWARN_LIMIT(fmt, ...) pr_warn_ratelimited(DM_FMT(fmt), ##__VA_ARGS__)
651 #define DMINFO(fmt, ...) pr_info(DM_FMT(fmt), ##__VA_ARGS__)
652 #define DMINFO_LIMIT(fmt, ...) pr_info_ratelimited(DM_FMT(fmt), ##__VA_ARGS__)
654 #define DMDEBUG(fmt, ...) pr_debug(DM_FMT(fmt), ##__VA_ARGS__)
655 #define DMDEBUG_LIMIT(fmt, ...) pr_debug_ratelimited(DM_FMT(fmt), ##__VA_ARGS__)
657 #define DMEMIT(x...) (sz += ((sz >= maxlen) ? 0 : scnprintf(result + sz, maxlen - sz, x)))
659 #define DMEMIT_TARGET_NAME_VERSION(y) \
660 DMEMIT("target_name=%s,target_version=%u.%u.%u", \
661 (y)->name, (y)->version[0], (y)->version[1], (y)->version[2])
664 * module_dm() - Helper macro for DM targets that don't do anything
665 * special in their module_init and module_exit.
666 * Each module may only use this macro once, and calling it replaces
667 * module_init() and module_exit().
669 * @name: DM target's name
671 #define module_dm(name) \
672 static int __init dm_##name##_init(void) \
674 return dm_register_target(&(name##_target)); \
676 module_init(dm_##name##_init) \
677 static void __exit dm_##name##_exit(void) \
679 dm_unregister_target(&(name##_target)); \
681 module_exit(dm_##name##_exit)
684 * Definitions of return values from target end_io function.
686 #define DM_ENDIO_DONE 0
687 #define DM_ENDIO_INCOMPLETE 1
688 #define DM_ENDIO_REQUEUE 2
689 #define DM_ENDIO_DELAY_REQUEUE 3
692 * Definitions of return values from target map function.
694 #define DM_MAPIO_SUBMITTED 0
695 #define DM_MAPIO_REMAPPED 1
696 #define DM_MAPIO_REQUEUE DM_ENDIO_REQUEUE
697 #define DM_MAPIO_DELAY_REQUEUE DM_ENDIO_DELAY_REQUEUE
698 #define DM_MAPIO_KILL 4
700 #define dm_sector_div64(x, y)( \
703 (x) = div64_u64_rem(x, y, &_res); \
711 #define dm_div_up(n, sz) (((n) + (sz) - 1) / (sz))
713 #define dm_sector_div_up(n, sz) ( \
715 sector_t _r = ((n) + (sz) - 1); \
716 sector_div(_r, (sz)); \
722 * ceiling(n / size) * size
724 #define dm_round_up(n, sz) (dm_div_up((n), (sz)) * (sz))
727 * Sector offset taken relative to the start of the target instead of
728 * relative to the start of the device.
730 #define dm_target_offset(ti, sector) ((sector) - (ti)->begin)
732 static inline sector_t
to_sector(unsigned long long n
)
734 return (n
>> SECTOR_SHIFT
);
737 static inline unsigned long to_bytes(sector_t n
)
739 return (n
<< SECTOR_SHIFT
);
742 #endif /* _LINUX_DEVICE_MAPPER_H */