diff for duplicates of <43327033306c3dd2f7c3717d64ce22415b6f3451.camel@wdc.com>
diff --git a/a/1.txt b/N1/1.txt
index 1fc1fc6..8c476c3 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,31 +1,38 @@
-T24gV2VkLCAyMDE4LTA1LTE2IGF0IDIyOjA1ICswOTAwLCBUZXRzdW8gSGFuZGEgd3JvdGU6DQo+
-IE9uZSBvcmUgbW9yZSB0aHJlYWRzIGFyZSB3YWl0aW5nIGZvciBxLT5tcV9mcmVlemVfZGVwdGgg
-dG8gYmVjb21lIDAuIEJ1dCB0aGUNCj4gdGhyZWFkIHdobyBpbmNyZW1lbnRlZCBxLT5tcV9mcmVl
-emVfZGVwdGggYXQgYmxrX2ZyZWV6ZV9xdWV1ZV9zdGFydChxKSBmcm9tDQo+IGJsa19mcmVlemVf
-cXVldWUoKSBpcyB3YWl0aW5nIGF0IGJsa19tcV9mcmVlemVfcXVldWVfd2FpdCgpLiBUaGVyZWZv
-cmUsDQo+IGF0b21pY19yZWFkKCZxLT5tcV9mcmVlemVfZGVwdGgpID09IDAgY29uZGl0aW9uIGZv
-ciB3YWl0X2V2ZW50KCkgaW4NCj4gYmxrX3F1ZXVlX2VudGVyKCkgd2lsbCBuZXZlciBiZSBzYXRp
-c2ZpZWQuIEJ1dCB3aGF0IGRvZXMgdGhhdCB3YWl0X2V2ZW50KCkNCj4gd2FudCB0byBkbz8gSXNu
-J3QgInN0YXJ0IGZyZWV6aW5nIiBhIHNvcnQgb2YgYmxrX3F1ZXVlX2R5aW5nKHEpID09IHRydWU/
-DQo+IFNpbmNlIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoJnEtPnFfdXNhZ2VfY291bnRlcikgZmFp
-bGVkIGFuZCB0aGUgcXVldWUgaXMNCj4gYWJvdXQgdG8gYmUgZnJvemVuLCBzaG91bGRuJ3Qgd2Ug
-dHJlYXQgYXRvbWljX3JlYWQoJnEtPm1xX2ZyZWV6ZV9kZXB0aCkgIT0gMA0KPiBhcyBpZiBibGtf
-cXVldWVfZHlpbmcocSkgPT0gdHJ1ZT8gVGhhdCBpcywgc29tZXRoaW5nIGxpa2UgYmVsb3c6DQo+
-IA0KPiBkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMNCj4g
-aW5kZXggODU5MDliNC4uNTllMjQ5NiAxMDA2NDQNCj4gLS0tIGEvYmxvY2svYmxrLWNvcmUuYw0K
-PiArKysgYi9ibG9jay9ibGstY29yZS5jDQo+IEBAIC05NTEsMTAgKzk1MSwxMCBAQCBpbnQgYmxr
-X3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBibGtfbXFfcmVxX2ZsYWdzX3Qg
-ZmxhZ3MpDQo+ICAJCXNtcF9ybWIoKTsNCj4gIA0KPiAgCQl3YWl0X2V2ZW50KHEtPm1xX2ZyZWV6
-ZV93cSwNCj4gLQkJCSAgIChhdG9taWNfcmVhZCgmcS0+bXFfZnJlZXplX2RlcHRoKSA9PSAwICYm
-DQo+IC0JCQkgICAgKHByZWVtcHQgfHwgIWJsa19xdWV1ZV9wcmVlbXB0X29ubHkocSkpKSB8fA0K
-PiArCQkJICAgYXRvbWljX3JlYWQoJnEtPm1xX2ZyZWV6ZV9kZXB0aCkgfHwNCj4gKwkJCSAgIChw
-cmVlbXB0IHx8ICFibGtfcXVldWVfcHJlZW1wdF9vbmx5KHEpKSB8fA0KPiAgCQkJICAgYmxrX3F1
-ZXVlX2R5aW5nKHEpKTsNCj4gLQkJaWYgKGJsa19xdWV1ZV9keWluZyhxKSkNCj4gKwkJaWYgKGF0
-b21pY19yZWFkKCZxLT5tcV9mcmVlemVfZGVwdGgpIHx8IGJsa19xdWV1ZV9keWluZyhxKSkNCj4g
-IAkJCXJldHVybiAtRU5PREVWOw0KPiAgCX0NCj4gIH0NCg0KVGhhdCBjaGFuZ2UgbG9va3Mgd3Jv
-bmcgdG8gbWUuIEFkZGl0aW9uYWxseSwgSSB0aGluayB0aGF0IHlvdSBhcmUgbG9va2luZyBpbg0K
-dGhlIHdyb25nIGRpcmVjdGlvbi4gU2luY2UgYmxrX21xX2ZyZWV6ZV9xdWV1ZV93YWl0KCkgYW5k
-IGJsa19xdWV1ZV9lbnRlcigpDQp3b3JrIGZpbmUgZm9yIGFsbCBibG9jayBkcml2ZXJzIGV4Y2Vw
-dCB0aGUgbG9vcCBkcml2ZXIgSSB0aGluayB0aGF0IHlvdSBzaG91bGQNCmhhdmUgYSBjbG9zZXIg
-bG9vayBhdCBob3cgdGhlIGxvb3AgZHJpdmVyIHVzZXMgdGhpcyBibG9jayBsYXllciBmdW5jdGlv
-bmFsaXR5Lg0KDQpUaGFua3MsDQoNCkJhcnQuDQoNCg0KDQo=
\ No newline at end of file
+On Wed, 2018-05-16 at 22:05 +0900, Tetsuo Handa wrote:
+> One ore more threads are waiting for q->mq_freeze_depth to become 0. But the
+> thread who incremented q->mq_freeze_depth at blk_freeze_queue_start(q) from
+> blk_freeze_queue() is waiting at blk_mq_freeze_queue_wait(). Therefore,
+> atomic_read(&q->mq_freeze_depth) == 0 condition for wait_event() in
+> blk_queue_enter() will never be satisfied. But what does that wait_event()
+> want to do? Isn't "start freezing" a sort of blk_queue_dying(q) == true?
+> Since percpu_ref_tryget_live(&q->q_usage_counter) failed and the queue is
+> about to be frozen, shouldn't we treat atomic_read(&q->mq_freeze_depth) != 0
+> as if blk_queue_dying(q) == true? That is, something like below:
+>
+> diff --git a/block/blk-core.c b/block/blk-core.c
+> index 85909b4..59e2496 100644
+> --- a/block/blk-core.c
+> +++ b/block/blk-core.c
+> @@ -951,10 +951,10 @@ int blk_queue_enter(struct request_queue *q, blk_mq_req_flags_t flags)
+> smp_rmb();
+>
+> wait_event(q->mq_freeze_wq,
+> - (atomic_read(&q->mq_freeze_depth) == 0 &&
+> - (preempt || !blk_queue_preempt_only(q))) ||
+> + atomic_read(&q->mq_freeze_depth) ||
+> + (preempt || !blk_queue_preempt_only(q)) ||
+> blk_queue_dying(q));
+> - if (blk_queue_dying(q))
+> + if (atomic_read(&q->mq_freeze_depth) || blk_queue_dying(q))
+> return -ENODEV;
+> }
+> }
+
+That change looks wrong to me. Additionally, I think that you are looking in
+the wrong direction. Since blk_mq_freeze_queue_wait() and blk_queue_enter()
+work fine for all block drivers except the loop driver I think that you should
+have a closer look at how the loop driver uses this block layer functionality.
+
+Thanks,
+
+Bart.
\ No newline at end of file
diff --git a/a/content_digest b/N1/content_digest
index bb3fee7..4e31ac5 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -46,37 +46,44 @@
"b\0"
]
[
- "T24gV2VkLCAyMDE4LTA1LTE2IGF0IDIyOjA1ICswOTAwLCBUZXRzdW8gSGFuZGEgd3JvdGU6DQo+\n",
- "IE9uZSBvcmUgbW9yZSB0aHJlYWRzIGFyZSB3YWl0aW5nIGZvciBxLT5tcV9mcmVlemVfZGVwdGgg\n",
- "dG8gYmVjb21lIDAuIEJ1dCB0aGUNCj4gdGhyZWFkIHdobyBpbmNyZW1lbnRlZCBxLT5tcV9mcmVl\n",
- "emVfZGVwdGggYXQgYmxrX2ZyZWV6ZV9xdWV1ZV9zdGFydChxKSBmcm9tDQo+IGJsa19mcmVlemVf\n",
- "cXVldWUoKSBpcyB3YWl0aW5nIGF0IGJsa19tcV9mcmVlemVfcXVldWVfd2FpdCgpLiBUaGVyZWZv\n",
- "cmUsDQo+IGF0b21pY19yZWFkKCZxLT5tcV9mcmVlemVfZGVwdGgpID09IDAgY29uZGl0aW9uIGZv\n",
- "ciB3YWl0X2V2ZW50KCkgaW4NCj4gYmxrX3F1ZXVlX2VudGVyKCkgd2lsbCBuZXZlciBiZSBzYXRp\n",
- "c2ZpZWQuIEJ1dCB3aGF0IGRvZXMgdGhhdCB3YWl0X2V2ZW50KCkNCj4gd2FudCB0byBkbz8gSXNu\n",
- "J3QgInN0YXJ0IGZyZWV6aW5nIiBhIHNvcnQgb2YgYmxrX3F1ZXVlX2R5aW5nKHEpID09IHRydWU/\n",
- "DQo+IFNpbmNlIHBlcmNwdV9yZWZfdHJ5Z2V0X2xpdmUoJnEtPnFfdXNhZ2VfY291bnRlcikgZmFp\n",
- "bGVkIGFuZCB0aGUgcXVldWUgaXMNCj4gYWJvdXQgdG8gYmUgZnJvemVuLCBzaG91bGRuJ3Qgd2Ug\n",
- "dHJlYXQgYXRvbWljX3JlYWQoJnEtPm1xX2ZyZWV6ZV9kZXB0aCkgIT0gMA0KPiBhcyBpZiBibGtf\n",
- "cXVldWVfZHlpbmcocSkgPT0gdHJ1ZT8gVGhhdCBpcywgc29tZXRoaW5nIGxpa2UgYmVsb3c6DQo+\n",
- "IA0KPiBkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMNCj4g\n",
- "aW5kZXggODU5MDliNC4uNTllMjQ5NiAxMDA2NDQNCj4gLS0tIGEvYmxvY2svYmxrLWNvcmUuYw0K\n",
- "PiArKysgYi9ibG9jay9ibGstY29yZS5jDQo+IEBAIC05NTEsMTAgKzk1MSwxMCBAQCBpbnQgYmxr\n",
- "X3F1ZXVlX2VudGVyKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBibGtfbXFfcmVxX2ZsYWdzX3Qg\n",
- "ZmxhZ3MpDQo+ICAJCXNtcF9ybWIoKTsNCj4gIA0KPiAgCQl3YWl0X2V2ZW50KHEtPm1xX2ZyZWV6\n",
- "ZV93cSwNCj4gLQkJCSAgIChhdG9taWNfcmVhZCgmcS0+bXFfZnJlZXplX2RlcHRoKSA9PSAwICYm\n",
- "DQo+IC0JCQkgICAgKHByZWVtcHQgfHwgIWJsa19xdWV1ZV9wcmVlbXB0X29ubHkocSkpKSB8fA0K\n",
- "PiArCQkJICAgYXRvbWljX3JlYWQoJnEtPm1xX2ZyZWV6ZV9kZXB0aCkgfHwNCj4gKwkJCSAgIChw\n",
- "cmVlbXB0IHx8ICFibGtfcXVldWVfcHJlZW1wdF9vbmx5KHEpKSB8fA0KPiAgCQkJICAgYmxrX3F1\n",
- "ZXVlX2R5aW5nKHEpKTsNCj4gLQkJaWYgKGJsa19xdWV1ZV9keWluZyhxKSkNCj4gKwkJaWYgKGF0\n",
- "b21pY19yZWFkKCZxLT5tcV9mcmVlemVfZGVwdGgpIHx8IGJsa19xdWV1ZV9keWluZyhxKSkNCj4g\n",
- "IAkJCXJldHVybiAtRU5PREVWOw0KPiAgCX0NCj4gIH0NCg0KVGhhdCBjaGFuZ2UgbG9va3Mgd3Jv\n",
- "bmcgdG8gbWUuIEFkZGl0aW9uYWxseSwgSSB0aGluayB0aGF0IHlvdSBhcmUgbG9va2luZyBpbg0K\n",
- "dGhlIHdyb25nIGRpcmVjdGlvbi4gU2luY2UgYmxrX21xX2ZyZWV6ZV9xdWV1ZV93YWl0KCkgYW5k\n",
- "IGJsa19xdWV1ZV9lbnRlcigpDQp3b3JrIGZpbmUgZm9yIGFsbCBibG9jayBkcml2ZXJzIGV4Y2Vw\n",
- "dCB0aGUgbG9vcCBkcml2ZXIgSSB0aGluayB0aGF0IHlvdSBzaG91bGQNCmhhdmUgYSBjbG9zZXIg\n",
- "bG9vayBhdCBob3cgdGhlIGxvb3AgZHJpdmVyIHVzZXMgdGhpcyBibG9jayBsYXllciBmdW5jdGlv\n",
- "bmFsaXR5Lg0KDQpUaGFua3MsDQoNCkJhcnQuDQoNCg0KDQo="
+ "On Wed, 2018-05-16 at 22:05 +0900, Tetsuo Handa wrote:\n",
+ "> One ore more threads are waiting for q->mq_freeze_depth to become 0. But the\n",
+ "> thread who incremented q->mq_freeze_depth at blk_freeze_queue_start(q) from\n",
+ "> blk_freeze_queue() is waiting at blk_mq_freeze_queue_wait(). Therefore,\n",
+ "> atomic_read(&q->mq_freeze_depth) == 0 condition for wait_event() in\n",
+ "> blk_queue_enter() will never be satisfied. But what does that wait_event()\n",
+ "> want to do? Isn't \"start freezing\" a sort of blk_queue_dying(q) == true?\n",
+ "> Since percpu_ref_tryget_live(&q->q_usage_counter) failed and the queue is\n",
+ "> about to be frozen, shouldn't we treat atomic_read(&q->mq_freeze_depth) != 0\n",
+ "> as if blk_queue_dying(q) == true? That is, something like below:\n",
+ "> \n",
+ "> diff --git a/block/blk-core.c b/block/blk-core.c\n",
+ "> index 85909b4..59e2496 100644\n",
+ "> --- a/block/blk-core.c\n",
+ "> +++ b/block/blk-core.c\n",
+ "> \@\@ -951,10 +951,10 \@\@ int blk_queue_enter(struct request_queue *q, blk_mq_req_flags_t flags)\n",
+ "> \t\tsmp_rmb();\n",
+ "> \n",
+ "> \t\twait_event(q->mq_freeze_wq,\n",
+ "> -\t\t\t (atomic_read(&q->mq_freeze_depth) == 0 &&\n",
+ "> -\t\t\t (preempt || !blk_queue_preempt_only(q))) ||\n",
+ "> +\t\t\t atomic_read(&q->mq_freeze_depth) ||\n",
+ "> +\t\t\t (preempt || !blk_queue_preempt_only(q)) ||\n",
+ "> \t\t\t blk_queue_dying(q));\n",
+ "> -\t\tif (blk_queue_dying(q))\n",
+ "> +\t\tif (atomic_read(&q->mq_freeze_depth) || blk_queue_dying(q))\n",
+ "> \t\t\treturn -ENODEV;\n",
+ "> \t}\n",
+ "> }\n",
+ "\n",
+ "That change looks wrong to me. Additionally, I think that you are looking in\n",
+ "the wrong direction. Since blk_mq_freeze_queue_wait() and blk_queue_enter()\n",
+ "work fine for all block drivers except the loop driver I think that you should\n",
+ "have a closer look at how the loop driver uses this block layer functionality.\n",
+ "\n",
+ "Thanks,\n",
+ "\n",
+ "Bart."
]
-230dcfb1947122d14bc8539133815be39267789778f1603c18222ee42e3d5d67
+71bd5eff0e66c29d4836f671b1ad4b008f2dc7affc5662723bc12bcd8c38dfc7
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.