while (bio) { /* submit pending writes */
                        struct bio *next = bio->bi_next;
+                       struct md_rdev *rdev = (void*)bio->bi_bdev;
                        bio->bi_next = NULL;
-                       if (unlikely((bio_op(bio) == REQ_OP_DISCARD) &&
-                           !blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
+                       bio->bi_bdev = rdev->bdev;
+                       if (test_bit(Faulty, &rdev->flags)) {
+                               bio->bi_error = -EIO;
+                               bio_endio(bio);
+                       } else if (unlikely((bio_op(bio) == REQ_OP_DISCARD) &&
+                                           !blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
                                /* Just ignore it */
                                bio_endio(bio);
                        else
 
        while (bio) { /* submit pending writes */
                struct bio *next = bio->bi_next;
+               struct md_rdev *rdev = (void*)bio->bi_bdev;
                bio->bi_next = NULL;
-               if (unlikely((bio_op(bio) == REQ_OP_DISCARD) &&
-                   !blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
+               bio->bi_bdev = rdev->bdev;
+               if (test_bit(Faulty, &rdev->flags)) {
+                       bio->bi_error = -EIO;
+                       bio_endio(bio);
+               } else if (unlikely((bio_op(bio) == REQ_OP_DISCARD) &&
+                                   !blk_queue_discard(bdev_get_queue(bio->bi_bdev))))
                        /* Just ignore it */
                        bio_endio(bio);
                else
 
                mbio->bi_iter.bi_sector = (r1_bio->sector +
                                   conf->mirrors[i].rdev->data_offset);
-               mbio->bi_bdev = conf->mirrors[i].rdev->bdev;
+               mbio->bi_bdev = (void*)conf->mirrors[i].rdev;
                mbio->bi_end_io = raid1_end_write_request;
                bio_set_op_attrs(mbio, op, do_flush_fua | do_sync);
                mbio->bi_private = r1_bio;