Skip to content

Commit 4e4cbee

Browse files
Christoph Hellwigaxboe
authored andcommitted
block: switch bios to blk_status_t
Replace bi_error with a new bi_status to allow for a clear conversion. Note that device mapper overloaded bi_error with a private value, which we'll have to keep arround at least for now and thus propagate to a proper blk_status_t value. Signed-off-by: Christoph Hellwig <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
1 parent fc17b65 commit 4e4cbee

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+625
-603
lines changed

block/bio-integrity.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,15 +221,15 @@ static inline unsigned int bio_integrity_bytes(struct blk_integrity *bi,
221221
* @bio: bio to generate/verify integrity metadata for
222222
* @proc_fn: Pointer to the relevant processing function
223223
*/
224-
static int bio_integrity_process(struct bio *bio,
224+
static blk_status_t bio_integrity_process(struct bio *bio,
225225
integrity_processing_fn *proc_fn)
226226
{
227227
struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev);
228228
struct blk_integrity_iter iter;
229229
struct bvec_iter bviter;
230230
struct bio_vec bv;
231231
struct bio_integrity_payload *bip = bio_integrity(bio);
232-
unsigned int ret = 0;
232+
blk_status_t ret = BLK_STS_OK;
233233
void *prot_buf = page_address(bip->bip_vec->bv_page) +
234234
bip->bip_vec->bv_offset;
235235

@@ -366,7 +366,7 @@ static void bio_integrity_verify_fn(struct work_struct *work)
366366
struct bio *bio = bip->bip_bio;
367367
struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev);
368368

369-
bio->bi_error = bio_integrity_process(bio, bi->profile->verify_fn);
369+
bio->bi_status = bio_integrity_process(bio, bi->profile->verify_fn);
370370

371371
/* Restore original bio completion handler */
372372
bio->bi_end_io = bip->bip_end_io;
@@ -395,7 +395,7 @@ void bio_integrity_endio(struct bio *bio)
395395
* integrity metadata. Restore original bio end_io handler
396396
* and run it.
397397
*/
398-
if (bio->bi_error) {
398+
if (bio->bi_status) {
399399
bio->bi_end_io = bip->bip_end_io;
400400
bio_endio(bio);
401401

block/bio.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -309,8 +309,8 @@ static struct bio *__bio_chain_endio(struct bio *bio)
309309
{
310310
struct bio *parent = bio->bi_private;
311311

312-
if (!parent->bi_error)
313-
parent->bi_error = bio->bi_error;
312+
if (!parent->bi_status)
313+
parent->bi_status = bio->bi_status;
314314
bio_put(bio);
315315
return parent;
316316
}
@@ -918,7 +918,7 @@ static void submit_bio_wait_endio(struct bio *bio)
918918
{
919919
struct submit_bio_ret *ret = bio->bi_private;
920920

921-
ret->error = bio->bi_error;
921+
ret->error = blk_status_to_errno(bio->bi_status);
922922
complete(&ret->event);
923923
}
924924

@@ -1818,7 +1818,7 @@ void bio_endio(struct bio *bio)
18181818

18191819
if (bio->bi_bdev && bio_flagged(bio, BIO_TRACE_COMPLETION)) {
18201820
trace_block_bio_complete(bdev_get_queue(bio->bi_bdev),
1821-
bio, bio->bi_error);
1821+
bio, bio->bi_status);
18221822
bio_clear_flag(bio, BIO_TRACE_COMPLETION);
18231823
}
18241824

block/blk-core.c

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,9 @@ static const struct {
144144
[BLK_STS_PROTECTION] = { -EILSEQ, "protection" },
145145
[BLK_STS_RESOURCE] = { -ENOMEM, "kernel resource" },
146146

147+
/* device mapper special case, should not leak out: */
148+
[BLK_STS_DM_REQUEUE] = { -EREMCHG, "dm internal retry" },
149+
147150
/* everything else not covered above: */
148151
[BLK_STS_IOERR] = { -EIO, "I/O" },
149152
};
@@ -188,7 +191,7 @@ static void req_bio_endio(struct request *rq, struct bio *bio,
188191
unsigned int nbytes, blk_status_t error)
189192
{
190193
if (error)
191-
bio->bi_error = blk_status_to_errno(error);
194+
bio->bi_status = error;
192195

193196
if (unlikely(rq->rq_flags & RQF_QUIET))
194197
bio_set_flag(bio, BIO_QUIET);
@@ -1717,7 +1720,7 @@ static blk_qc_t blk_queue_bio(struct request_queue *q, struct bio *bio)
17171720
blk_queue_split(q, &bio, q->bio_split);
17181721

17191722
if (bio_integrity_enabled(bio) && bio_integrity_prep(bio)) {
1720-
bio->bi_error = -EIO;
1723+
bio->bi_status = BLK_STS_IOERR;
17211724
bio_endio(bio);
17221725
return BLK_QC_T_NONE;
17231726
}
@@ -1775,7 +1778,10 @@ static blk_qc_t blk_queue_bio(struct request_queue *q, struct bio *bio)
17751778
req = get_request(q, bio->bi_opf, bio, GFP_NOIO);
17761779
if (IS_ERR(req)) {
17771780
__wbt_done(q->rq_wb, wb_acct);
1778-
bio->bi_error = PTR_ERR(req);
1781+
if (PTR_ERR(req) == -ENOMEM)
1782+
bio->bi_status = BLK_STS_RESOURCE;
1783+
else
1784+
bio->bi_status = BLK_STS_IOERR;
17791785
bio_endio(bio);
17801786
goto out_unlock;
17811787
}
@@ -1930,7 +1936,7 @@ generic_make_request_checks(struct bio *bio)
19301936
{
19311937
struct request_queue *q;
19321938
int nr_sectors = bio_sectors(bio);
1933-
int err = -EIO;
1939+
blk_status_t status = BLK_STS_IOERR;
19341940
char b[BDEVNAME_SIZE];
19351941
struct hd_struct *part;
19361942

@@ -1973,7 +1979,7 @@ generic_make_request_checks(struct bio *bio)
19731979
!test_bit(QUEUE_FLAG_WC, &q->queue_flags)) {
19741980
bio->bi_opf &= ~(REQ_PREFLUSH | REQ_FUA);
19751981
if (!nr_sectors) {
1976-
err = 0;
1982+
status = BLK_STS_OK;
19771983
goto end_io;
19781984
}
19791985
}
@@ -2025,9 +2031,9 @@ generic_make_request_checks(struct bio *bio)
20252031
return true;
20262032

20272033
not_supported:
2028-
err = -EOPNOTSUPP;
2034+
status = BLK_STS_NOTSUPP;
20292035
end_io:
2030-
bio->bi_error = err;
2036+
bio->bi_status = status;
20312037
bio_endio(bio);
20322038
return false;
20332039
}

block/blk-integrity.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -384,9 +384,9 @@ static struct kobj_type integrity_ktype = {
384384
.sysfs_ops = &integrity_ops,
385385
};
386386

387-
static int blk_integrity_nop_fn(struct blk_integrity_iter *iter)
387+
static blk_status_t blk_integrity_nop_fn(struct blk_integrity_iter *iter)
388388
{
389-
return 0;
389+
return BLK_STS_OK;
390390
}
391391

392392
static const struct blk_integrity_profile nop_profile = {

block/bounce.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ static void bounce_end_io(struct bio *bio, mempool_t *pool)
143143
mempool_free(bvec->bv_page, pool);
144144
}
145145

146-
bio_orig->bi_error = bio->bi_error;
146+
bio_orig->bi_status = bio->bi_status;
147147
bio_endio(bio_orig);
148148
bio_put(bio);
149149
}
@@ -163,7 +163,7 @@ static void __bounce_end_io_read(struct bio *bio, mempool_t *pool)
163163
{
164164
struct bio *bio_orig = bio->bi_private;
165165

166-
if (!bio->bi_error)
166+
if (!bio->bi_status)
167167
copy_to_high_bio_irq(bio_orig, bio);
168168

169169
bounce_end_io(bio, pool);

block/t10-pi.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ static __be16 t10_pi_ip_fn(void *data, unsigned int len)
4646
* 16 bit app tag, 32 bit reference tag. Type 3 does not define the ref
4747
* tag.
4848
*/
49-
static int t10_pi_generate(struct blk_integrity_iter *iter, csum_fn *fn,
50-
unsigned int type)
49+
static blk_status_t t10_pi_generate(struct blk_integrity_iter *iter,
50+
csum_fn *fn, unsigned int type)
5151
{
5252
unsigned int i;
5353

@@ -67,11 +67,11 @@ static int t10_pi_generate(struct blk_integrity_iter *iter, csum_fn *fn,
6767
iter->seed++;
6868
}
6969

70-
return 0;
70+
return BLK_STS_OK;
7171
}
7272

73-
static int t10_pi_verify(struct blk_integrity_iter *iter, csum_fn *fn,
74-
unsigned int type)
73+
static blk_status_t t10_pi_verify(struct blk_integrity_iter *iter,
74+
csum_fn *fn, unsigned int type)
7575
{
7676
unsigned int i;
7777

@@ -108,7 +108,7 @@ static int t10_pi_verify(struct blk_integrity_iter *iter, csum_fn *fn,
108108
"(rcvd %04x, want %04x)\n", iter->disk_name,
109109
(unsigned long long)iter->seed,
110110
be16_to_cpu(pi->guard_tag), be16_to_cpu(csum));
111-
return -EILSEQ;
111+
return BLK_STS_PROTECTION;
112112
}
113113

114114
next:
@@ -117,45 +117,45 @@ static int t10_pi_verify(struct blk_integrity_iter *iter, csum_fn *fn,
117117
iter->seed++;
118118
}
119119

120-
return 0;
120+
return BLK_STS_OK;
121121
}
122122

123-
static int t10_pi_type1_generate_crc(struct blk_integrity_iter *iter)
123+
static blk_status_t t10_pi_type1_generate_crc(struct blk_integrity_iter *iter)
124124
{
125125
return t10_pi_generate(iter, t10_pi_crc_fn, 1);
126126
}
127127

128-
static int t10_pi_type1_generate_ip(struct blk_integrity_iter *iter)
128+
static blk_status_t t10_pi_type1_generate_ip(struct blk_integrity_iter *iter)
129129
{
130130
return t10_pi_generate(iter, t10_pi_ip_fn, 1);
131131
}
132132

133-
static int t10_pi_type1_verify_crc(struct blk_integrity_iter *iter)
133+
static blk_status_t t10_pi_type1_verify_crc(struct blk_integrity_iter *iter)
134134
{
135135
return t10_pi_verify(iter, t10_pi_crc_fn, 1);
136136
}
137137

138-
static int t10_pi_type1_verify_ip(struct blk_integrity_iter *iter)
138+
static blk_status_t t10_pi_type1_verify_ip(struct blk_integrity_iter *iter)
139139
{
140140
return t10_pi_verify(iter, t10_pi_ip_fn, 1);
141141
}
142142

143-
static int t10_pi_type3_generate_crc(struct blk_integrity_iter *iter)
143+
static blk_status_t t10_pi_type3_generate_crc(struct blk_integrity_iter *iter)
144144
{
145145
return t10_pi_generate(iter, t10_pi_crc_fn, 3);
146146
}
147147

148-
static int t10_pi_type3_generate_ip(struct blk_integrity_iter *iter)
148+
static blk_status_t t10_pi_type3_generate_ip(struct blk_integrity_iter *iter)
149149
{
150150
return t10_pi_generate(iter, t10_pi_ip_fn, 3);
151151
}
152152

153-
static int t10_pi_type3_verify_crc(struct blk_integrity_iter *iter)
153+
static blk_status_t t10_pi_type3_verify_crc(struct blk_integrity_iter *iter)
154154
{
155155
return t10_pi_verify(iter, t10_pi_crc_fn, 3);
156156
}
157157

158-
static int t10_pi_type3_verify_ip(struct blk_integrity_iter *iter)
158+
static blk_status_t t10_pi_type3_verify_ip(struct blk_integrity_iter *iter)
159159
{
160160
return t10_pi_verify(iter, t10_pi_ip_fn, 3);
161161
}

drivers/block/aoe/aoecmd.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,7 +1070,7 @@ aoe_end_request(struct aoedev *d, struct request *rq, int fastfail)
10701070
d->ip.rq = NULL;
10711071
do {
10721072
bio = rq->bio;
1073-
bok = !fastfail && !bio->bi_error;
1073+
bok = !fastfail && !bio->bi_status;
10741074
} while (__blk_end_request(rq, bok ? BLK_STS_OK : BLK_STS_IOERR, bio->bi_iter.bi_size));
10751075

10761076
/* cf. http://lkml.org/lkml/2006/10/31/28 */
@@ -1131,7 +1131,7 @@ ktiocomplete(struct frame *f)
11311131
ahout->cmdstat, ahin->cmdstat,
11321132
d->aoemajor, d->aoeminor);
11331133
noskb: if (buf)
1134-
buf->bio->bi_error = -EIO;
1134+
buf->bio->bi_status = BLK_STS_IOERR;
11351135
goto out;
11361136
}
11371137

@@ -1144,15 +1144,15 @@ noskb: if (buf)
11441144
"aoe: runt data size in read from",
11451145
(long) d->aoemajor, d->aoeminor,
11461146
skb->len, n);
1147-
buf->bio->bi_error = -EIO;
1147+
buf->bio->bi_status = BLK_STS_IOERR;
11481148
break;
11491149
}
11501150
if (n > f->iter.bi_size) {
11511151
pr_err_ratelimited("%s e%ld.%d. bytes=%ld need=%u\n",
11521152
"aoe: too-large data size in read from",
11531153
(long) d->aoemajor, d->aoeminor,
11541154
n, f->iter.bi_size);
1155-
buf->bio->bi_error = -EIO;
1155+
buf->bio->bi_status = BLK_STS_IOERR;
11561156
break;
11571157
}
11581158
bvcpy(skb, f->buf->bio, f->iter, n);
@@ -1654,7 +1654,7 @@ aoe_failbuf(struct aoedev *d, struct buf *buf)
16541654
if (buf == NULL)
16551655
return;
16561656
buf->iter.bi_size = 0;
1657-
buf->bio->bi_error = -EIO;
1657+
buf->bio->bi_status = BLK_STS_IOERR;
16581658
if (buf->nframesout == 0)
16591659
aoe_end_buf(d, buf);
16601660
}

drivers/block/aoe/aoedev.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ aoe_failip(struct aoedev *d)
170170
if (rq == NULL)
171171
return;
172172
while ((bio = d->ip.nxbio)) {
173-
bio->bi_error = -EIO;
173+
bio->bi_status = BLK_STS_IOERR;
174174
d->ip.nxbio = bio->bi_next;
175175
n = (unsigned long) rq->special;
176176
rq->special = (void *) --n;

drivers/block/drbd/drbd_actlog.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ static int _drbd_md_sync_page_io(struct drbd_device *device,
178178
else
179179
submit_bio(bio);
180180
wait_until_done_or_force_detached(device, bdev, &device->md_io.done);
181-
if (!bio->bi_error)
181+
if (!bio->bi_status)
182182
err = device->md_io.error;
183183

184184
out:

drivers/block/drbd/drbd_bitmap.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -959,16 +959,16 @@ static void drbd_bm_endio(struct bio *bio)
959959
!bm_test_page_unchanged(b->bm_pages[idx]))
960960
drbd_warn(device, "bitmap page idx %u changed during IO!\n", idx);
961961

962-
if (bio->bi_error) {
962+
if (bio->bi_status) {
963963
/* ctx error will hold the completed-last non-zero error code,
964964
* in case error codes differ. */
965-
ctx->error = bio->bi_error;
965+
ctx->error = blk_status_to_errno(bio->bi_status);
966966
bm_set_page_io_err(b->bm_pages[idx]);
967967
/* Not identical to on disk version of it.
968968
* Is BM_PAGE_IO_ERROR enough? */
969969
if (__ratelimit(&drbd_ratelimit_state))
970970
drbd_err(device, "IO ERROR %d on bitmap page idx %u\n",
971-
bio->bi_error, idx);
971+
bio->bi_status, idx);
972972
} else {
973973
bm_clear_page_io_err(b->bm_pages[idx]);
974974
dynamic_drbd_dbg(device, "bitmap page idx %u completed\n", idx);

drivers/block/drbd/drbd_int.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1627,7 +1627,7 @@ static inline void drbd_generic_make_request(struct drbd_device *device,
16271627
__release(local);
16281628
if (!bio->bi_bdev) {
16291629
drbd_err(device, "drbd_generic_make_request: bio->bi_bdev == NULL\n");
1630-
bio->bi_error = -ENODEV;
1630+
bio->bi_status = BLK_STS_IOERR;
16311631
bio_endio(bio);
16321632
return;
16331633
}

drivers/block/drbd/drbd_receiver.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1229,9 +1229,9 @@ void one_flush_endio(struct bio *bio)
12291229
struct drbd_device *device = octx->device;
12301230
struct issue_flush_context *ctx = octx->ctx;
12311231

1232-
if (bio->bi_error) {
1233-
ctx->error = bio->bi_error;
1234-
drbd_info(device, "local disk FLUSH FAILED with status %d\n", bio->bi_error);
1232+
if (bio->bi_status) {
1233+
ctx->error = blk_status_to_errno(bio->bi_status);
1234+
drbd_info(device, "local disk FLUSH FAILED with status %d\n", bio->bi_status);
12351235
}
12361236
kfree(octx);
12371237
bio_put(bio);

drivers/block/drbd/drbd_req.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ void start_new_tl_epoch(struct drbd_connection *connection)
203203
void complete_master_bio(struct drbd_device *device,
204204
struct bio_and_error *m)
205205
{
206-
m->bio->bi_error = m->error;
206+
m->bio->bi_status = errno_to_blk_status(m->error);
207207
bio_endio(m->bio);
208208
dec_ap_bio(device);
209209
}
@@ -1157,7 +1157,7 @@ static void drbd_process_discard_req(struct drbd_request *req)
11571157

11581158
if (blkdev_issue_zeroout(bdev, req->i.sector, req->i.size >> 9,
11591159
GFP_NOIO, 0))
1160-
req->private_bio->bi_error = -EIO;
1160+
req->private_bio->bi_status = BLK_STS_IOERR;
11611161
bio_endio(req->private_bio);
11621162
}
11631163

@@ -1225,7 +1225,7 @@ drbd_request_prepare(struct drbd_device *device, struct bio *bio, unsigned long
12251225
/* only pass the error to the upper layers.
12261226
* if user cannot handle io errors, that's not our business. */
12271227
drbd_err(device, "could not kmalloc() req\n");
1228-
bio->bi_error = -ENOMEM;
1228+
bio->bi_status = BLK_STS_RESOURCE;
12291229
bio_endio(bio);
12301230
return ERR_PTR(-ENOMEM);
12311231
}

0 commit comments

Comments
 (0)