diff --git a/config.c b/config.c index a35807c..909f83f 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 61267b6..18512cb 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 02a9288..dc3c107 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 7fba9be..9834594 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);