All of lore.kernel.org
 help / color / mirror / Atom feed
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.