Pull block revert from Jens Axboe: "Silly error snuck into a patch from the last series, let's do a revert to avoid a potential use-after-free" * tag 'for-linus-20190127' of git://git.kernel.dk/linux-block: Revert "block: cover another queue enter recursion via BIO_QUEUE_ENTERED"
Unified · Split
| @@ -1083,18 +1083,7 @@ blk_qc_t generic_make_request(struct bio *bio) · 1082 unmodified lines | ||
| 1083 | 1083 | /* Create a fresh bio_list for all subordinate requests */ |
| 1084 | 1084 | bio_list_on_stack[1] = bio_list_on_stack[0]; |
| 1085 | 1085 | bio_list_init(&bio_list_on_stack[0]); |
| 1086 | − | |
| 1087 | − /* | |
| 1088 | − * Since we're recursing into make_request here, ensure | |
| 1089 | − * that we mark this bio as already having entered the queue. | |
| 1090 | − * If not, and the queue is going away, we can get stuck | |
| 1091 | − * forever on waiting for the queue reference to drop. But | |
| 1092 | − * that will never happen, as we're already holding a | |
| 1093 | − * reference to it. | |
| 1094 | − */ | |
| 1095 | − bio_set_flag(bio, BIO_QUEUE_ENTERED); | |
| 1096 | 1086 | ret = q->make_request_fn(q, bio); |
| 1097 | − bio_clear_flag(bio, BIO_QUEUE_ENTERED); | |
| 1098 | 1087 | |
| 1099 | 1088 | /* sort new bios into those for a lower level |
| 1100 | 1089 | * and those for the same level |
| @@ -272,6 +272,16 @@ void blk_queue_split(struct request_queue *q, struct bio **bio) · 271 unmodified lines | ||
| 272 | 272 | /* there isn't chance to merge the splitted bio */ |
| 273 | 273 | split->bi_opf |= REQ_NOMERGE; |
| 274 | 274 | |
| 275 | + /* | |
| 276 | + * Since we're recursing into make_request here, ensure | |
| 277 | + * that we mark this bio as already having entered the queue. | |
| 278 | + * If not, and the queue is going away, we can get stuck | |
| 279 | + * forever on waiting for the queue reference to drop. But | |
| 280 | + * that will never happen, as we're already holding a | |
| 281 | + * reference to it. | |
| 282 | + */ | |
| 283 | + bio_set_flag(*bio, BIO_QUEUE_ENTERED); | |
| 284 | + | |
| 275 | 285 | bio_chain(split, *bio); |
| 276 | 286 | trace_block_split(q, split, (*bio)->bi_iter.bi_sector); |
| 277 | 287 | generic_make_request(*bio); |