diff --git a/drivers/md/md.c b/drivers/md/md.c index 3db3d1b271f7ef18650a227a8dd07dbc2b8fefbc..1e634a68541ee82c891fa0ad2d0a0e1c996e9839 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -307,6 +307,10 @@ static void md_make_request(struct request_queue *q, struct bio *bio) bio_io_error(bio); return; } + if (mddev->ro == 1 && unlikely(rw == WRITE)) { + bio_endio(bio, bio_sectors(bio) == 0 ? 0 : -EROFS); + return; + } smp_rmb(); /* Ensure implications of 'active' are visible */ rcu_read_lock(); if (mddev->suspended) {