[PATCH 2/2][RFC] add detailed error values to block layer

From: Mike Christie
Date: Thu Mar 18 2004 - 09:10:06 EST


02-ec-bioendio.patch converts the bio_endio and bi_end_io
callers to pass one of the error values defined in 01-ec-core.patch
instead of the Exxx errnos. Should be applied on top of
01-ec-core.patch.

diffstat

drivers/block/cciss.c | 3 ++-
drivers/block/cpqarray.c | 2 +-
drivers/block/ll_rw_blk.c | 4 ++--
drivers/block/loop.c | 2 +-
drivers/block/rd.c | 2 +-
drivers/block/umem.c | 2 +-
drivers/md/dm-crypt.c | 6 +++---
drivers/md/dm.c | 2 +-
drivers/md/multipath.c | 2 +-
drivers/md/raid1.c | 2 +-
drivers/md/raid5.c | 4 ++--
drivers/md/raid6main.c | 4 ++--
drivers/s390/block/dcssblk.c | 2 +-
drivers/s390/block/xpram.c | 2 +-
fs/bio.c | 4 ++--
mm/highmem.c | 2 +-
16 files changed, 23 insertions(+), 22 deletions(-)



Mike Chrisite diff -aurp linux-2.6.5-rc1-orig/drivers/block/cciss.c linux-2.6.5-rc1-ec/drivers/block/cciss.c
--- linux-2.6.5-rc1-orig/drivers/block/cciss.c 2004-03-15 21:47:36.000000000 -0800
+++ linux-2.6.5-rc1-ec/drivers/block/cciss.c 2004-03-18 05:21:14.371872116 -0800
@@ -1747,7 +1747,8 @@ static inline void complete_buffers(stru

bio->bi_next = NULL;
blk_finished_io(len);
- bio_endio(bio, nr_sectors << 9, status ? 0 : -EIO);
+ bio_endio(bio, nr_sectors << 9,
+ status ? BLK_SUCCESS : BLK_ERR);
bio = xbh;
}

diff -aurp linux-2.6.5-rc1-orig/drivers/block/cpqarray.c linux-2.6.5-rc1-ec/drivers/block/cpqarray.c
--- linux-2.6.5-rc1-orig/drivers/block/cpqarray.c 2004-03-15 21:45:34.000000000 -0800
+++ linux-2.6.5-rc1-ec/drivers/block/cpqarray.c 2004-03-18 05:21:14.407867710 -0800
@@ -886,7 +886,7 @@ static inline void complete_buffers(stru
bio->bi_next = NULL;

blk_finished_io(nr_sectors);
- bio_endio(bio, nr_sectors << 9, ok ? 0 : -EIO);
+ bio_endio(bio, nr_sectors << 9, ok ? BLK_SUCCESS : BLK_ERR);

bio = xbh;
}
diff -aurp linux-2.6.5-rc1-orig/drivers/block/ll_rw_blk.c linux-2.6.5-rc1-ec/drivers/block/ll_rw_blk.c
--- linux-2.6.5-rc1-orig/drivers/block/ll_rw_blk.c 2004-03-18 05:27:12.971665933 -0800
+++ linux-2.6.5-rc1-ec/drivers/block/ll_rw_blk.c 2004-03-18 05:21:14.443863304 -0800
@@ -2309,7 +2309,7 @@ out:
return 0;

end_io:
- bio_endio(bio, nr_sectors << 9, -EWOULDBLOCK);
+ bio_endio(bio, nr_sectors << 9, BLK_RETRY_DRV);
return 0;
}

@@ -2411,7 +2411,7 @@ void generic_make_request(struct bio *bi
bdevname(bio->bi_bdev, b),
(long long) bio->bi_sector);
end_io:
- bio_endio(bio, bio->bi_size, -EIO);
+ bio_endio(bio, bio->bi_size, BLK_ERR);
break;
}

diff -aurp linux-2.6.5-rc1-orig/drivers/block/loop.c linux-2.6.5-rc1-ec/drivers/block/loop.c
--- linux-2.6.5-rc1-orig/drivers/block/loop.c 2004-03-15 21:46:44.000000000 -0800
+++ linux-2.6.5-rc1-ec/drivers/block/loop.c 2004-03-18 05:21:14.447862815 -0800
@@ -450,7 +450,7 @@ static inline void loop_handle_bio(struc
bio_put(bio);
} else {
ret = do_bio_filebacked(lo, bio);
- bio_endio(bio, bio->bi_size, ret);
+ bio_endio(bio, bio->bi_size, ret ? BLK_ERR : BLK_SUCCESS);
}
}

diff -aurp linux-2.6.5-rc1-orig/drivers/block/rd.c linux-2.6.5-rc1-ec/drivers/block/rd.c
--- linux-2.6.5-rc1-orig/drivers/block/rd.c 2004-03-15 21:46:44.000000000 -0800
+++ linux-2.6.5-rc1-ec/drivers/block/rd.c 2004-03-18 05:21:14.479858899 -0800
@@ -237,7 +237,7 @@ static int rd_make_request(request_queue
if (ret)
goto fail;

- bio_endio(bio, bio->bi_size, 0);
+ bio_endio(bio, bio->bi_size, BLK_SUCCESS);
return 0;
fail:
bio_io_error(bio, bio->bi_size);
diff -aurp linux-2.6.5-rc1-orig/drivers/block/umem.c linux-2.6.5-rc1-ec/drivers/block/umem.c
--- linux-2.6.5-rc1-orig/drivers/block/umem.c 2004-03-15 21:47:38.000000000 -0800
+++ linux-2.6.5-rc1-ec/drivers/block/umem.c 2004-03-18 05:21:14.543851066 -0800
@@ -544,7 +544,7 @@ static void process_page(unsigned long d

return_bio = bio->bi_next;
bio->bi_next = NULL;
- bio_endio(bio, bio->bi_size, 0);
+ bio_endio(bio, bio->bi_size, BLK_SUCCESS);
}
}

diff -aurp linux-2.6.5-rc1-orig/drivers/md/dm.c linux-2.6.5-rc1-ec/drivers/md/dm.c
--- linux-2.6.5-rc1-orig/drivers/md/dm.c 2004-03-15 21:47:17.000000000 -0800
+++ linux-2.6.5-rc1-ec/drivers/md/dm.c 2004-03-18 05:21:14.546850699 -0800
@@ -486,7 +486,7 @@ static void __split_bio(struct mapped_de
ci.md = md;
ci.bio = bio;
ci.io = alloc_io(md);
- ci.io->error = 0;
+ ci.io->error = BLK_SUCCESS;
atomic_set(&ci.io->io_count, 1);
ci.io->bio = bio;
ci.io->md = md;
diff -aurp linux-2.6.5-rc1-orig/drivers/md/dm-crypt.c linux-2.6.5-rc1-ec/drivers/md/dm-crypt.c
--- linux-2.6.5-rc1-orig/drivers/md/dm-crypt.c 2004-03-15 21:45:19.000000000 -0800
+++ linux-2.6.5-rc1-ec/drivers/md/dm-crypt.c 2004-03-18 05:21:14.608843111 -0800
@@ -320,8 +320,8 @@ static void dec_pending(struct crypt_io
{
struct crypt_config *cc = (struct crypt_config *) io->target->private;

- if (error < 0)
- io->error = error;
+ if (error)
+ io->error = BLK_ERR;

if (!atomic_dec_and_test(&io->pending))
return;
@@ -635,7 +635,7 @@ static int crypt_map(struct dm_target *t
io->target = ti;
io->bio = bio;
io->first_clone = NULL;
- io->error = 0;
+ io->error = BLK_SUCCESS;
atomic_set(&io->pending, 1); /* hold a reference */

if (bio_data_dir(bio) == WRITE)
diff -aurp linux-2.6.5-rc1-orig/drivers/md/multipath.c linux-2.6.5-rc1-ec/drivers/md/multipath.c
--- linux-2.6.5-rc1-orig/drivers/md/multipath.c 2004-03-15 21:46:34.000000000 -0800
+++ linux-2.6.5-rc1-ec/drivers/md/multipath.c 2004-03-18 05:21:14.610842866 -0800
@@ -106,7 +106,7 @@ static void multipath_end_bh_io (struct
struct bio *bio = mp_bh->master_bio;
multipath_conf_t *conf = mddev_to_conf(mp_bh->mddev);

- bio_endio(bio, bio->bi_size, uptodate ? 0 : -EIO);
+ bio_endio(bio, bio->bi_size, uptodate ? BLK_SUCCESS : BLK_ERR);
mempool_free(mp_bh, conf->pool);
}

diff -aurp linux-2.6.5-rc1-orig/drivers/md/raid1.c linux-2.6.5-rc1-ec/drivers/md/raid1.c
--- linux-2.6.5-rc1-orig/drivers/md/raid1.c 2004-03-15 21:46:44.000000000 -0800
+++ linux-2.6.5-rc1-ec/drivers/md/raid1.c 2004-03-18 05:21:14.672835278 -0800
@@ -229,7 +229,7 @@ static void raid_end_bio_io(r1bio_t *r1_
struct bio *bio = r1_bio->master_bio;

bio_endio(bio, bio->bi_size,
- test_bit(R1BIO_Uptodate, &r1_bio->state) ? 0 : -EIO);
+ test_bit(R1BIO_Uptodate, &r1_bio->state) ? BLK_SUCCESS : BLK_ERR);
free_r1bio(r1_bio);
}

diff -aurp linux-2.6.5-rc1-orig/drivers/md/raid5.c linux-2.6.5-rc1-ec/drivers/md/raid5.c
--- linux-2.6.5-rc1-orig/drivers/md/raid5.c 2004-03-15 21:45:49.000000000 -0800
+++ linux-2.6.5-rc1-ec/drivers/md/raid5.c 2004-03-18 05:25:55.340809465 -0800
@@ -1221,7 +1221,7 @@ static void handle_stripe(struct stripe_
return_bi = bi->bi_next;
bi->bi_next = NULL;
bi->bi_size = 0;
- bi->bi_end_io(bi, bytes, 0);
+ bi->bi_end_io(bi, bytes, BLK_SUCCESS);
}
for (i=disks; i-- ;) {
int rw;
@@ -1372,7 +1372,7 @@ static int make_request (request_queue_t
if ( bio_data_dir(bi) == WRITE )
md_write_end(mddev);
bi->bi_size = 0;
- bi->bi_end_io(bi, bytes, 0);
+ bi->bi_end_io(bi, bytes, BLK_SUCCESS);
}
spin_unlock_irq(&conf->device_lock);
return 0;
diff -aurp linux-2.6.5-rc1-orig/drivers/md/raid6main.c linux-2.6.5-rc1-ec/drivers/md/raid6main.c
--- linux-2.6.5-rc1-orig/drivers/md/raid6main.c 2004-03-15 21:45:19.000000000 -0800
+++ linux-2.6.5-rc1-ec/drivers/md/raid6main.c 2004-03-18 05:23:54.908210939 -0800
@@ -1383,7 +1383,7 @@ static void handle_stripe(struct stripe_
return_bi = bi->bi_next;
bi->bi_next = NULL;
bi->bi_size = 0;
- bi->bi_end_io(bi, bytes, 0);
+ bi->bi_end_io(bi, bytes, BLK_SUCCESS);
}
for (i=disks; i-- ;) {
int rw;
@@ -1534,7 +1534,7 @@ static int make_request (request_queue_t
if ( bio_data_dir(bi) == WRITE )
md_write_end(mddev);
bi->bi_size = 0;
- bi->bi_end_io(bi, bytes, 0);
+ bi->bi_end_io(bi, bytes, BLK_SUCCESS);
}
spin_unlock_irq(&conf->device_lock);
return 0;
diff -aurp linux-2.6.5-rc1-orig/drivers/s390/block/dcssblk.c linux-2.6.5-rc1-ec/drivers/s390/block/dcssblk.c
--- linux-2.6.5-rc1-orig/drivers/s390/block/dcssblk.c 2004-03-15 21:45:49.000000000 -0800
+++ linux-2.6.5-rc1-ec/drivers/s390/block/dcssblk.c 2004-03-18 05:21:14.715830016 -0800
@@ -641,7 +641,7 @@ dcssblk_make_request(request_queue_t *q,
}
bytes_done += bvec->bv_len;
}
- bio_endio(bio, bytes_done, 0);
+ bio_endio(bio, bytes_done, BLK_SUCCESS);
return 0;
fail:
bio_io_error(bio, bytes_done);
diff -aurp linux-2.6.5-rc1-orig/drivers/s390/block/xpram.c linux-2.6.5-rc1-ec/drivers/s390/block/xpram.c
--- linux-2.6.5-rc1-orig/drivers/s390/block/xpram.c 2004-03-15 21:47:04.000000000 -0800
+++ linux-2.6.5-rc1-ec/drivers/s390/block/xpram.c 2004-03-18 05:25:49.008622034 -0800
@@ -322,7 +322,7 @@ static int xpram_make_request(request_qu
set_bit(BIO_UPTODATE, &bio->bi_flags);
bytes = bio->bi_size;
bio->bi_size = 0;
- bio->bi_end_io(bio, bytes, 0);
+ bio->bi_end_io(bio, bytes, BLK_SUCCESS);
return 0;
fail:
bio_io_error(bio, bio->bi_size);
diff -aurp linux-2.6.5-rc1-orig/fs/bio.c linux-2.6.5-rc1-ec/fs/bio.c
--- linux-2.6.5-rc1-orig/fs/bio.c 2004-03-18 05:27:13.000000000 -0800
+++ linux-2.6.5-rc1-ec/fs/bio.c 2004-03-18 05:21:14.000000000 -0800
@@ -473,7 +473,7 @@ struct bio *bio_map_user(request_queue_t
bio_get(bio);

if (bio->bi_size < len) {
- bio_endio(bio, bio->bi_size, 0);
+ bio_endio(bio, bio->bi_size, BLK_SUCCESS);
bio_unmap_user(bio, 0);
return NULL;
}
@@ -737,7 +737,7 @@ struct bio_pair *bio_split(struct bio *b
BUG_ON(bi->bi_vcnt != 1);
BUG_ON(bi->bi_idx != 0);
atomic_set(&bp->cnt, 3);
- bp->error = 0;
+ bp->error = BLK_SUCCESS;
bp->bio1 = *bi;
bp->bio2 = *bi;
bp->bio2.bi_sector += first_sectors;
diff -aurp linux-2.6.5-rc1-orig/mm/highmem.c linux-2.6.5-rc1-ec/mm/highmem.c
--- linux-2.6.5-rc1-orig/mm/highmem.c 2004-03-15 21:46:45.000000000 -0800
+++ linux-2.6.5-rc1-ec/mm/highmem.c 2004-03-18 05:21:14.000000000 -0800
@@ -328,7 +328,7 @@ static void bounce_end_io(struct bio *bi
}

out_eio:
- bio_endio(bio_orig, bio_orig->bi_size, 0);
+ bio_endio(bio_orig, bio_orig->bi_size, BLK_SUCCESS);
bio_put(bio);
}