@@ -29,6 +29,7 @@ static void display_help(int status)
"Writes to the specified MTD device.\n"
"\n"
" -b num, --markbad=num Mark block bad\n"
+" -n --noerase Don't erase block before marking it bad\n"
" -q, --quiet Don't display progress messages\n"
" -h, --help Display this help and exit\n"
" --version Output version information and exit\n"
@@ -54,6 +55,7 @@ static const char *mtd_device;
static bool quiet = false;
static int markbad = -1;
static int markgood = -1;
+static bool noerase = false;
static void process_options(int argc, char * const argv[])
{
@@ -61,13 +63,14 @@ static void process_options(int argc, char * const
argv[])
for (;;) {
int option_index = 0;
- static const char short_options[] = "vhb:g:q";
+ static const char short_options[] = "vhb:g:nq";
static const struct option long_options[] = {
/* Order of these args with val==0 matters; see
option_index. */
{"version", no_argument, 0, 'v'},
{"help", no_argument, 0, 'h'},
{"markbad", required_argument, 0, 'b'},
{"markgood", required_argument, 0, 'g'},
+ {"noerase", no_argument, 0, 'n'},
{"quiet", no_argument, 0, 'q'},
Add ability to erase blocks before marking, and an option to not do that. Signed-off-by: Stas Sergeev <stsp@users.sourceforge.net> --- nandmarkblk.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) {0, 0, 0, 0}, }; @@ -90,6 +93,9 @@ static void process_options(int argc, char * const argv[]) case 'b': markbad = simple_strtoll(optarg, &error); break; + case 'n': + noerase = true; + break; case 'h': display_help(EXIT_SUCCESS); break; @@ -132,9 +138,15 @@ int main(int argc, char * const argv[]) if (mtd_get_dev_info(mtd_desc, mtd_device, &mtd) < 0) errmsg_die("mtd_get_dev_info failed"); - if (markbad != -1 && mtd_mark_bad(&mtd, fd, markbad)) { - sys_errmsg("%s: MTD Mark bad block failure", mtd_device); - goto closeall; + if (markbad != -1) { + if (!noerase && mtd_erase(mtd_desc, &mtd, fd, markbad) != 0) { + sys_errmsg("%s: MTD Erase failure", mtd_device); + goto closeall; + } + if (mtd_mark_bad(&mtd, fd, markbad)) { + sys_errmsg("%s: MTD Mark bad block failure", mtd_device); + goto closeall; + } } if (markgood != -1) {