/*
                 * heck if we have a bad block, we do not erase bad blocks !
                 */
-               if (nand_block_checkbad(mtd, ((loff_t) page) <<
+               if (!instr->scrub && nand_block_checkbad(mtd, ((loff_t) page) <<
                                        chip->page_shift, 0, allowbbt)) {
                        printk(KERN_WARNING "nand_erase: attempt to erase a "
                               "bad block at page 0x%08x\n", page);
 
 #define cpu_to_je16(x) (x)
 #define cpu_to_je32(x) (x)
 
-/*****************************************************************************/
-static int nand_block_bad_scrub(struct mtd_info *mtd, loff_t ofs, int getchip)
-{
-       return 0;
-}
-
 /**
  * nand_erase_opts: - erase NAND flash with support for various options
  *                   (jffs2 formating)
        int bbtest = 1;
        int result;
        int percent_complete = -1;
-       int (*nand_block_bad_old)(struct mtd_info *, loff_t, int) = NULL;
        const char *mtd_device = meminfo->name;
        struct mtd_oob_ops oob_opts;
        struct nand_chip *chip = meminfo->priv;
         * and disable bad block table while erasing.
         */
        if (opts->scrub) {
-               struct nand_chip *priv_nand = meminfo->priv;
-
-               nand_block_bad_old = priv_nand->block_bad;
-               priv_nand->block_bad = nand_block_bad_scrub;
-               /* we don't need the bad block table anymore...
+               erase.scrub = opts->scrub;
+               /*
+                * We don't need the bad block table anymore...
                 * after scrub, there are no bad blocks left!
                 */
-               if (priv_nand->bbt) {
-                       kfree(priv_nand->bbt);
+               if (chip->bbt) {
+                       kfree(chip->bbt);
                }
-               priv_nand->bbt = NULL;
+               chip->bbt = NULL;
        }
 
        for (erased_length = 0;
        if (!opts->quiet)
                printf("\n");
 
-       if (nand_block_bad_old) {
-               struct nand_chip *priv_nand = meminfo->priv;
-
-               priv_nand->block_bad = nand_block_bad_old;
-               priv_nand->scan_bbt(meminfo);
-       }
+       if (opts->scrub)
+               chip->scan_bbt(meminfo);
 
        return 0;
 }