|
@@ -544,35 +544,7 @@ static int raid5_end_read_request(struct bio * bi, unsigned int bytes_done,
|
|
}
|
|
}
|
|
|
|
|
|
if (uptodate) {
|
|
if (uptodate) {
|
|
-#if 0
|
|
|
|
- struct bio *bio;
|
|
|
|
- unsigned long flags;
|
|
|
|
- spin_lock_irqsave(&conf->device_lock, flags);
|
|
|
|
- /* we can return a buffer if we bypassed the cache or
|
|
|
|
- * if the top buffer is not in highmem. If there are
|
|
|
|
- * multiple buffers, leave the extra work to
|
|
|
|
- * handle_stripe
|
|
|
|
- */
|
|
|
|
- buffer = sh->bh_read[i];
|
|
|
|
- if (buffer &&
|
|
|
|
- (!PageHighMem(buffer->b_page)
|
|
|
|
- || buffer->b_page == bh->b_page )
|
|
|
|
- ) {
|
|
|
|
- sh->bh_read[i] = buffer->b_reqnext;
|
|
|
|
- buffer->b_reqnext = NULL;
|
|
|
|
- } else
|
|
|
|
- buffer = NULL;
|
|
|
|
- spin_unlock_irqrestore(&conf->device_lock, flags);
|
|
|
|
- if (sh->bh_page[i]==bh->b_page)
|
|
|
|
- set_buffer_uptodate(bh);
|
|
|
|
- if (buffer) {
|
|
|
|
- if (buffer->b_page != bh->b_page)
|
|
|
|
- memcpy(buffer->b_data, bh->b_data, bh->b_size);
|
|
|
|
- buffer->b_end_io(buffer, 1);
|
|
|
|
- }
|
|
|
|
-#else
|
|
|
|
set_bit(R5_UPTODATE, &sh->dev[i].flags);
|
|
set_bit(R5_UPTODATE, &sh->dev[i].flags);
|
|
-#endif
|
|
|
|
if (test_bit(R5_ReadError, &sh->dev[i].flags)) {
|
|
if (test_bit(R5_ReadError, &sh->dev[i].flags)) {
|
|
rdev = conf->disks[i].rdev;
|
|
rdev = conf->disks[i].rdev;
|
|
printk(KERN_INFO "raid5:%s: read error corrected (%lu sectors at %llu on %s)\n",
|
|
printk(KERN_INFO "raid5:%s: read error corrected (%lu sectors at %llu on %s)\n",
|
|
@@ -618,14 +590,6 @@ static int raid5_end_read_request(struct bio * bi, unsigned int bytes_done,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
rdev_dec_pending(conf->disks[i].rdev, conf->mddev);
|
|
rdev_dec_pending(conf->disks[i].rdev, conf->mddev);
|
|
-#if 0
|
|
|
|
- /* must restore b_page before unlocking buffer... */
|
|
|
|
- if (sh->bh_page[i] != bh->b_page) {
|
|
|
|
- bh->b_page = sh->bh_page[i];
|
|
|
|
- bh->b_data = page_address(bh->b_page);
|
|
|
|
- clear_buffer_uptodate(bh);
|
|
|
|
- }
|
|
|
|
-#endif
|
|
|
|
clear_bit(R5_LOCKED, &sh->dev[i].flags);
|
|
clear_bit(R5_LOCKED, &sh->dev[i].flags);
|
|
set_bit(STRIPE_HANDLE, &sh->state);
|
|
set_bit(STRIPE_HANDLE, &sh->state);
|
|
release_stripe(sh);
|
|
release_stripe(sh);
|
|
@@ -1619,15 +1583,6 @@ static void handle_stripe5(struct stripe_head *sh)
|
|
} else if (test_bit(R5_Insync, &dev->flags)) {
|
|
} else if (test_bit(R5_Insync, &dev->flags)) {
|
|
set_bit(R5_LOCKED, &dev->flags);
|
|
set_bit(R5_LOCKED, &dev->flags);
|
|
set_bit(R5_Wantread, &dev->flags);
|
|
set_bit(R5_Wantread, &dev->flags);
|
|
-#if 0
|
|
|
|
- /* if I am just reading this block and we don't have
|
|
|
|
- a failed drive, or any pending writes then sidestep the cache */
|
|
|
|
- if (sh->bh_read[i] && !sh->bh_read[i]->b_reqnext &&
|
|
|
|
- ! syncing && !failed && !to_write) {
|
|
|
|
- sh->bh_cache[i]->b_page = sh->bh_read[i]->b_page;
|
|
|
|
- sh->bh_cache[i]->b_data = sh->bh_read[i]->b_data;
|
|
|
|
- }
|
|
|
|
-#endif
|
|
|
|
locked++;
|
|
locked++;
|
|
PRINTK("Reading block %d (sync=%d)\n",
|
|
PRINTK("Reading block %d (sync=%d)\n",
|
|
i, syncing);
|
|
i, syncing);
|
|
@@ -1645,9 +1600,6 @@ static void handle_stripe5(struct stripe_head *sh)
|
|
dev = &sh->dev[i];
|
|
dev = &sh->dev[i];
|
|
if ((dev->towrite || i == sh->pd_idx) &&
|
|
if ((dev->towrite || i == sh->pd_idx) &&
|
|
(!test_bit(R5_LOCKED, &dev->flags)
|
|
(!test_bit(R5_LOCKED, &dev->flags)
|
|
-#if 0
|
|
|
|
-|| sh->bh_page[i]!=bh->b_page
|
|
|
|
-#endif
|
|
|
|
) &&
|
|
) &&
|
|
!test_bit(R5_UPTODATE, &dev->flags)) {
|
|
!test_bit(R5_UPTODATE, &dev->flags)) {
|
|
if (test_bit(R5_Insync, &dev->flags)
|
|
if (test_bit(R5_Insync, &dev->flags)
|
|
@@ -1659,9 +1611,6 @@ static void handle_stripe5(struct stripe_head *sh)
|
|
/* Would I have to read this buffer for reconstruct_write */
|
|
/* Would I have to read this buffer for reconstruct_write */
|
|
if (!test_bit(R5_OVERWRITE, &dev->flags) && i != sh->pd_idx &&
|
|
if (!test_bit(R5_OVERWRITE, &dev->flags) && i != sh->pd_idx &&
|
|
(!test_bit(R5_LOCKED, &dev->flags)
|
|
(!test_bit(R5_LOCKED, &dev->flags)
|
|
-#if 0
|
|
|
|
-|| sh->bh_page[i] != bh->b_page
|
|
|
|
-#endif
|
|
|
|
) &&
|
|
) &&
|
|
!test_bit(R5_UPTODATE, &dev->flags)) {
|
|
!test_bit(R5_UPTODATE, &dev->flags)) {
|
|
if (test_bit(R5_Insync, &dev->flags)) rcw++;
|
|
if (test_bit(R5_Insync, &dev->flags)) rcw++;
|
|
@@ -2197,15 +2146,6 @@ static void handle_stripe6(struct stripe_head *sh, struct page *tmp_page)
|
|
} else if (test_bit(R5_Insync, &dev->flags)) {
|
|
} else if (test_bit(R5_Insync, &dev->flags)) {
|
|
set_bit(R5_LOCKED, &dev->flags);
|
|
set_bit(R5_LOCKED, &dev->flags);
|
|
set_bit(R5_Wantread, &dev->flags);
|
|
set_bit(R5_Wantread, &dev->flags);
|
|
-#if 0
|
|
|
|
- /* if I am just reading this block and we don't have
|
|
|
|
- a failed drive, or any pending writes then sidestep the cache */
|
|
|
|
- if (sh->bh_read[i] && !sh->bh_read[i]->b_reqnext &&
|
|
|
|
- ! syncing && !failed && !to_write) {
|
|
|
|
- sh->bh_cache[i]->b_page = sh->bh_read[i]->b_page;
|
|
|
|
- sh->bh_cache[i]->b_data = sh->bh_read[i]->b_data;
|
|
|
|
- }
|
|
|
|
-#endif
|
|
|
|
locked++;
|
|
locked++;
|
|
PRINTK("Reading block %d (sync=%d)\n",
|
|
PRINTK("Reading block %d (sync=%d)\n",
|
|
i, syncing);
|
|
i, syncing);
|
|
@@ -2224,9 +2164,6 @@ static void handle_stripe6(struct stripe_head *sh, struct page *tmp_page)
|
|
if (!test_bit(R5_OVERWRITE, &dev->flags)
|
|
if (!test_bit(R5_OVERWRITE, &dev->flags)
|
|
&& i != pd_idx && i != qd_idx
|
|
&& i != pd_idx && i != qd_idx
|
|
&& (!test_bit(R5_LOCKED, &dev->flags)
|
|
&& (!test_bit(R5_LOCKED, &dev->flags)
|
|
-#if 0
|
|
|
|
- || sh->bh_page[i] != bh->b_page
|
|
|
|
-#endif
|
|
|
|
) &&
|
|
) &&
|
|
!test_bit(R5_UPTODATE, &dev->flags)) {
|
|
!test_bit(R5_UPTODATE, &dev->flags)) {
|
|
if (test_bit(R5_Insync, &dev->flags)) rcw++;
|
|
if (test_bit(R5_Insync, &dev->flags)) rcw++;
|