All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <1506987846.3368.69.camel@wdc.com>

diff --git a/a/1.txt b/N1/1.txt
index 710e763..ae4632c 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,54 +1,80 @@
-T24gTW9uLCAyMDE3LTEwLTAyIGF0IDE2OjE1ICswOTAwLCBEYW1pZW4gTGUgTW9hbCB3cm90ZToN
-Cj4gV2hlbiBkaXNwYXRjaGluZyB3cml0ZSByZXF1ZXN0cyB0byBhIHpvbmVkIGJsb2NrIGRldmlj
-ZSwgb25seSBhbGxvdw0KPiByZXF1ZXN0cyB0YXJnZXRpbmcgYW4gdW5sb2NrZWQgem9uZS4gUmVx
-dWVzdHMgdGFyZ2V0aW5nIGEgbG9ja2VkIHpvbmUNCj4gYXJlIGxlZnQgaW4gdGhlIHNjaGVkdWxl
-ciBxdWV1ZSB0byBwcmVzZXJ2ZSB0aGUgaW5pdGlhbCB3cml0ZSBvcmRlci4NCj4gSWYgbm8gd3Jp
-dGUgcmVxdWVzdCBjYW4gYmUgZGlzcGF0Y2hlZCwgYWxsb3cgcmVhZHMgdG8gYmUgZGlzcGF0Y2hl
-ZA0KPiBldmVuIGlmIHRoZSB3cml0ZSBiYXRjaCBpcyBub3QgZG9uZS4NCj4NCj4gVG8gZW5zdXJl
-IHRoYXQgdGhlIHNlYXJjaCBmb3IgYW4gYXBwcm9wcmlhdGUgd3JpdGUgcmVxdWVzdCBpcyBhdG9t
-aWMNCj4gaW4gZGVhZGxpbmVfZmlmb19yZXF1ZXN0KCkgYW5kIGRlYWRsaW5lX25leHRfcmVxdWVz
-dCgpIHdpdGggcmVhZ3JkIHRvDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXg0KICAgICAgICAgICAgICAgICAgICAgICAg
-ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdhcmQ/DQo+IHdyaXRlIHJl
-cXVlc3RzIHpvbmUgbG9jayBzdGF0ZSwgaW50cm9kdWNlIHRoZSBzcGlubG9jayB6b25lX2xvY2su
-DQo+IEhvbGRpbmcgdGhpcyBsb2NrIHdoaWxlIGRvaW5nIHRoZSBzZWFyY2ggaW4gdGhlc2UgZnVu
-Y3Rpb25zIGFzIHdlbGwgYXMNCj4gd2hlbiB1bmxvY2tpbmcgdGhlIHRhcmdldCB6b25lIG9mIGEg
-Y29tcGxldGVkIHdyaXRlIHJlcXVlc3QgaW4NCj4gZGRfY29tcGxldGVkX3JlcXVlc3QoKSBlbnN1
-cmUgdGhhdCB0aGUgc2VhcmNoIGRvZXMgbm90IHBpY2t1cCBhIHdyaXRlDQo+IHJlcXVlc3QgaW4g
-dGhlIG1pZGRsZSBvZiBhIHpvbmUgcXVldWVkIHdyaXRlIHNlcXVlbmNlLg0KDQpTaW5jZSB0aGVy
-ZSBpcyBhbHJlYWR5IGEgc3BpbmxvY2sgaW4gdGhlIG1xLWRlYWRsaW5lIHNjaGVkdWxlciB0aGF0
-IHNlcmlhbGl6ZXMNCm1vc3Qgb3BlcmF0aW9ucywgZG8gd2UgcmVhbGx5IG5lZWQgYSBuZXcgc3Bp
-bmxvY2s/DQoNCj4gIC8qDQo+ICAgKiBXcml0ZSB1bmxvY2sgdGhlIHRhcmdldCB6b25lIG9mIGEg
-d3JpdGUgcmVxdWVzdC4NCj4gKyAqIENsZWFyaW5nIHRoZSB0YXJnZXQgem9uZSB3cml0ZSBsb2Nr
-IGJpdCBpcyBkb25lIHdpdGggdGhlIHNjaGVkdWxlciB6b25lX2xvY2sNCj4gKyAqIHNwaW5sb2Nr
-IGhlbGQgc28gdGhhdCBkZWFkbGluZV9uZXh0X3JlcXVlc3QoKSBhbmQgZGVhZGxpbmVfZmlmb19y
-ZXF1ZXN0KCkNCj4gKyAqIGNhbm5vdCBzZWUgdGhlIGxvY2sgc3RhdGUgb2YgYSB6b25lIGNoYW5n
-ZSBkdWUgdG8gYSByZXF1ZXN0IGNvbXBsZXRpb24gZHVyaW5nDQo+ICsgKiB0aGVpciBldmVudHVh
-bCBzZWFyY2ggZm9yIGFuIGFwcHJvcHJpYXRlIHdyaXRlIHJlcXVlc3QuIE90aGVyd2lzZSwgZm9y
-IGEgem9uZQ0KPiArICogd2l0aCBtdWx0aXBsZSB3cml0ZSByZXF1ZXN0cyBxdWV1ZWQsIGEgbm9u
-IHNlcXVlbnRpYWwgd3JpdGUgcmVxdWVzdA0KPiArICogY2FuIGJlIGNob3Nlbi4NCj4gICAqLw0K
-PiAgc3RhdGljIHZvaWQgZGVhZGxpbmVfd3VubG9ja196b25lKHN0cnVjdCBkZWFkbGluZV9kYXRh
-ICpkZCwNCj4gIAkJCQkgIHN0cnVjdCByZXF1ZXN0ICpycSkNCj4gIHsNCj4gKwl1bnNpZ25lZCBs
-b25nIGZsYWdzOw0KPiArDQo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRkLT56b25lX2xvY2ssIGZs
-YWdzKTsNCj4gKw0KPiAgCVdBUk5fT05fT05DRSghdGVzdF9hbmRfY2xlYXJfYml0KGJsa19ycV96
-b25lX25vKHJxKSwgZGQtPnpvbmVzX3dsb2NrKSk7DQo+ICAJZGVhZGxpbmVfY2xlYXJfcmVxdWVz
-dF96b25lX3dsb2NrKHJxKTsNCj4gKw0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT56
-b25lX2xvY2ssIGZsYWdzKTsNCj4gIH0NCg0KSXMgYSByZXF1ZXN0IHJlbW92ZWQgZnJvbSB0aGUg
-c29ydCBhbmQgZmlmbyBsaXN0cyBiZWZvcmUgYmVpbmcgZGlzcGF0Y2hlZD8gSWYgc28sDQpkb2Vz
-IHRoYXQgbWVhbiB0aGF0IG9idGFpbmluZyB6b25lX2xvY2sgaW4gdGhlIGFib3ZlIGZ1bmN0aW9u
-IGlzIG5vdCBuZWNlc3Nhcnk/DQoNCj4gIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqDQo+ICBkZWFk
-bGluZV9maWZvX3JlcXVlc3Qoc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkLCBpbnQgZGF0YV9kaXIp
-DQo+ICB7DQo+ICsJc3RydWN0IHJlcXVlc3QgKnJxOw0KPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7
-DQo+ICsNCj4gIAlpZiAoV0FSTl9PTl9PTkNFKGRhdGFfZGlyICE9IFJFQUQgJiYgZGF0YV9kaXIg
-IT0gV1JJVEUpKQ0KPiAgCQlyZXR1cm4gTlVMTDsNCj4gIA0KPiAgCWlmIChsaXN0X2VtcHR5KCZk
-ZC0+Zmlmb19saXN0W2RhdGFfZGlyXSkpDQo+ICAJCXJldHVybiBOVUxMOw0KPiAgDQo+IC0JcmV0
-dXJuIHJxX2VudHJ5X2ZpZm8oZGQtPmZpZm9fbGlzdFtkYXRhX2Rpcl0ubmV4dCk7DQo+ICsJaWYg
-KCFkZC0+em9uZXNfd2xvY2sgfHwgZGF0YV9kaXIgPT0gUkVBRCkNCj4gKwkJcmV0dXJuIHJxX2Vu
-dHJ5X2ZpZm8oZGQtPmZpZm9fbGlzdFtkYXRhX2Rpcl0ubmV4dCk7DQo+ICsNCj4gKwlzcGluX2xv
-Y2tfaXJxc2F2ZSgmZGQtPnpvbmVfbG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJbGlzdF9mb3JfZWFj
-aF9lbnRyeShycSwgJmRkLT5maWZvX2xpc3RbV1JJVEVdLCBxdWV1ZWxpc3QpIHsNCj4gKwkJaWYg
-KGRlYWRsaW5lX2Nhbl9kaXNwYXRjaF9yZXF1ZXN0KGRkLCBycSkpDQo+ICsJCQlnb3RvIG91dDsN
-Cj4gKwl9DQo+ICsJcnEgPSBOVUxMOw0KPiArDQo+ICtvdXQ6DQo+ICsJc3Bpbl91bmxvY2tfaXJx
-cmVzdG9yZSgmZGQtPnpvbmVfbG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJcmV0dXJuIHJxOw0KPiAg
-fQ0KDQpTYW1lIHF1ZXN0aW9uIGhlcmU6IGlzIGl0IHJlYWxseSBuZWNlc3NhcnkgdG8gb2J0YWlu
-IHpvbmVfbG9jaz8NCg0KVGhhbmtzLA0KDQpCYXJ0Lg==
+On Mon, 2017-10-02 at 16:15 +0900, Damien Le Moal wrote:
+> When dispatching write requests to a zoned block device, only allow
+> requests targeting an unlocked zone. Requests targeting a locked zone
+> are left in the scheduler queue to preserve the initial write order.
+> If no write request can be dispatched, allow reads to be dispatched
+> even if the write batch is not done.
+>
+> To ensure that the search for an appropriate write request is atomic
+> in deadline_fifo_request() and deadline_next_request() with reagrd to
+                                                              ^^^^^^
+                                                              regard?
+> write requests zone lock state, introduce the spinlock zone_lock.
+> Holding this lock while doing the search in these functions as well as
+> when unlocking the target zone of a completed write request in
+> dd_completed_request() ensure that the search does not pickup a write
+> request in the middle of a zone queued write sequence.
+
+Since there is already a spinlock in the mq-deadline scheduler that serializes
+most operations, do we really need a new spinlock?
+
+>  /*
+>   * Write unlock the target zone of a write request.
+> + * Clearing the target zone write lock bit is done with the scheduler zone_lock
+> + * spinlock held so that deadline_next_request() and deadline_fifo_request()
+> + * cannot see the lock state of a zone change due to a request completion during
+> + * their eventual search for an appropriate write request. Otherwise, for a zone
+> + * with multiple write requests queued, a non sequential write request
+> + * can be chosen.
+>   */
+>  static void deadline_wunlock_zone(struct deadline_data *dd,
+>  				  struct request *rq)
+>  {
+> +	unsigned long flags;
+> +
+> +	spin_lock_irqsave(&dd->zone_lock, flags);
+> +
+>  	WARN_ON_ONCE(!test_and_clear_bit(blk_rq_zone_no(rq), dd->zones_wlock));
+>  	deadline_clear_request_zone_wlock(rq);
+> +
+> +	spin_unlock_irqrestore(&dd->zone_lock, flags);
+>  }
+
+Is a request removed from the sort and fifo lists before being dispatched? If so,
+does that mean that obtaining zone_lock in the above function is not necessary?
+
+>  static struct request *
+>  deadline_fifo_request(struct deadline_data *dd, int data_dir)
+>  {
+> +	struct request *rq;
+> +	unsigned long flags;
+> +
+>  	if (WARN_ON_ONCE(data_dir != READ && data_dir != WRITE))
+>  		return NULL;
+>  
+>  	if (list_empty(&dd->fifo_list[data_dir]))
+>  		return NULL;
+>  
+> -	return rq_entry_fifo(dd->fifo_list[data_dir].next);
+> +	if (!dd->zones_wlock || data_dir == READ)
+> +		return rq_entry_fifo(dd->fifo_list[data_dir].next);
+> +
+> +	spin_lock_irqsave(&dd->zone_lock, flags);
+> +
+> +	list_for_each_entry(rq, &dd->fifo_list[WRITE], queuelist) {
+> +		if (deadline_can_dispatch_request(dd, rq))
+> +			goto out;
+> +	}
+> +	rq = NULL;
+> +
+> +out:
+> +	spin_unlock_irqrestore(&dd->zone_lock, flags);
+> +
+> +	return rq;
+>  }
+
+Same question here: is it really necessary to obtain zone_lock?
+
+Thanks,
+
+Bart.
diff --git a/a/content_digest b/N1/content_digest
index b2274e0..9497cf9 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -11,59 +11,85 @@
  "Cc\0hch@lst.de <hch@lst.de>\0"
  "\00:1\0"
  "b\0"
- "T24gTW9uLCAyMDE3LTEwLTAyIGF0IDE2OjE1ICswOTAwLCBEYW1pZW4gTGUgTW9hbCB3cm90ZToN\n"
- "Cj4gV2hlbiBkaXNwYXRjaGluZyB3cml0ZSByZXF1ZXN0cyB0byBhIHpvbmVkIGJsb2NrIGRldmlj\n"
- "ZSwgb25seSBhbGxvdw0KPiByZXF1ZXN0cyB0YXJnZXRpbmcgYW4gdW5sb2NrZWQgem9uZS4gUmVx\n"
- "dWVzdHMgdGFyZ2V0aW5nIGEgbG9ja2VkIHpvbmUNCj4gYXJlIGxlZnQgaW4gdGhlIHNjaGVkdWxl\n"
- "ciBxdWV1ZSB0byBwcmVzZXJ2ZSB0aGUgaW5pdGlhbCB3cml0ZSBvcmRlci4NCj4gSWYgbm8gd3Jp\n"
- "dGUgcmVxdWVzdCBjYW4gYmUgZGlzcGF0Y2hlZCwgYWxsb3cgcmVhZHMgdG8gYmUgZGlzcGF0Y2hl\n"
- "ZA0KPiBldmVuIGlmIHRoZSB3cml0ZSBiYXRjaCBpcyBub3QgZG9uZS4NCj4NCj4gVG8gZW5zdXJl\n"
- "IHRoYXQgdGhlIHNlYXJjaCBmb3IgYW4gYXBwcm9wcmlhdGUgd3JpdGUgcmVxdWVzdCBpcyBhdG9t\n"
- "aWMNCj4gaW4gZGVhZGxpbmVfZmlmb19yZXF1ZXN0KCkgYW5kIGRlYWRsaW5lX25leHRfcmVxdWVz\n"
- "dCgpIHdpdGggcmVhZ3JkIHRvDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg\n"
- "ICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXg0KICAgICAgICAgICAgICAgICAgICAgICAg\n"
- "ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdhcmQ/DQo+IHdyaXRlIHJl\n"
- "cXVlc3RzIHpvbmUgbG9jayBzdGF0ZSwgaW50cm9kdWNlIHRoZSBzcGlubG9jayB6b25lX2xvY2su\n"
- "DQo+IEhvbGRpbmcgdGhpcyBsb2NrIHdoaWxlIGRvaW5nIHRoZSBzZWFyY2ggaW4gdGhlc2UgZnVu\n"
- "Y3Rpb25zIGFzIHdlbGwgYXMNCj4gd2hlbiB1bmxvY2tpbmcgdGhlIHRhcmdldCB6b25lIG9mIGEg\n"
- "Y29tcGxldGVkIHdyaXRlIHJlcXVlc3QgaW4NCj4gZGRfY29tcGxldGVkX3JlcXVlc3QoKSBlbnN1\n"
- "cmUgdGhhdCB0aGUgc2VhcmNoIGRvZXMgbm90IHBpY2t1cCBhIHdyaXRlDQo+IHJlcXVlc3QgaW4g\n"
- "dGhlIG1pZGRsZSBvZiBhIHpvbmUgcXVldWVkIHdyaXRlIHNlcXVlbmNlLg0KDQpTaW5jZSB0aGVy\n"
- "ZSBpcyBhbHJlYWR5IGEgc3BpbmxvY2sgaW4gdGhlIG1xLWRlYWRsaW5lIHNjaGVkdWxlciB0aGF0\n"
- "IHNlcmlhbGl6ZXMNCm1vc3Qgb3BlcmF0aW9ucywgZG8gd2UgcmVhbGx5IG5lZWQgYSBuZXcgc3Bp\n"
- "bmxvY2s/DQoNCj4gIC8qDQo+ICAgKiBXcml0ZSB1bmxvY2sgdGhlIHRhcmdldCB6b25lIG9mIGEg\n"
- "d3JpdGUgcmVxdWVzdC4NCj4gKyAqIENsZWFyaW5nIHRoZSB0YXJnZXQgem9uZSB3cml0ZSBsb2Nr\n"
- "IGJpdCBpcyBkb25lIHdpdGggdGhlIHNjaGVkdWxlciB6b25lX2xvY2sNCj4gKyAqIHNwaW5sb2Nr\n"
- "IGhlbGQgc28gdGhhdCBkZWFkbGluZV9uZXh0X3JlcXVlc3QoKSBhbmQgZGVhZGxpbmVfZmlmb19y\n"
- "ZXF1ZXN0KCkNCj4gKyAqIGNhbm5vdCBzZWUgdGhlIGxvY2sgc3RhdGUgb2YgYSB6b25lIGNoYW5n\n"
- "ZSBkdWUgdG8gYSByZXF1ZXN0IGNvbXBsZXRpb24gZHVyaW5nDQo+ICsgKiB0aGVpciBldmVudHVh\n"
- "bCBzZWFyY2ggZm9yIGFuIGFwcHJvcHJpYXRlIHdyaXRlIHJlcXVlc3QuIE90aGVyd2lzZSwgZm9y\n"
- "IGEgem9uZQ0KPiArICogd2l0aCBtdWx0aXBsZSB3cml0ZSByZXF1ZXN0cyBxdWV1ZWQsIGEgbm9u\n"
- "IHNlcXVlbnRpYWwgd3JpdGUgcmVxdWVzdA0KPiArICogY2FuIGJlIGNob3Nlbi4NCj4gICAqLw0K\n"
- "PiAgc3RhdGljIHZvaWQgZGVhZGxpbmVfd3VubG9ja196b25lKHN0cnVjdCBkZWFkbGluZV9kYXRh\n"
- "ICpkZCwNCj4gIAkJCQkgIHN0cnVjdCByZXF1ZXN0ICpycSkNCj4gIHsNCj4gKwl1bnNpZ25lZCBs\n"
- "b25nIGZsYWdzOw0KPiArDQo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmRkLT56b25lX2xvY2ssIGZs\n"
- "YWdzKTsNCj4gKw0KPiAgCVdBUk5fT05fT05DRSghdGVzdF9hbmRfY2xlYXJfYml0KGJsa19ycV96\n"
- "b25lX25vKHJxKSwgZGQtPnpvbmVzX3dsb2NrKSk7DQo+ICAJZGVhZGxpbmVfY2xlYXJfcmVxdWVz\n"
- "dF96b25lX3dsb2NrKHJxKTsNCj4gKw0KPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT56\n"
- "b25lX2xvY2ssIGZsYWdzKTsNCj4gIH0NCg0KSXMgYSByZXF1ZXN0IHJlbW92ZWQgZnJvbSB0aGUg\n"
- "c29ydCBhbmQgZmlmbyBsaXN0cyBiZWZvcmUgYmVpbmcgZGlzcGF0Y2hlZD8gSWYgc28sDQpkb2Vz\n"
- "IHRoYXQgbWVhbiB0aGF0IG9idGFpbmluZyB6b25lX2xvY2sgaW4gdGhlIGFib3ZlIGZ1bmN0aW9u\n"
- "IGlzIG5vdCBuZWNlc3Nhcnk/DQoNCj4gIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqDQo+ICBkZWFk\n"
- "bGluZV9maWZvX3JlcXVlc3Qoc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkLCBpbnQgZGF0YV9kaXIp\n"
- "DQo+ICB7DQo+ICsJc3RydWN0IHJlcXVlc3QgKnJxOw0KPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7\n"
- "DQo+ICsNCj4gIAlpZiAoV0FSTl9PTl9PTkNFKGRhdGFfZGlyICE9IFJFQUQgJiYgZGF0YV9kaXIg\n"
- "IT0gV1JJVEUpKQ0KPiAgCQlyZXR1cm4gTlVMTDsNCj4gIA0KPiAgCWlmIChsaXN0X2VtcHR5KCZk\n"
- "ZC0+Zmlmb19saXN0W2RhdGFfZGlyXSkpDQo+ICAJCXJldHVybiBOVUxMOw0KPiAgDQo+IC0JcmV0\n"
- "dXJuIHJxX2VudHJ5X2ZpZm8oZGQtPmZpZm9fbGlzdFtkYXRhX2Rpcl0ubmV4dCk7DQo+ICsJaWYg\n"
- "KCFkZC0+em9uZXNfd2xvY2sgfHwgZGF0YV9kaXIgPT0gUkVBRCkNCj4gKwkJcmV0dXJuIHJxX2Vu\n"
- "dHJ5X2ZpZm8oZGQtPmZpZm9fbGlzdFtkYXRhX2Rpcl0ubmV4dCk7DQo+ICsNCj4gKwlzcGluX2xv\n"
- "Y2tfaXJxc2F2ZSgmZGQtPnpvbmVfbG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJbGlzdF9mb3JfZWFj\n"
- "aF9lbnRyeShycSwgJmRkLT5maWZvX2xpc3RbV1JJVEVdLCBxdWV1ZWxpc3QpIHsNCj4gKwkJaWYg\n"
- "KGRlYWRsaW5lX2Nhbl9kaXNwYXRjaF9yZXF1ZXN0KGRkLCBycSkpDQo+ICsJCQlnb3RvIG91dDsN\n"
- "Cj4gKwl9DQo+ICsJcnEgPSBOVUxMOw0KPiArDQo+ICtvdXQ6DQo+ICsJc3Bpbl91bmxvY2tfaXJx\n"
- "cmVzdG9yZSgmZGQtPnpvbmVfbG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJcmV0dXJuIHJxOw0KPiAg\n"
- "fQ0KDQpTYW1lIHF1ZXN0aW9uIGhlcmU6IGlzIGl0IHJlYWxseSBuZWNlc3NhcnkgdG8gb2J0YWlu\n"
- IHpvbmVfbG9jaz8NCg0KVGhhbmtzLA0KDQpCYXJ0Lg==
+ "On Mon, 2017-10-02 at 16:15 +0900, Damien Le Moal wrote:\n"
+ "> When dispatching write requests to a zoned block device, only allow\n"
+ "> requests targeting an unlocked zone. Requests targeting a locked zone\n"
+ "> are left in the scheduler queue to preserve the initial write order.\n"
+ "> If no write request can be dispatched, allow reads to be dispatched\n"
+ "> even if the write batch is not done.\n"
+ ">\n"
+ "> To ensure that the search for an appropriate write request is atomic\n"
+ "> in deadline_fifo_request() and deadline_next_request() with reagrd to\n"
+ "                                                              ^^^^^^\n"
+ "                                                              regard?\n"
+ "> write requests zone lock state, introduce the spinlock zone_lock.\n"
+ "> Holding this lock while doing the search in these functions as well as\n"
+ "> when unlocking the target zone of a completed write request in\n"
+ "> dd_completed_request() ensure that the search does not pickup a write\n"
+ "> request in the middle of a zone queued write sequence.\n"
+ "\n"
+ "Since there is already a spinlock in the mq-deadline scheduler that serializes\n"
+ "most operations, do we really need a new spinlock?\n"
+ "\n"
+ ">  /*\n"
+ ">   * Write unlock the target zone of a write request.\n"
+ "> + * Clearing the target zone write lock bit is done with the scheduler zone_lock\n"
+ "> + * spinlock held so that deadline_next_request() and deadline_fifo_request()\n"
+ "> + * cannot see the lock state of a zone change due to a request completion during\n"
+ "> + * their eventual search for an appropriate write request. Otherwise, for a zone\n"
+ "> + * with multiple write requests queued, a non sequential write request\n"
+ "> + * can be chosen.\n"
+ ">   */\n"
+ ">  static void deadline_wunlock_zone(struct deadline_data *dd,\n"
+ ">  \t\t\t\t  struct request *rq)\n"
+ ">  {\n"
+ "> +\tunsigned long flags;\n"
+ "> +\n"
+ "> +\tspin_lock_irqsave(&dd->zone_lock, flags);\n"
+ "> +\n"
+ ">  \tWARN_ON_ONCE(!test_and_clear_bit(blk_rq_zone_no(rq), dd->zones_wlock));\n"
+ ">  \tdeadline_clear_request_zone_wlock(rq);\n"
+ "> +\n"
+ "> +\tspin_unlock_irqrestore(&dd->zone_lock, flags);\n"
+ ">  }\n"
+ "\n"
+ "Is a request removed from the sort and fifo lists before being dispatched? If so,\n"
+ "does that mean that obtaining zone_lock in the above function is not necessary?\n"
+ "\n"
+ ">  static struct request *\n"
+ ">  deadline_fifo_request(struct deadline_data *dd, int data_dir)\n"
+ ">  {\n"
+ "> +\tstruct request *rq;\n"
+ "> +\tunsigned long flags;\n"
+ "> +\n"
+ ">  \tif (WARN_ON_ONCE(data_dir != READ && data_dir != WRITE))\n"
+ ">  \t\treturn NULL;\n"
+ ">  \n"
+ ">  \tif (list_empty(&dd->fifo_list[data_dir]))\n"
+ ">  \t\treturn NULL;\n"
+ ">  \n"
+ "> -\treturn rq_entry_fifo(dd->fifo_list[data_dir].next);\n"
+ "> +\tif (!dd->zones_wlock || data_dir == READ)\n"
+ "> +\t\treturn rq_entry_fifo(dd->fifo_list[data_dir].next);\n"
+ "> +\n"
+ "> +\tspin_lock_irqsave(&dd->zone_lock, flags);\n"
+ "> +\n"
+ "> +\tlist_for_each_entry(rq, &dd->fifo_list[WRITE], queuelist) {\n"
+ "> +\t\tif (deadline_can_dispatch_request(dd, rq))\n"
+ "> +\t\t\tgoto out;\n"
+ "> +\t}\n"
+ "> +\trq = NULL;\n"
+ "> +\n"
+ "> +out:\n"
+ "> +\tspin_unlock_irqrestore(&dd->zone_lock, flags);\n"
+ "> +\n"
+ "> +\treturn rq;\n"
+ ">  }\n"
+ "\n"
+ "Same question here: is it really necessary to obtain zone_lock?\n"
+ "\n"
+ "Thanks,\n"
+ "\n"
+ Bart.
 
-907a1781654c7c16d1dcc5f978b2f4f4b249fc3a32e3a32a1b6f1603013f0b99
+6ac2c4258ee253014fb118a4253f717a4a2ec0934d7303970d743ee580e8309c

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.