Commit cff9b7dd authored by Neil Brown's avatar Neil Brown Committed by Linus Torvalds

[PATCH] Honour the read-ahead for for reads in raid5.

If we get a failure trying to allocate a stripe_head for a read-ahead
request (the only time we can get a failure), we skip the rest of the
request and fail the whole bio.
parent 340df0b5
...@@ -1326,7 +1326,7 @@ static int make_request (request_queue_t *q, struct bio * bi) ...@@ -1326,7 +1326,7 @@ static int make_request (request_queue_t *q, struct bio * bi)
(unsigned long long)new_sector, (unsigned long long)new_sector,
(unsigned long long)logical_sector); (unsigned long long)logical_sector);
sh = get_active_stripe(conf, new_sector, pd_idx, 0/*(bi->bi_rw&RWA_MASK)*/); sh = get_active_stripe(conf, new_sector, pd_idx, (bi->bi_rw&RWA_MASK));
if (sh) { if (sh) {
add_stripe_bio(sh, bi, dd_idx, (bi->bi_rw&RW_MASK)); add_stripe_bio(sh, bi, dd_idx, (bi->bi_rw&RW_MASK));
...@@ -1334,7 +1334,12 @@ static int make_request (request_queue_t *q, struct bio * bi) ...@@ -1334,7 +1334,12 @@ static int make_request (request_queue_t *q, struct bio * bi)
raid5_plug_device(conf); raid5_plug_device(conf);
handle_stripe(sh); handle_stripe(sh);
release_stripe(sh); release_stripe(sh);
} else {
/* cannot get stripe for read-ahead, just give-up */
clear_bit(BIO_UPTODATE, &bi->bi_flags);
break;
} }
} }
spin_lock_irq(&conf->device_lock); spin_lock_irq(&conf->device_lock);
if (--bi->bi_phys_segments == 0) { if (--bi->bi_phys_segments == 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment