diff for duplicates of <1482321550.2644.10.camel@sandisk.com> diff --git a/a/1.txt b/N1/1.txt index 575d6f1..4c9a071 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,26 +1,48 @@ -T24gMTIvMTcvMjAxNiAwMToxMiBBTSwgSmVucyBBeGJvZSB3cm90ZToNCj4gK3N0YXRpYyBib29s -IGRkX3B1dF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSkNCj4gK3sNCj4gKwkvKg0KPiArCcKg -KiBJZiBpdCdzIGEgcmVhbCByZXF1ZXN0LCB3ZSBqdXN0IGhhdmUgdG8NCmZyZWUgaXQuIEZvciBh -IHNoYWRvdw0KPiArCcKgKiByZXF1ZXN0LCB3ZSBzaG91bGQgb25seSBmcmVlIGl0IGlmIHdlIGhh -dmVuJ3Qgc3RhcnRlZCBpdC4gQQ0KPiArCcKgKiBzdGFydGVkIHJlcXVlc3QgaXMgbWFwcGVkIHRv -IGEgcmVhbCBvbmUsIGFuZCB0aGUNCnJlYWwgb25lIHdpbGwNCj4gKwnCoCogZnJlZSBpdC4gV2Ug -Y2FuIGdldCBoZXJlIHdpdGggcmVxdWVzdCBtZXJnZXMsIHNpbmNlIHdlIHRoZW4NCj4gKwnCoCog -ZnJlZSB0aGUgcmVxdWVzdCBiZWZvcmUgd2Ugc3RhcnQvaXNzdWUgaXQuDQo+ICsJwqAqLw0KPiAr -CQ0KaWYgKCFibGtfbXFfc2NoZWRfcnFfaXNfc2hhZG93KHJxKSkNCj4gKwkJcmV0dXJuIGZhbHNl -Ow0KPiArDQo+ICsJaWYgKCEocnEtPnJxX2ZsYWdzICYgUlFGX1NUQVJURUQpKSB7DQo+ICsJCXN0 -cnVjdCByZXF1ZXN0X3F1ZXVlICpxDQo9IHJxLT5xOw0KPiArCQlzdHJ1Y3QgZGVhZGxpbmVfZGF0 -YSAqZGQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsNCj4gKw0KPiArCQkvKg0KPiArCQnC -oCogSU8gY29tcGxldGlvbiB3b3VsZCBub3JtYWxseSBkbw0KdGhpcywgYnV0IGlmIHdlIG1lcmdl -DQo+ICsJCcKgKiBhbmQgZnJlZSBiZWZvcmUgd2UgaXNzdWUgdGhlIHJlcXVlc3QsIGRyb3AgYm90 -aCB0aGUNCj4gKwkJwqAqIHRhZyBhbmQgcXVldWUgcmVmDQo+ICsJCcKgKi8NCj4gKwkNCglibGtf -bXFfc2NoZWRfZnJlZV9zaGFkb3dfcmVxdWVzdChkZC0+dGFncywgcnEpOw0KPiArCQlibGtfcXVl -dWVfZXhpdChxKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCg0KSGVsbG8g -SmVucywNCg0KU2luY2UgdGhpcyBwYXRjaCBpcyB0aGUgZmlyc3QgcGF0Y2ggdGhhdCBpbnRyb2R1 -Y2VzIGEgY2FsbCB0byBibGtfcXVldWVfZXhpdCgpDQpmcm9tIGEgbW9kdWxlIG90aGVyIHRoYW4g -dGhlIGJsb2NrIGxheWVyIGNvcmUsIHNob3VsZG4ndCB0aGlzIHBhdGNoIGV4cG9ydCB0aGUNCmJs -a19xdWV1ZV9leGl0KCkgZnVuY3Rpb24/IEFuIGF0dGVtcHQgdG8gYnVpbGQgbXEtZGVhZGxpbmUg -YXMgYSBtb2R1bGUgcmVzdWx0ZWQNCmluIHRoZSBmb2xsb3dpbmc6DQoNCkVSUk9SOiAiYmxrX3F1 -ZXVlX2V4aXQiIFtibG9jay9tcS1kZWFkbGluZS5rb10gdW5kZWZpbmVkIQ0KbWFrZVsxXTogKioq -IFtzY3JpcHRzL01ha2VmaWxlLm1vZHBvc3Q6OTE6IF9fbW9kcG9zdF0gRXJyb3IgMQ0KbWFrZTog -KioqIFtNYWtlZmlsZToxMTk4OiBtb2R1bGVzXSBFcnJvciAyDQpFeGVjdXRpb24gZmFpbGVkOiBt -YWtlIGFsbA0KDQpCYXJ0Lg== +On 12/17/2016 01:12 AM, Jens Axboe wrote: +> +static bool dd_put_request(struct request *rq) +> +{ +> + /* +> + * If it's a real request, we just have to +free it. For a shadow +> + * request, we should only free it if we haven't started it. A +> + * started request is mapped to a real one, and the +real one will +> + * free it. We can get here with request merges, since we then +> + * free the request before we start/issue it. +> + */ +> + +if (!blk_mq_sched_rq_is_shadow(rq)) +> + return false; +> + +> + if (!(rq->rq_flags & RQF_STARTED)) { +> + struct request_queue *q += rq->q; +> + struct deadline_data *dd = q->elevator->elevator_data; +> + +> + /* +> + * IO completion would normally do +this, but if we merge +> + * and free before we issue the request, drop both the +> + * tag and queue ref +> + */ +> + + blk_mq_sched_free_shadow_request(dd->tags, rq); +> + blk_queue_exit(q); +> + } +> + +> + return true; +> +} + +Hello Jens, + +Since this patch is the first patch that introduces a call to blk_queue_exit() +from a module other than the block layer core, shouldn't this patch export the +blk_queue_exit() function? An attempt to build mq-deadline as a module resulted +in the following: + +ERROR: "blk_queue_exit" [block/mq-deadline.ko] undefined! +make[1]: *** [scripts/Makefile.modpost:91: __modpost] Error 1 +make: *** [Makefile:1198: modules] Error 2 +Execution failed: make all + +Bart. diff --git a/a/content_digest b/N1/content_digest index ffed73d..0845efc 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -11,31 +11,53 @@ " paolo.valente@linaro.org <paolo.valente@linaro.org>\0" "\00:1\0" "b\0" - "T24gMTIvMTcvMjAxNiAwMToxMiBBTSwgSmVucyBBeGJvZSB3cm90ZToNCj4gK3N0YXRpYyBib29s\n" - "IGRkX3B1dF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSkNCj4gK3sNCj4gKwkvKg0KPiArCcKg\n" - "KiBJZiBpdCdzIGEgcmVhbCByZXF1ZXN0LCB3ZSBqdXN0IGhhdmUgdG8NCmZyZWUgaXQuIEZvciBh\n" - "IHNoYWRvdw0KPiArCcKgKiByZXF1ZXN0LCB3ZSBzaG91bGQgb25seSBmcmVlIGl0IGlmIHdlIGhh\n" - "dmVuJ3Qgc3RhcnRlZCBpdC4gQQ0KPiArCcKgKiBzdGFydGVkIHJlcXVlc3QgaXMgbWFwcGVkIHRv\n" - "IGEgcmVhbCBvbmUsIGFuZCB0aGUNCnJlYWwgb25lIHdpbGwNCj4gKwnCoCogZnJlZSBpdC4gV2Ug\n" - "Y2FuIGdldCBoZXJlIHdpdGggcmVxdWVzdCBtZXJnZXMsIHNpbmNlIHdlIHRoZW4NCj4gKwnCoCog\n" - "ZnJlZSB0aGUgcmVxdWVzdCBiZWZvcmUgd2Ugc3RhcnQvaXNzdWUgaXQuDQo+ICsJwqAqLw0KPiAr\n" - "CQ0KaWYgKCFibGtfbXFfc2NoZWRfcnFfaXNfc2hhZG93KHJxKSkNCj4gKwkJcmV0dXJuIGZhbHNl\n" - "Ow0KPiArDQo+ICsJaWYgKCEocnEtPnJxX2ZsYWdzICYgUlFGX1NUQVJURUQpKSB7DQo+ICsJCXN0\n" - "cnVjdCByZXF1ZXN0X3F1ZXVlICpxDQo9IHJxLT5xOw0KPiArCQlzdHJ1Y3QgZGVhZGxpbmVfZGF0\n" - "YSAqZGQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsNCj4gKw0KPiArCQkvKg0KPiArCQnC\n" - "oCogSU8gY29tcGxldGlvbiB3b3VsZCBub3JtYWxseSBkbw0KdGhpcywgYnV0IGlmIHdlIG1lcmdl\n" - "DQo+ICsJCcKgKiBhbmQgZnJlZSBiZWZvcmUgd2UgaXNzdWUgdGhlIHJlcXVlc3QsIGRyb3AgYm90\n" - "aCB0aGUNCj4gKwkJwqAqIHRhZyBhbmQgcXVldWUgcmVmDQo+ICsJCcKgKi8NCj4gKwkNCglibGtf\n" - "bXFfc2NoZWRfZnJlZV9zaGFkb3dfcmVxdWVzdChkZC0+dGFncywgcnEpOw0KPiArCQlibGtfcXVl\n" - "dWVfZXhpdChxKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gdHJ1ZTsNCj4gK30NCg0KSGVsbG8g\n" - "SmVucywNCg0KU2luY2UgdGhpcyBwYXRjaCBpcyB0aGUgZmlyc3QgcGF0Y2ggdGhhdCBpbnRyb2R1\n" - "Y2VzIGEgY2FsbCB0byBibGtfcXVldWVfZXhpdCgpDQpmcm9tIGEgbW9kdWxlIG90aGVyIHRoYW4g\n" - "dGhlIGJsb2NrIGxheWVyIGNvcmUsIHNob3VsZG4ndCB0aGlzIHBhdGNoIGV4cG9ydCB0aGUNCmJs\n" - "a19xdWV1ZV9leGl0KCkgZnVuY3Rpb24/IEFuIGF0dGVtcHQgdG8gYnVpbGQgbXEtZGVhZGxpbmUg\n" - "YXMgYSBtb2R1bGUgcmVzdWx0ZWQNCmluIHRoZSBmb2xsb3dpbmc6DQoNCkVSUk9SOiAiYmxrX3F1\n" - "ZXVlX2V4aXQiIFtibG9jay9tcS1kZWFkbGluZS5rb10gdW5kZWZpbmVkIQ0KbWFrZVsxXTogKioq\n" - "IFtzY3JpcHRzL01ha2VmaWxlLm1vZHBvc3Q6OTE6IF9fbW9kcG9zdF0gRXJyb3IgMQ0KbWFrZTog\n" - "KioqIFtNYWtlZmlsZToxMTk4OiBtb2R1bGVzXSBFcnJvciAyDQpFeGVjdXRpb24gZmFpbGVkOiBt\n" - YWtlIGFsbA0KDQpCYXJ0Lg== + "On 12/17/2016 01:12 AM, Jens Axboe wrote:\n" + "> +static bool dd_put_request(struct request *rq)\n" + "> +{\n" + "> +\t/*\n" + "> +\t\302\240* If it's a real request, we just have to\n" + "free it. For a shadow\n" + "> +\t\302\240* request, we should only free it if we haven't started it. A\n" + "> +\t\302\240* started request is mapped to a real one, and the\n" + "real one will\n" + "> +\t\302\240* free it. We can get here with request merges, since we then\n" + "> +\t\302\240* free the request before we start/issue it.\n" + "> +\t\302\240*/\n" + "> +\t\n" + "if (!blk_mq_sched_rq_is_shadow(rq))\n" + "> +\t\treturn false;\n" + "> +\n" + "> +\tif (!(rq->rq_flags & RQF_STARTED)) {\n" + "> +\t\tstruct request_queue *q\n" + "= rq->q;\n" + "> +\t\tstruct deadline_data *dd = q->elevator->elevator_data;\n" + "> +\n" + "> +\t\t/*\n" + "> +\t\t\302\240* IO completion would normally do\n" + "this, but if we merge\n" + "> +\t\t\302\240* and free before we issue the request, drop both the\n" + "> +\t\t\302\240* tag and queue ref\n" + "> +\t\t\302\240*/\n" + "> +\t\n" + "\tblk_mq_sched_free_shadow_request(dd->tags, rq);\n" + "> +\t\tblk_queue_exit(q);\n" + "> +\t}\n" + "> +\n" + "> +\treturn true;\n" + "> +}\n" + "\n" + "Hello Jens,\n" + "\n" + "Since this patch is the first patch that introduces a call to blk_queue_exit()\n" + "from a module other than the block layer core, shouldn't this patch export the\n" + "blk_queue_exit() function? An attempt to build mq-deadline as a module resulted\n" + "in the following:\n" + "\n" + "ERROR: \"blk_queue_exit\" [block/mq-deadline.ko] undefined!\n" + "make[1]: *** [scripts/Makefile.modpost:91: __modpost] Error 1\n" + "make: *** [Makefile:1198: modules] Error 2\n" + "Execution failed: make all\n" + "\n" + Bart. -82b519a8e5e90082f17ed2c48cdde4204be435053000daa492e3a7390bf0d937 +fb7be90f92404f8228a40c7375b9f5feb755f9bced88c586897886a87dbdfdd8
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.