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.