History

Merge tag 'for-linus-20190127' of git://git.kernel.dk/linux-block

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"

Linus Torvalds committed 7 years ago

Commit 419967d2 parents 1fc7f56 947b7ac2 files · +10 −11Browse files

Unified · Split

2 files
  1. block/blk-core.c +0 −11
  2. block/blk-merge.c +10 −0
block/blk-core.c+0−11
@@ -1083,18 +1083,7 @@ blk_qc_t generic_make_request(struct bio *bio) · 1082 unmodified lines
1083 /* Create a fresh bio_list for all subordinate requests */1083 /* Create a fresh bio_list for all subordinate requests */
1084 bio_list_on_stack[1] = bio_list_on_stack[0];1084 bio_list_on_stack[1] = bio_list_on_stack[0];
1085 bio_list_init(&bio_list_on_stack[0]);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 ret = q->make_request_fn(q, bio);1086 ret = q->make_request_fn(q, bio);
1097 bio_clear_flag(bio, BIO_QUEUE_ENTERED);
1098 1087
1099 /* sort new bios into those for a lower level1088 /* sort new bios into those for a lower level
1100 * and those for the same level1089 * and those for the same level
block/blk-merge.c+10−0
@@ -272,6 +272,16 @@ void blk_queue_split(struct request_queue *q, struct bio **bio) · 271 unmodified lines
272 /* there isn't chance to merge the splitted bio */272 /* there isn't chance to merge the splitted bio */
273 split->bi_opf |= REQ_NOMERGE;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 bio_chain(split, *bio);285 bio_chain(split, *bio);
276 trace_block_split(q, split, (*bio)->bi_iter.bi_sector);286 trace_block_split(q, split, (*bio)->bi_iter.bi_sector);
277 generic_make_request(*bio);287 generic_make_request(*bio);