summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.c5
-rw-r--r--mdadm.conf.514
-rw-r--r--mdadm.h1
-rw-r--r--super1.c4
4 files changed, 22 insertions, 2 deletions
diff --git a/config.c b/config.c
index a35807cc..909f83f4 100644
--- a/config.c
+++ b/config.c
@@ -187,6 +187,7 @@ struct createinfo createinfo = {
.autof = 2, /* by default, create devices with standard names */
.symlinks = 1,
.names = 0, /* By default, stick with numbered md devices. */
+ .bblist = 1, /* Use a bad block list by default */
#ifdef DEBIAN
.gid = 6, /* disk */
.mode = 0660,
@@ -306,6 +307,10 @@ static void createline(char *line)
createinfo.names = 1;
else if (strncasecmp(w, "names=no", 11) == 0)
createinfo.names = 0;
+ else if (strncasecmp(w, "bbl=no", 11) == 0)
+ createinfo.bblist = 0;
+ else if (strncasecmp(w, "bbl=yes", 11) == 0)
+ createinfo.bblist = 1;
else {
pr_err("unrecognised word on CREATE line: %s\n",
w);
diff --git a/mdadm.conf.5 b/mdadm.conf.5
index 61267b61..18512cb0 100644
--- a/mdadm.conf.5
+++ b/mdadm.conf.5
@@ -293,8 +293,8 @@ line and it should be give only one program.
.B CREATE
The
.B create
-line gives default values to be used when creating arrays and device entries for
-arrays.
+line gives default values to be used when creating arrays, new members
+of arrays, and device entries for arrays.
These include:
.RS 4
@@ -365,6 +365,16 @@ is given, then non-numeric
device names will not be used even if the default changes in a future
release of
.IR mdadm .
+
+.TP
+.B bbl=no
+By default,
+.I mdadm
+will reserve space for a bad block list (bbl) on all devices
+included in or added to any array that supports them. Setting
+.B bbl=no
+will prevent this, so newly added devices will not have a bad
+block log.
.RE
.TP
diff --git a/mdadm.h b/mdadm.h
index 02a9288d..dc3c107d 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -258,6 +258,7 @@ struct createinfo {
int mode;
int symlinks;
int names;
+ int bblist;
struct supertype *supertype;
};
diff --git a/super1.c b/super1.c
index 7fba9be0..9834594c 100644
--- a/super1.c
+++ b/super1.c
@@ -1688,6 +1688,10 @@ static int write_init_super1(struct supertype *st)
rv = -EINVAL;
goto out;
}
+ if (conf_get_create_info()->bblist == 0) {
+ sb->bblog_size = 0;
+ sb->bblog_offset = 0;
+ }
sb->sb_csum = calc_sb_1_csum(sb);
rv = store_super1(st, di->fd);