drivers/md/dm-raid.c
Source file repositories/reference/linux-study-clean/drivers/md/dm-raid.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/md/dm-raid.c- Extension
.c- Size
- 123229 bytes
- Lines
- 4183
- Domain
- Driver Families
- Bucket
- drivers/md
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/slab.hlinux/module.hmd.hraid1.hraid5.hraid10.hmd-bitmap.hlinux/device-mapper.h
Detected Declarations
struct raid_devstruct rs_layoutstruct raid_setstruct journal_devstruct dm_raid_superblockenum sync_statefunction rs_config_backupfunction rs_config_restorefunction __within_rangefunction dm_raid_journal_mode_to_mdfunction rs_is_raid0function rs_is_raid1function rs_is_raid10function rs_is_raid6function rs_is_raid456function rs_is_reshapablefunction rs_is_recoveringfunction rs_is_reshapingfunction rt_is_raid0function rt_is_raid1function rt_is_raid10function rt_is_raid45function rt_is_raid6function rt_is_raid456function __valid_flagsfunction rs_check_for_valid_flagsfunction __raid10_near_copiesfunction __raid10_far_copiesfunction __is_raid10_offsetfunction __is_raid10_nearfunction __is_raid10_farfunction raid10_name_to_formatfunction raid10_md_layout_to_copiesfunction raid10_format_to_md_layoutfunction __got_raid10function rs_set_rdev_sectorsfunction rs_set_capacityfunction rs_set_curfunction rs_set_newfunction raid_set_freefunction raid_set_freefunction thatfunction failedfunction parse_raid_paramsfunction rs_set_raid456_stripe_cachefunction mddev_data_stripesfunction rs_data_stripesfunction __rdev_sectors
Annotated Snippet
struct raid_dev {
/*
* Two DM devices, one to hold metadata and one to hold the
* actual data/parity. The reason for this is to not confuse
* ti->len and give more flexibility in altering size and
* characteristics.
*
* While it is possible for this device to be associated
* with a different physical device than the data_dev, it
* is intended for it to be the same.
* |--------- Physical Device ---------|
* |- meta_dev -|------ data_dev ------|
*/
struct dm_dev *meta_dev;
struct dm_dev *data_dev;
struct md_rdev rdev;
};
/*
* Bits for establishing rs->ctr_flags
*
* 1 = no flag value
* 2 = flag with value
*/
#define __CTR_FLAG_SYNC 0 /* 1 */ /* Not with raid0! */
#define __CTR_FLAG_NOSYNC 1 /* 1 */ /* Not with raid0! */
#define __CTR_FLAG_REBUILD 2 /* 2 */ /* Not with raid0! */
#define __CTR_FLAG_DAEMON_SLEEP 3 /* 2 */ /* Not with raid0! */
#define __CTR_FLAG_MIN_RECOVERY_RATE 4 /* 2 */ /* Not with raid0! */
#define __CTR_FLAG_MAX_RECOVERY_RATE 5 /* 2 */ /* Not with raid0! */
#define __CTR_FLAG_MAX_WRITE_BEHIND 6 /* 2 */ /* Only with raid1! */
#define __CTR_FLAG_WRITE_MOSTLY 7 /* 2 */ /* Only with raid1! */
#define __CTR_FLAG_STRIPE_CACHE 8 /* 2 */ /* Only with raid4/5/6! */
#define __CTR_FLAG_REGION_SIZE 9 /* 2 */ /* Not with raid0! */
#define __CTR_FLAG_RAID10_COPIES 10 /* 2 */ /* Only with raid10 */
#define __CTR_FLAG_RAID10_FORMAT 11 /* 2 */ /* Only with raid10 */
/* New for v1.9.0 */
#define __CTR_FLAG_DELTA_DISKS 12 /* 2 */ /* Only with reshapable raid1/4/5/6/10! */
#define __CTR_FLAG_DATA_OFFSET 13 /* 2 */ /* Only with reshapable raid4/5/6/10! */
#define __CTR_FLAG_RAID10_USE_NEAR_SETS 14 /* 2 */ /* Only with raid10! */
/* New for v1.10.0 */
#define __CTR_FLAG_JOURNAL_DEV 15 /* 2 */ /* Only with raid4/5/6 (journal device)! */
/* New for v1.11.1 */
#define __CTR_FLAG_JOURNAL_MODE 16 /* 2 */ /* Only with raid4/5/6 (journal mode)! */
/*
* Flags for rs->ctr_flags field.
*/
#define CTR_FLAG_SYNC (1 << __CTR_FLAG_SYNC)
#define CTR_FLAG_NOSYNC (1 << __CTR_FLAG_NOSYNC)
#define CTR_FLAG_REBUILD (1 << __CTR_FLAG_REBUILD)
#define CTR_FLAG_DAEMON_SLEEP (1 << __CTR_FLAG_DAEMON_SLEEP)
#define CTR_FLAG_MIN_RECOVERY_RATE (1 << __CTR_FLAG_MIN_RECOVERY_RATE)
#define CTR_FLAG_MAX_RECOVERY_RATE (1 << __CTR_FLAG_MAX_RECOVERY_RATE)
#define CTR_FLAG_MAX_WRITE_BEHIND (1 << __CTR_FLAG_MAX_WRITE_BEHIND)
#define CTR_FLAG_WRITE_MOSTLY (1 << __CTR_FLAG_WRITE_MOSTLY)
#define CTR_FLAG_STRIPE_CACHE (1 << __CTR_FLAG_STRIPE_CACHE)
#define CTR_FLAG_REGION_SIZE (1 << __CTR_FLAG_REGION_SIZE)
#define CTR_FLAG_RAID10_COPIES (1 << __CTR_FLAG_RAID10_COPIES)
#define CTR_FLAG_RAID10_FORMAT (1 << __CTR_FLAG_RAID10_FORMAT)
#define CTR_FLAG_DELTA_DISKS (1 << __CTR_FLAG_DELTA_DISKS)
#define CTR_FLAG_DATA_OFFSET (1 << __CTR_FLAG_DATA_OFFSET)
#define CTR_FLAG_RAID10_USE_NEAR_SETS (1 << __CTR_FLAG_RAID10_USE_NEAR_SETS)
#define CTR_FLAG_JOURNAL_DEV (1 << __CTR_FLAG_JOURNAL_DEV)
#define CTR_FLAG_JOURNAL_MODE (1 << __CTR_FLAG_JOURNAL_MODE)
/*
* Definitions of various constructor flags to
* be used in checks of valid / invalid flags
* per raid level.
*/
/* Define all any sync flags */
#define CTR_FLAGS_ANY_SYNC (CTR_FLAG_SYNC | CTR_FLAG_NOSYNC)
/* Define flags for options without argument (e.g. 'nosync') */
#define CTR_FLAG_OPTIONS_NO_ARGS (CTR_FLAGS_ANY_SYNC | \
CTR_FLAG_RAID10_USE_NEAR_SETS)
/* Define flags for options with one argument (e.g. 'delta_disks +2') */
#define CTR_FLAG_OPTIONS_ONE_ARG (CTR_FLAG_REBUILD | \
CTR_FLAG_WRITE_MOSTLY | \
CTR_FLAG_DAEMON_SLEEP | \
CTR_FLAG_MIN_RECOVERY_RATE | \
CTR_FLAG_MAX_RECOVERY_RATE | \
CTR_FLAG_MAX_WRITE_BEHIND | \
CTR_FLAG_STRIPE_CACHE | \
CTR_FLAG_REGION_SIZE | \
CTR_FLAG_RAID10_COPIES | \
Annotation
- Immediate include surface: `linux/slab.h`, `linux/module.h`, `md.h`, `raid1.h`, `raid5.h`, `raid10.h`, `md-bitmap.h`, `linux/device-mapper.h`.
- Detected declarations: `struct raid_dev`, `struct rs_layout`, `struct raid_set`, `struct journal_dev`, `struct dm_raid_superblock`, `enum sync_state`, `function rs_config_backup`, `function rs_config_restore`, `function __within_range`, `function dm_raid_journal_mode_to_md`.
- Atlas domain: Driver Families / drivers/md.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.