unsigned long flags = ACCESS_ONCE(rdev->flags);
 
        if (test_bit(Faulty, &flags) ||
-           rdev->badblocks.unacked_exist)
+           (!test_bit(ExternalBbl, &flags) &&
+           rdev->badblocks.unacked_exist))
                len += sprintf(page+len, "faulty%s", sep);
        if (test_bit(In_sync, &flags))
                len += sprintf(page+len, "in_sync%s", sep);
                err = 0;
        } else if (cmd_match(buf, "-blocked")) {
                if (!test_bit(Faulty, &rdev->flags) &&
+                   !test_bit(ExternalBbl, &rdev->flags) &&
                    rdev->badblocks.unacked_exist) {
                        /* metadata handler doesn't understand badblocks,
                         * so we need to fail the device