diff for duplicates of <1489592177.2660.1.camel@sandisk.com> diff --git a/a/1.txt b/N1/1.txt index 0941947..9024145 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,20 +1,17 @@ On Wed, 2017-03-15 at 20:40 +0800, Ming Lei wrote: > On Wed, Mar 15, 2017 at 08:18:53PM +0800, Ming Lei wrote: > > On Wed, Mar 15, 2017 at 12:07:37AM +0000, Bart Van Assche wrote: -> >=20 -> > > or __blk_mq_requeue_request(). Another issue with this function is th= -at the -> >=20 +> > +> > > or __blk_mq_requeue_request(). Another issue with this function is that the +> > > > __blk_mq_requeue_request() can be run from two pathes: -> >=20 -> > - dispatch failure, in which case the req/tag isn't released to tag se= -t -> > =09 -> > - IO completion path, in which COMPLETE flag is cleared before requeue= -. -> > =09 -> > so I can't see races with timeout in case of start rq vs. requeue rq.=20 ->=20 +> > +> > - dispatch failure, in which case the req/tag isn't released to tag set +> > +> > - IO completion path, in which COMPLETE flag is cleared before requeue. +> > +> > so I can't see races with timeout in case of start rq vs. requeue rq. +> > Actually rq/tag won't be released to tag set if it will be requeued, so > the timeout race is nothing to do with requeue. @@ -24,9 +21,8 @@ Please have another look at __blk_mq_requeue_request(). In that function the following code occurs: if (test_and_clear_bit(REQ_ATOM_STARTED, &rq->atomic_flags)) { ... } -I think the=A0REQ_ATOM_STARTED check in blk_mq_check_expired() races with t= -he +I think the REQ_ATOM_STARTED check in blk_mq_check_expired() races with the test_and_clear_bit(REQ_ATOM_STARTED, &rq->atomic_flags) call in __blk_mq_requeue_request(). -Bart.= +Bart. diff --git a/a/content_digest b/N1/content_digest index dc8094c..48a8c48 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -18,20 +18,17 @@ "On Wed, 2017-03-15 at 20:40 +0800, Ming Lei wrote:\n" "> On Wed, Mar 15, 2017 at 08:18:53PM +0800, Ming Lei wrote:\n" "> > On Wed, Mar 15, 2017 at 12:07:37AM +0000, Bart Van Assche wrote:\n" - "> >=20\n" - "> > > or __blk_mq_requeue_request(). Another issue with this function is th=\n" - "at the\n" - "> >=20\n" + "> > \n" + "> > > or __blk_mq_requeue_request(). Another issue with this function is that the\n" + "> > \n" "> > __blk_mq_requeue_request() can be run from two pathes:\n" - "> >=20\n" - "> > \t- dispatch failure, in which case the req/tag isn't released to tag se=\n" - "t\n" - "> > =09\n" - "> > \t- IO completion path, in which COMPLETE flag is cleared before requeue=\n" - ".\n" - "> > =09\n" - "> > so I can't see races with timeout in case of start rq vs. requeue rq.=20\n" - ">=20\n" + "> > \n" + "> > \t- dispatch failure, in which case the req/tag isn't released to tag set\n" + "> > \t\n" + "> > \t- IO completion path, in which COMPLETE flag is cleared before requeue.\n" + "> > \t\n" + "> > so I can't see races with timeout in case of start rq vs. requeue rq. \n" + "> \n" "> Actually rq/tag won't be released to tag set if it will be requeued, so\n" "> the timeout race is nothing to do with requeue.\n" "\n" @@ -41,11 +38,10 @@ "the following code occurs: if (test_and_clear_bit(REQ_ATOM_STARTED,\n" "&rq->atomic_flags)) { ... }\n" "\n" - "I think the=A0REQ_ATOM_STARTED check in blk_mq_check_expired() races with t=\n" - "he\n" + "I think the\302\240REQ_ATOM_STARTED check in blk_mq_check_expired() races with the\n" "test_and_clear_bit(REQ_ATOM_STARTED, &rq->atomic_flags) call in\n" "__blk_mq_requeue_request().\n" "\n" - Bart.= + Bart. -facb190edde2822de7731fca5e29574283b2743a0028f6fbc815a6141b003c88 +37ee1097910d9e7c2e58119edc654295556003d5553b22ee554d50bfdca0e7f3
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.