From: mtkaczyk@kernel.org
To: linux-raid@vger.kernel.org
Cc: Mariusz Tkaczyk <mtkaczyk@kernel.org>, Xiao Ni <xni@redhat.com>,
Nigel Croxon <ncroxon@redhat.com>, Song Liu <song@kernel.org>,
Yu Kuai <yukuai@kernel.org>
Subject: [PATCH v0 3/3] mdadm: use kernel raid headers
Date: Wed, 19 Mar 2025 18:10:58 +0100 [thread overview]
Message-ID: <20250319171058.20052-4-mtkaczyk@kernel.org> (raw)
In-Reply-To: <20250319171058.20052-1-mtkaczyk@kernel.org>
From: Mariusz Tkaczyk <mtkaczyk@kernel.org>
For a years we redefined these headers in mdadm. We should reuse headers
exported by kernel to integrate driver and mdadm better.
Include them and remove mdadm owned headers.
There are 3 defines not available in kernel headers, so define them
directly but put them in ifndef guard to make them transparent later.
Use MD_FEATURE_CLUSTERED instead of MD_FEATURE_BITMAP_VERSIONED. The
value is same, kernel define has different name.
Signed-off-by: Mariusz Tkaczyk <mtkaczyk@kernel.org>
---
Create.c | 2 -
Detail.c | 2 -
Examine.c | 2 -
Grow.c | 6 ---
Kill.c | 2 -
Manage.c | 2 -
Query.c | 2 -
mdadm.h | 16 ++++++-
mdmonitor.c | 2 -
super1.c | 126 ++--------------------------------------------------
udev.c | 2 -
11 files changed, 17 insertions(+), 147 deletions(-)
diff --git a/Create.c b/Create.c
index fd6c92152021..4d5c15531df1 100644
--- a/Create.c
+++ b/Create.c
@@ -23,8 +23,6 @@
*/
#include "mdadm.h"
-#include "md_u.h"
-#include "md_p.h"
#include "udev.h"
#include "xmalloc.h"
diff --git a/Detail.c b/Detail.c
index b804a624574c..3802ef8fa6fc 100644
--- a/Detail.c
+++ b/Detail.c
@@ -23,8 +23,6 @@
*/
#include "mdadm.h"
-#include "md_p.h"
-#include "md_u.h"
#include "xmalloc.h"
#include <ctype.h>
diff --git a/Examine.c b/Examine.c
index 036b7a5634ad..9c8564be90d4 100644
--- a/Examine.c
+++ b/Examine.c
@@ -24,8 +24,6 @@
#include "dlink.h"
#include "mdadm.h"
-#include "md_u.h"
-#include "md_p.h"
#include "xmalloc.h"
#if ! defined(__BIG_ENDIAN) && ! defined(__LITTLE_ENDIAN)
diff --git a/Grow.c b/Grow.c
index 53b0b3876b26..30eaa3c6a654 100644
--- a/Grow.c
+++ b/Grow.c
@@ -30,12 +30,6 @@
#include <stdint.h>
#include <sys/wait.h>
-#if ! defined(__BIG_ENDIAN) && ! defined(__LITTLE_ENDIAN)
-#error no endian defined
-#endif
-#include "md_u.h"
-#include "md_p.h"
-
int restore_backup(struct supertype *st,
struct mdinfo *content,
int working_disks,
diff --git a/Kill.c b/Kill.c
index 43c9abed3b42..9f05a1ace8e1 100644
--- a/Kill.c
+++ b/Kill.c
@@ -26,8 +26,6 @@
*/
#include "mdadm.h"
-#include "md_u.h"
-#include "md_p.h"
int Kill(char *dev, struct supertype *st, int force, int verbose, int noexcl)
{
diff --git a/Manage.c b/Manage.c
index 034eb00c7f7d..22b1f52b7dc7 100644
--- a/Manage.c
+++ b/Manage.c
@@ -23,8 +23,6 @@
*/
#include "mdadm.h"
-#include "md_u.h"
-#include "md_p.h"
#include "udev.h"
#include "xmalloc.h"
diff --git a/Query.c b/Query.c
index aedb4ce77d83..72f49a4e6e54 100644
--- a/Query.c
+++ b/Query.c
@@ -23,8 +23,6 @@
*/
#include "mdadm.h"
-#include "md_p.h"
-#include "md_u.h"
int Query(char *dev)
{
diff --git a/mdadm.h b/mdadm.h
index d2c2a4dac11b..a34a3ec2c472 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -163,8 +163,20 @@ struct dlm_lksb {
#define GROW_SERVICE "mdadm-grow-continue"
#endif /* GROW_SERVICE */
-#include "md_u.h"
-#include "md_p.h"
+#include <linux/raid/md_u.h>
+#include <linux/raid/md_p.h>
+
+/* These defines might be missing in raid headers*/
+#ifndef MD_SB_BLOCK_CONTAINER_RESHAPE
+#define MD_SB_BLOCK_CONTAINER_RESHAPE 3
+#endif
+#ifndef MD_SB_BLOCK_VOLUME
+#define MD_SB_BLOCK_VOLUME 4
+#endif
+#ifndef MD_DISK_REPLACEMENT
+#define MD_DISK_REPLACEMENT 17
+#endif
+
#include "bitmap.h"
#include "msg.h"
#include "mdadm_status.h"
diff --git a/mdmonitor.c b/mdmonitor.c
index d1cfbf947191..d51617cd0981 100644
--- a/mdmonitor.c
+++ b/mdmonitor.c
@@ -23,8 +23,6 @@
*/
#include "mdadm.h"
-#include "md_p.h"
-#include "md_u.h"
#include "udev.h"
#include "xmalloc.h"
diff --git a/super1.c b/super1.c
index fe3c4c64c66b..0db2544f18f4 100644
--- a/super1.c
+++ b/super1.c
@@ -26,92 +26,6 @@
#include "mdadm.h"
#include "xmalloc.h"
-/*
- * The version-1 superblock :
- * All numeric fields are little-endian.
- *
- * total size: 256 bytes plus 2 per device.
- * 1K allows 384 devices.
- */
-struct mdp_superblock_1 {
- /* constant array information - 128 bytes */
- __u32 magic; /* MD_SB_MAGIC: 0xa92b4efc - little endian */
- __u32 major_version; /* 1 */
- __u32 feature_map; /* 0 for now */
- __u32 pad0; /* always set to 0 when writing */
-
- __u8 set_uuid[16]; /* user-space generated. */
- char set_name[32]; /* set and interpreted by user-space */
-
- __u64 ctime; /* lo 40 bits are seconds, top 24 are microseconds or 0*/
- __u32 level; /* -4 (multipath), -1 (linear), 0,1,4,5 */
- __u32 layout; /* used for raid5, raid6, raid10, and raid0 */
- __u64 size; /* used size of component devices, in 512byte sectors */
-
- __u32 chunksize; /* in 512byte sectors */
- __u32 raid_disks;
- union {
- __u32 bitmap_offset; /* sectors after start of superblock that bitmap starts
- * NOTE: signed, so bitmap can be before superblock
- * only meaningful of feature_map[0] is set.
- */
-
- /* only meaningful when feature_map[MD_FEATURE_PPL] is set */
- struct {
- __s16 offset; /* sectors from start of superblock that ppl starts */
- __u16 size; /* ppl size in sectors */
- } ppl;
- };
-
- /* These are only valid with feature bit '4' */
- __u32 new_level; /* new level we are reshaping to */
- __u64 reshape_position; /* next address in array-space for reshape */
- __u32 delta_disks; /* change in number of raid_disks */
- __u32 new_layout; /* new layout */
- __u32 new_chunk; /* new chunk size (sectors) */
- __u32 new_offset; /* signed number to add to data_offset in new
- * layout. 0 == no-change. This can be
- * different on each device in the array.
- */
-
- /* constant this-device information - 64 bytes */
- __u64 data_offset; /* sector start of data, often 0 */
- __u64 data_size; /* sectors in this device that can be used for data */
- __u64 super_offset; /* sector start of this superblock */
- union {
- __u64 recovery_offset;/* sectors before this offset (from data_offset) have been recovered */
- __u64 journal_tail;/* journal tail of journal device (from data_offset) */
- };
- __u32 dev_number; /* permanent identifier of this device - not role in raid */
- __u32 cnt_corrected_read; /* number of read errors that were corrected by re-writing */
- __u8 device_uuid[16]; /* user-space setable, ignored by kernel */
- __u8 devflags; /* per-device flags. Only one defined...*/
-#define WriteMostly1 1 /* mask for writemostly flag in above */
-#define FailFast1 2 /* Device should get FailFast requests */
- /* bad block log. If there are any bad blocks the feature flag is set.
- * if offset and size are non-zero, that space is reserved and available.
- */
- __u8 bblog_shift; /* shift from sectors to block size for badblock list */
- __u16 bblog_size; /* number of sectors reserved for badblock list */
- __u32 bblog_offset; /* sector offset from superblock to bblog, signed */
-
- /* array state information - 64 bytes */
- __u64 utime; /* 40 bits second, 24 bits microseconds */
- __u64 events; /* incremented when superblock updated */
- __u64 resync_offset; /* data before this offset (from data_offset) known to be in sync */
- __u32 sb_csum; /* checksum upto dev_roles[max_dev] */
- __u32 max_dev; /* size of dev_roles[] array to consider */
- __u8 pad3[64-32]; /* set to 0 when writing */
-
- /* device state information. Indexed by dev_number.
- * 2 bytes per device
- * Note there are no per-device state flags. State information is rolled
- * into the 'roles' value. If a device is spare or faulty, then it doesn't
- * have a meaningful role.
- */
- __u16 dev_roles[0]; /* role in array, or 0xffff for a spare, or 0xfffe for faulty */
-};
-
#define MAX_SB_SIZE 4096
/* bitmap super size is 256, but we round up to a sector for alignment */
#define BM_SUPER_SIZE 512
@@ -126,40 +40,6 @@ struct misc_dev_info {
#define MULTIPLE_PPL_AREA_SIZE_SUPER1 (1024 * 1024) /* Size of the whole
* mutliple PPL area
*/
-/* feature_map bits */
-#define MD_FEATURE_BITMAP_OFFSET 1
-#define MD_FEATURE_RECOVERY_OFFSET 2 /* recovery_offset is present and
- * must be honoured
- */
-#define MD_FEATURE_RESHAPE_ACTIVE 4
-#define MD_FEATURE_BAD_BLOCKS 8 /* badblock list is not empty */
-#define MD_FEATURE_REPLACEMENT 16 /* This device is replacing an
- * active device with same 'role'.
- * 'recovery_offset' is also set.
- */
-#define MD_FEATURE_RESHAPE_BACKWARDS 32 /* Reshape doesn't change number
- * of devices, but is going
- * backwards anyway.
- */
-#define MD_FEATURE_NEW_OFFSET 64 /* new_offset must be honoured */
-#define MD_FEATURE_BITMAP_VERSIONED 256 /* bitmap version number checked properly */
-#define MD_FEATURE_JOURNAL 512 /* support write journal */
-#define MD_FEATURE_PPL 1024 /* support PPL */
-#define MD_FEATURE_MUTLIPLE_PPLS 2048 /* support for multiple PPLs */
-#define MD_FEATURE_RAID0_LAYOUT 4096 /* layout is meaningful in RAID0 */
-#define MD_FEATURE_ALL (MD_FEATURE_BITMAP_OFFSET \
- |MD_FEATURE_RECOVERY_OFFSET \
- |MD_FEATURE_RESHAPE_ACTIVE \
- |MD_FEATURE_BAD_BLOCKS \
- |MD_FEATURE_REPLACEMENT \
- |MD_FEATURE_RESHAPE_BACKWARDS \
- |MD_FEATURE_NEW_OFFSET \
- |MD_FEATURE_BITMAP_VERSIONED \
- |MD_FEATURE_JOURNAL \
- |MD_FEATURE_PPL \
- |MD_FEATURE_MULTIPLE_PPLS \
- |MD_FEATURE_RAID0_LAYOUT \
- )
static int role_from_sb(struct mdp_superblock_1 *sb)
{
@@ -319,7 +199,7 @@ static int awrite(struct align_fd *afd, void *buf, int len)
static inline unsigned int md_feature_any_ppl_on(__u32 feature_map)
{
return ((__cpu_to_le32(feature_map) &
- (MD_FEATURE_PPL | MD_FEATURE_MUTLIPLE_PPLS)));
+ (MD_FEATURE_PPL | MD_FEATURE_MULTIPLE_PPLS)));
}
static inline unsigned int choose_ppl_space(int chunk)
@@ -1483,7 +1363,7 @@ static int update_super1(struct supertype *st, struct mdinfo *info,
}
case UOPT_NO_PPL:
sb->feature_map &= ~__cpu_to_le32(MD_FEATURE_PPL |
- MD_FEATURE_MUTLIPLE_PPLS);
+ MD_FEATURE_MULTIPLE_PPLS);
break;
case UOPT_DEVICESIZE:
if (__le64_to_cpu(sb->super_offset) >=
@@ -2643,7 +2523,7 @@ add_internal_bitmap1(struct supertype *st,
bms->nodes = __cpu_to_le32(st->nodes);
if (st->nodes)
sb->feature_map = __cpu_to_le32(__le32_to_cpu(sb->feature_map) |
- MD_FEATURE_BITMAP_VERSIONED);
+ MD_FEATURE_CLUSTERED);
if (st->cluster_name) {
len = sizeof(bms->cluster_name);
strncpy((char *)bms->cluster_name, st->cluster_name, len);
diff --git a/udev.c b/udev.c
index 88a997818115..961ca970d460 100644
--- a/udev.c
+++ b/udev.c
@@ -20,8 +20,6 @@
#include "mdadm.h"
#include "udev.h"
-#include "md_p.h"
-#include "md_u.h"
#include "xmalloc.h"
#include <sys/wait.h>
--
2.43.0
next prev parent reply other threads:[~2025-03-19 17:11 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-19 17:10 [PATCH v0 0/3] mdadm: Use kernel raid headers mtkaczyk
2025-03-19 17:10 ` [PATCH v0 1/3] mdadm: Remove klibc and uclibc support mtkaczyk
2025-03-19 17:10 ` [PATCH v0 2/3] mdadm: include asm/byteorder.h mtkaczyk
2025-03-19 17:10 ` mtkaczyk [this message]
2025-03-20 5:45 ` [PATCH v0 0/3] mdadm: Use kernel raid headers Xiao Ni
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250319171058.20052-4-mtkaczyk@kernel.org \
--to=mtkaczyk@kernel.org \
--cc=linux-raid@vger.kernel.org \
--cc=ncroxon@redhat.com \
--cc=song@kernel.org \
--cc=xni@redhat.com \
--cc=yukuai@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.