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
10831083 /* Create a fresh bio_list for all subordinate requests */
10841084 bio_list_on_stack[1] = bio_list_on_stack[0];
10851085 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);
10961086 ret = q->make_request_fn(q, bio);
1097− bio_clear_flag(bio, BIO_QUEUE_ENTERED);
10981087
10991088 /* sort new bios into those for a lower level
11001089 * 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
272272 /* there isn't chance to merge the splitted bio */
273273 split->bi_opf |= REQ_NOMERGE;
274274
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+
275285 bio_chain(split, *bio);
276286 trace_block_split(q, split, (*bio)->bi_iter.bi_sector);
277287 generic_make_request(*bio);