2012-05-29 04:39:11

by Peng Tao

[permalink] [raw]
Subject: [PATCH-v2 0/3] pnfsblock: cope with DIO changes

Hi Trond,

This applies on top of the patch '[PATCH] pnfsblock: bail out partial page IO'
and follows your pg_layout_private suggestion to pass struct blk_plug around
pg_init/pg_doio.

Please see if it is acceptable.

Thanks,
Tao

Peng Tao (3):
pnfsblock: bail out partial block direct write
NFS41: add pg_layout_private and moreio fields
pnfsblock: call blk_plug functions for direct IO

fs/nfs/blocklayout/blocklayout.c | 62 ++++++++++++++++++++++++++++++++++++--
fs/nfs/pagelist.c | 3 ++
include/linux/nfs_page.h | 1 +
include/linux/nfs_xdr.h | 2 +
4 files changed, 65 insertions(+), 3 deletions(-)



2012-06-01 03:00:18

by Peng, Tao

[permalink] [raw]
Subject: RE: [PATCH-v2 3/3] pnfsblock: call blk_plug functions for direct IO

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNeWtsZWJ1c3QsIFRyb25kIFtt
YWlsdG86VHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb21dDQo+IFNlbnQ6IEZyaWRheSwgSnVuZSAw
MSwgMjAxMiA1OjIyIEFNDQo+IFRvOiBQZW5nIFRhbw0KPiBDYzogbGludXgtbmZzQHZnZXIua2Vy
bmVsLm9yZzsgYmhhcnJvc2hAcGFuYXNhcy5jb207IFBlbmcsIFRhbw0KPiBTdWJqZWN0OiBSZTog
W1BBVENILXYyIDMvM10gcG5mc2Jsb2NrOiBjYWxsIGJsa19wbHVnIGZ1bmN0aW9ucyBmb3IgZGly
ZWN0IElPDQo+IA0KPiBPbiBUdWUsIDIwMTItMDUtMjkgYXQgMTI6MzggKzA4MDAsIFBlbmcgVGFv
IHdyb3RlOg0KPiA+IE5GUyBESU8gYnlwYXNzZXMgZ2VuZXJpYyBESU8gY29kZSBwYXRoLiBTbyB3
ZSBuZWVkIHRvIHBsdWcvdW5wbHVnDQo+ID4gb24gb3VyIG93bi4NCj4gPg0KPiA+IFNpZ25lZC1v
ZmYtYnk6IFBlbmcgVGFvIDx0YW8ucGVuZ0BlbWMuY29tPg0KPiA+IC0tLQ0KPiA+ICBmcy9uZnMv
YmxvY2tsYXlvdXQvYmxvY2tsYXlvdXQuYyB8ICAgNDcgKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKy0NCj4gPiAgMSBmaWxlcyBjaGFuZ2VkLCA0NiBpbnNlcnRpb25zKCspLCAx
IGRlbGV0aW9ucygtKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2ZzL25mcy9ibG9ja2xheW91dC9i
bG9ja2xheW91dC5jIGIvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmMNCj4gPiBpbmRl
eCBiYWI0MzJmLi5iNDhiMDhiIDEwMDY0NA0KPiA+IC0tLSBhL2ZzL25mcy9ibG9ja2xheW91dC9i
bG9ja2xheW91dC5jDQo+ID4gKysrIGIvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmMN
Cj4gPiBAQCAtMjUxLDYgKzI1MSw3IEBAIGJsX3JlYWRfcGFnZWxpc3Qoc3RydWN0IG5mc19yZWFk
X2RhdGEgKnJkYXRhKQ0KPiA+DQo+ID4gIAlkcHJpbnRrKCIlcyBlbnRlciBucl9wYWdlcyAldSBv
ZmZzZXQgJWxsZCBjb3VudCAldVxuIiwgX19mdW5jX18sDQo+ID4gIAkgICAgICAgcmRhdGEtPnBh
Z2VzLm5wYWdlcywgZl9vZmZzZXQsICh1bnNpZ25lZCBpbnQpcmRhdGEtPmFyZ3MuY291bnQpOw0K
PiA+ICsJQlVHX09OKGhlYWRlci0+ZHJlcSAmJiBoZWFkZXItPmxheW91dF9wcml2YXRlID09IE5V
TEwpOw0KPiA+DQo+ID4gIAlpZiAoIWJsX2NoZWNrX2FsaWdubWVudChmX29mZnNldCwgcmRhdGEt
PmFyZ3MuY291bnQsIFBBR0VfQ0FDSEVfTUFTSykpDQo+ID4gIAkJZ290byB1c2VfbWRzOw0KPiA+
IEBAIC0zMjAsOSArMzIxLDE3IEBAIG91dDoNCj4gPiAgCWJsX3B1dF9leHRlbnQoY293X3JlYWQp
Ow0KPiA+ICAJYmxfc3VibWl0X2JpbyhSRUFELCBiaW8pOw0KPiA+ICAJcHV0X3BhcmFsbGVsKHBh
cik7DQo+ID4gKwlpZiAoaGVhZGVyLT5kcmVxICYmICFoZWFkZXItPm1vcmVpbykgew0KPiA+ICsJ
CWJsa19maW5pc2hfcGx1Zygoc3RydWN0IGJsa19wbHVnICopaGVhZGVyLT5sYXlvdXRfcHJpdmF0
ZSk7DQo+ID4gKwkJa2ZyZWUoaGVhZGVyLT5sYXlvdXRfcHJpdmF0ZSk7DQo+IA0KPiBXYWl0Li4u
IFdoeSBjYW4ndCB0aGlzIGp1c3QgZ28gaW4gdGhlIGJsb2NrLXNwZWNpZmljIC0+cGdfZG9pbygp
DQo+IGNhbGxiYWNrPyBXaHkgZG9lcyBpdCBuZWVkIHRvIGdvIHRvIHlvdXINCj4gcmVhZF9wYWdl
bGlzdCgpL3dyaXRlX3BhZ2VsaXN0KCk/DQo+IA0KWW91IGFyZSByaWdodC4gSXQgY2FuIGJlIG1v
dmVkIHRvIC5wZ19kb2lvLiBUaGUgRElPIGFsaWdubWVudCBjaGVjayBzaG91bGQgYmUgbW92ZWQg
dGhlcmUgYXMgd2VsbCBhbmQgdGhlbiB3ZSBjYW4gYXZvaWQgYWxsb2NhdGluZyB1bm5lY2Vzc2Fy
eSBuZnNfcmVhZC93cml0ZV9kYXRhLiBJdCBhbHNvIGVsaW1pbmF0ZXMgdGhlIGNoYW5nZSBpbiBz
dHJ1Y3QgbmZzX3BnaW9faGVhZGVyLg0KDQpUaGFua3MsDQpUYW8NCg0KPiA+ICsJfQ0KPiA+ICAJ
cmV0dXJuIFBORlNfQVRURU1QVEVEOw0KPiA+DQo+ID4gLSB1c2VfbWRzOg0KPiA+ICt1c2VfbWRz
Og0KPiA+ICsJaWYgKGhlYWRlci0+ZHJlcSkgew0KPiA+ICsJCWJsa19maW5pc2hfcGx1Zygoc3Ry
dWN0IGJsa19wbHVnICopaGVhZGVyLT5sYXlvdXRfcHJpdmF0ZSk7DQo+ID4gKwkJa2ZyZWUoaGVh
ZGVyLT5sYXlvdXRfcHJpdmF0ZSk7DQo+ID4gKwl9DQo+ID4gIAlkcHJpbnRrKCJHaXZpbmcgdXAg
YW5kIHVzaW5nIG5vcm1hbCBORlNcbiIpOw0KPiA+ICAJcmV0dXJuIFBORlNfTk9UX0FUVEVNUFRF
RDsNCj4gPiAgfQ0KPiA+IEBAIC01NzUsNiArNTg0LDggQEAgYmxfd3JpdGVfcGFnZWxpc3Qoc3Ry
dWN0IG5mc193cml0ZV9kYXRhICp3ZGF0YSwgaW50IHN5bmMpDQo+ID4gIAl1bnNpZ25lZCBsb25n
IGJsa21hc2sgPSBQQUdFX0NBQ0hFX01BU0s7DQo+ID4NCj4gPiAgCWRwcmludGsoIiVzIGVudGVy
LCAlWnVAJWxsZFxuIiwgX19mdW5jX18sIGNvdW50LCBvZmZzZXQpOw0KPiA+ICsJQlVHX09OKGhl
YWRlci0+ZHJlcSAmJiBoZWFkZXItPmxheW91dF9wcml2YXRlID09IE5VTEwpOw0KPiA+ICsNCj4g
PiAgCS8qIENoZWNrIGZvciBhbGlnbm1lbnQgZmlyc3QgKi8NCj4gPiAgCWlmIChoZWFkZXItPmRy
ZXEpDQo+ID4gIAkJYmxrbWFzayA9IE5GU19TRVJWRVIoaGVhZGVyLT5pbm9kZSktPnBuZnNfYmxr
c2l6ZSAtIDE7DQo+ID4gQEAgLTc0MCw4ICs3NTEsMTYgQEAgb3V0Og0KPiA+ICAJYmxfcHV0X2V4
dGVudChiZSk7DQo+ID4gIAlibF9zdWJtaXRfYmlvKFdSSVRFLCBiaW8pOw0KPiA+ICAJcHV0X3Bh
cmFsbGVsKHBhcik7DQo+ID4gKwlpZiAoaGVhZGVyLT5kcmVxICYmICFoZWFkZXItPm1vcmVpbykg
ew0KPiA+ICsJCWJsa19maW5pc2hfcGx1Zygoc3RydWN0IGJsa19wbHVnICopaGVhZGVyLT5sYXlv
dXRfcHJpdmF0ZSk7DQo+ID4gKwkJa2ZyZWUoaGVhZGVyLT5sYXlvdXRfcHJpdmF0ZSk7DQo+ID4g
Kwl9DQo+ID4gIAlyZXR1cm4gUE5GU19BVFRFTVBURUQ7DQo+ID4gIG91dF9tZHM6DQo+ID4gKwlp
ZiAoaGVhZGVyLT5kcmVxKSB7DQo+ID4gKwkJYmxrX2ZpbmlzaF9wbHVnKChzdHJ1Y3QgYmxrX3Bs
dWcgKiloZWFkZXItPmxheW91dF9wcml2YXRlKTsNCj4gPiArCQlrZnJlZShoZWFkZXItPmxheW91
dF9wcml2YXRlKTsNCj4gPiArCX0NCj4gPiAgCWJsX3B1dF9leHRlbnQoYmUpOw0KPiA+ICAJa2Zy
ZWUocGFyKTsNCj4gPiAgCXJldHVybiBQTkZTX05PVF9BVFRFTVBURUQ7DQo+ID4gQEAgLTEwMTcs
MTUgKzEwMzYsMzAgQEAgYmxfY2xlYXJfbGF5b3V0ZHJpdmVyKHN0cnVjdCBuZnNfc2VydmVyICpz
ZXJ2ZXIpDQo+ID4gIHN0YXRpYyB2b2lkDQo+ID4gIGJsX3BnX2luaXRfcmVhZChzdHJ1Y3QgbmZz
X3BhZ2Vpb19kZXNjcmlwdG9yICpwZ2lvLCBzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSkNCj4gPiAgew0K
PiA+ICsJQlVHX09OKHBnaW8tPnBnX2xheW91dF9wcml2YXRlICE9IE5VTEwpOw0KPiA+ICsNCj4g
PiAgCWlmICghYmxfY2hlY2tfYWxpZ25tZW50KHJlcS0+d2Jfb2Zmc2V0LCByZXEtPndiX2J5dGVz
LCBQQUdFX0NBQ0hFX01BU0spKQ0KPiA+ICAJCW5mc19wYWdlaW9fcmVzZXRfcmVhZF9tZHMocGdp
byk7DQo+ID4gIAllbHNlDQo+ID4gIAkJcG5mc19nZW5lcmljX3BnX2luaXRfcmVhZChwZ2lvLCBy
ZXEpOw0KPiA+ICsNCj4gPiArCWlmIChwZ2lvLT5wZ19kcmVxICYmIHBnaW8tPnBnX2xzZWcpIHsN
Cj4gPiArCQlzdHJ1Y3QgYmxrX3BsdWcgKnBsdWc7DQo+ID4gKwkJLyogRnJlZWQgaW4gYmxfcmVh
ZF9wYWdlbGlzdCAqLw0KPiA+ICsJCXBsdWcgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmxrX3Bs
dWcpLCBHRlBfS0VSTkVMKTsNCj4gPiArCQlpZiAocGx1ZyAhPSBOVUxMKSB7DQo+ID4gKwkJCWJs
a19zdGFydF9wbHVnKHBsdWcpOw0KPiA+ICsJCQlwZ2lvLT5wZ19sYXlvdXRfcHJpdmF0ZSA9IHBs
dWc7DQo+ID4gKwkJfSBlbHNlDQo+ID4gKwkJCW5mc19wYWdlaW9fcmVzZXRfcmVhZF9tZHMocGdp
byk7DQo+ID4gKwl9DQo+ID4gIH0NCj4gPg0KPiA+ICBzdGF0aWMgdm9pZA0KPiA+ICBibF9wZ19p
bml0X3dyaXRlKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKnBnaW8sIHN0cnVjdCBuZnNf
cGFnZSAqcmVxKQ0KPiA+ICB7DQo+ID4gKwlCVUdfT04ocGdpby0+cGdfbGF5b3V0X3ByaXZhdGUg
IT0gTlVMTCk7DQo+ID4gKw0KPiA+ICAJaWYgKHBnaW8tPnBnX2RyZXEpIHsNCj4gPiAgCQkvKiBE
aXJlY3Qgd3JpdGUgc2hvdWxkIGJlIGJsa3NpemUgYWxpZ25lZCAqLw0KPiA+ICAJCXVuc2lnbmVk
IGJsa21hc2sgPSBORlNfU0VSVkVSKHBnaW8tPnBnX2lub2RlKS0+cG5mc19ibGtzaXplIC0gMTsN
Cj4gPiBAQCAtMTAzOCw2ICsxMDcyLDE3IEBAIGJsX3BnX2luaXRfd3JpdGUoc3RydWN0IG5mc19w
YWdlaW9fZGVzY3JpcHRvciAqcGdpbywgc3RydWN0IG5mc19wYWdlICpyZXEpDQo+ID4gIAkJbmZz
X3BhZ2Vpb19yZXNldF93cml0ZV9tZHMocGdpbyk7DQo+ID4gIAllbHNlDQo+ID4gIAkJcG5mc19n
ZW5lcmljX3BnX2luaXRfd3JpdGUocGdpbywgcmVxKTsNCj4gPiArDQo+ID4gKwlpZiAocGdpby0+
cGdfZHJlcSAmJiBwZ2lvLT5wZ19sc2VnKSB7DQo+ID4gKwkJc3RydWN0IGJsa19wbHVnICpwbHVn
Ow0KPiA+ICsJCS8qIEZyZWVkIGluIGJsX3dyaXRlX3BhZ2VsaXN0ICovDQo+ID4gKwkJcGx1ZyA9
IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBibGtfcGx1ZyksIEdGUF9OT0ZTKTsNCj4gPiArCQlpZiAo
cGx1ZyAhPSBOVUxMKSB7DQo+ID4gKwkJCWJsa19zdGFydF9wbHVnKHBsdWcpOw0KPiA+ICsJCQlw
Z2lvLT5wZ19sYXlvdXRfcHJpdmF0ZSA9IHBsdWc7DQo+ID4gKwkJfSBlbHNlDQo+ID4gKwkJCW5m
c19wYWdlaW9fcmVzZXRfd3JpdGVfbWRzKHBnaW8pOw0KPiA+ICsJfQ0KPiA+ICB9DQo+ID4NCj4g
PiAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZnNfcGFnZWlvX29wcyBibF9wZ19yZWFkX29wcyA9IHsN
Cj4gDQo+IC0tDQo+IFRyb25kIE15a2xlYnVzdA0KPiBMaW51eCBORlMgY2xpZW50IG1haW50YWlu
ZXINCj4gDQo+IE5ldEFwcA0KPiBUcm9uZC5NeWtsZWJ1c3RAbmV0YXBwLmNvbQ0KPiB3d3cubmV0
YXBwLmNvbQ0KDQo=

2012-05-29 04:39:29

by Peng Tao

[permalink] [raw]
Subject: [PATCH-v2 2/3] NFS41: add pg_layout_private and moreio fields

To allow layout driver to pass private information around
pg_init/pg_doio.

Cc: Boaz Harrosh <[email protected]>
Signed-off-by: Peng Tao <[email protected]>
---
fs/nfs/pagelist.c | 3 +++
include/linux/nfs_page.h | 1 +
include/linux/nfs_xdr.h | 2 ++
3 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c
index aed913c..a47d18a 100644
--- a/fs/nfs/pagelist.c
+++ b/fs/nfs/pagelist.c
@@ -49,6 +49,8 @@ void nfs_pgheader_init(struct nfs_pageio_descriptor *desc,
hdr->io_start = req_offset(hdr->req);
hdr->good_bytes = desc->pg_count;
hdr->dreq = desc->pg_dreq;
+ hdr->layout_private = desc->pg_layout_private;
+ hdr->moreio = desc->pg_moreio;
hdr->release = release;
hdr->completion_ops = desc->pg_completion_ops;
if (hdr->completion_ops->init_hdr)
@@ -267,6 +269,7 @@ void nfs_pageio_init(struct nfs_pageio_descriptor *desc,
desc->pg_error = 0;
desc->pg_lseg = NULL;
desc->pg_dreq = NULL;
+ desc->pg_layout_private = NULL;
}

/**
diff --git a/include/linux/nfs_page.h b/include/linux/nfs_page.h
index 88d166b..63093b1 100644
--- a/include/linux/nfs_page.h
+++ b/include/linux/nfs_page.h
@@ -69,6 +69,7 @@ struct nfs_pageio_descriptor {
const struct nfs_pgio_completion_ops *pg_completion_ops;
struct pnfs_layout_segment *pg_lseg;
struct nfs_direct_req *pg_dreq;
+ void *pg_layout_private;
};

#define NFS_WBACK_BUSY(req) (test_bit(PG_BUSY,&(req)->wb_flags))
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index 2e53a3f..88e95a7 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -1224,6 +1224,8 @@ struct nfs_pgio_header {
void (*release) (struct nfs_pgio_header *hdr);
const struct nfs_pgio_completion_ops *completion_ops;
struct nfs_direct_req *dreq;
+ void *layout_private;
+ bool moreio;
spinlock_t lock;
/* fields protected by lock */
int pnfs_error;
--
1.7.1.262.g5ef3d


2012-05-31 21:13:39

by Myklebust, Trond

[permalink] [raw]
Subject: Re: [PATCH-v2 1/3] pnfsblock: bail out partial block direct write

T24gVHVlLCAyMDEyLTA1LTI5IGF0IDEyOjM4ICswODAwLCBQZW5nIFRhbyB3cm90ZToNCj4gU2ln
bmVkLW9mZi1ieTogUGVuZyBUYW8gPHRhby5wZW5nQGVtYy5jb20+DQo+IC0tLQ0KPiAgZnMvbmZz
L2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmMgfCAgIDE1ICsrKysrKysrKysrKystLQ0KPiAgMSBm
aWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQ0KPiANCj4gZGlm
ZiAtLWdpdCBhL2ZzL25mcy9ibG9ja2xheW91dC9ibG9ja2xheW91dC5jIGIvZnMvbmZzL2Jsb2Nr
bGF5b3V0L2Jsb2NrbGF5b3V0LmMNCj4gaW5kZXggZGQzOTJlZC4uYmFiNDMyZiAxMDA2NDQNCj4g
LS0tIGEvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmMNCj4gKysrIGIvZnMvbmZzL2Js
b2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmMNCj4gQEAgLTU3MiwxMCArNTcyLDEzIEBAIGJsX3dyaXRl
X3BhZ2VsaXN0KHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqd2RhdGEsIGludCBzeW5jKQ0KPiAgCXU2
NCB0ZW1wOw0KPiAgCWludCBucGdfcGVyX2Jsb2NrID0NCj4gIAkgICAgTkZTX1NFUlZFUihoZWFk
ZXItPmlub2RlKS0+cG5mc19ibGtzaXplID4+IFBBR0VfQ0FDSEVfU0hJRlQ7DQo+ICsJdW5zaWdu
ZWQgbG9uZyBibGttYXNrID0gUEFHRV9DQUNIRV9NQVNLOw0KPiAgDQo+ICAJZHByaW50aygiJXMg
ZW50ZXIsICVadUAlbGxkXG4iLCBfX2Z1bmNfXywgY291bnQsIG9mZnNldCk7DQo+ICAJLyogQ2hl
Y2sgZm9yIGFsaWdubWVudCBmaXJzdCAqLw0KPiAtCWlmICghYmxfY2hlY2tfYWxpZ25tZW50KG9m
ZnNldCwgY291bnQsIFBBR0VfQ0FDSEVfTUFTSykpDQo+ICsJaWYgKGhlYWRlci0+ZHJlcSkNCj4g
KwkJYmxrbWFzayA9IE5GU19TRVJWRVIoaGVhZGVyLT5pbm9kZSktPnBuZnNfYmxrc2l6ZSAtIDE7
DQo+ICsJaWYgKCFibF9jaGVja19hbGlnbm1lbnQob2Zmc2V0LCBjb3VudCwgYmxrbWFzaykpDQo+
ICAJCWdvdG8gb3V0X21kczsNCj4gIA0KPiAgCS8qIEF0IHRoaXMgcG9pbnQsIHdkYXRhLT5wYWdl
cyBpcyBhIChzZXF1ZW50aWFsKSBsaXN0IG9mIG5mc19wYWdlcy4NCj4gQEAgLTEwMjMsNyArMTAy
NiwxNSBAQCBibF9wZ19pbml0X3JlYWQoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqcGdp
bywgc3RydWN0IG5mc19wYWdlICpyZXEpDQo+ICBzdGF0aWMgdm9pZA0KPiAgYmxfcGdfaW5pdF93
cml0ZShzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpwZ2lvLCBzdHJ1Y3QgbmZzX3BhZ2Ug
KnJlcSkNCj4gIHsNCj4gLQlpZiAoIWJsX2NoZWNrX2FsaWdubWVudChyZXEtPndiX29mZnNldCwg
cmVxLT53Yl9ieXRlcywgUEFHRV9DQUNIRV9NQVNLKSkNCj4gKwlpZiAocGdpby0+cGdfZHJlcSkg
ew0KPiArCQkvKiBEaXJlY3Qgd3JpdGUgc2hvdWxkIGJlIGJsa3NpemUgYWxpZ25lZCAqLw0KPiAr
CQl1bnNpZ25lZCBibGttYXNrID0gTkZTX1NFUlZFUihwZ2lvLT5wZ19pbm9kZSktPnBuZnNfYmxr
c2l6ZSAtIDE7DQo+ICsJCXU2NCBwb3MgPSAocmVxLT53Yl9pbmRleCA8PCBQQUdFX0NBQ0hFX1NI
SUZUKSArIHJlcS0+d2JfYnl0ZXM7DQoNClBsZWFzZSB1c2UgdGhlIHJlcV9vZmZzZXQoKSBoZWxw
ZXIgZm9yIHRoaXMgY2FsY3VsYXRpb246IHRoZSBsaW5lIGFib3ZlDQpmYWlscyB0byBjYXN0IHJl
cS0+d2JfaW5kZXggY29ycmVjdGx5Lg0KDQo+ICsJCWlmICghYmxfY2hlY2tfYWxpZ25tZW50KHBv
cywgMCwgYmxrbWFzaykgfHwNCj4gKwkJICAgIHJlcS0+d2JfYnl0ZXMgIT0gUEFHRV9DQUNIRV9T
SVpFKQ0KPiArCQkJbmZzX3BhZ2Vpb19yZXNldF93cml0ZV9tZHMocGdpbyk7DQo+ICsJfSBlbHNl
IGlmICghYmxfY2hlY2tfYWxpZ25tZW50KHJlcS0+d2Jfb2Zmc2V0LCByZXEtPndiX2J5dGVzLA0K
PiArCQkJCSAgICAgICBQQUdFX0NBQ0hFX01BU0spKQ0KPiAgCQluZnNfcGFnZWlvX3Jlc2V0X3dy
aXRlX21kcyhwZ2lvKTsNCj4gIAllbHNlDQo+ICAJCXBuZnNfZ2VuZXJpY19wZ19pbml0X3dyaXRl
KHBnaW8sIHJlcSk7DQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51eCBORlMgY2xpZW50IG1h
aW50YWluZXINCg0KTmV0QXBwDQpUcm9uZC5NeWtsZWJ1c3RAbmV0YXBwLmNvbQ0Kd3d3Lm5ldGFw
cC5jb20NCg0K

2012-05-31 21:22:19

by Myklebust, Trond

[permalink] [raw]
Subject: Re: [PATCH-v2 3/3] pnfsblock: call blk_plug functions for direct IO

T24gVHVlLCAyMDEyLTA1LTI5IGF0IDEyOjM4ICswODAwLCBQZW5nIFRhbyB3cm90ZToNCj4gTkZT
IERJTyBieXBhc3NlcyBnZW5lcmljIERJTyBjb2RlIHBhdGguIFNvIHdlIG5lZWQgdG8gcGx1Zy91
bnBsdWcNCj4gb24gb3VyIG93bi4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IFBlbmcgVGFvIDx0YW8u
cGVuZ0BlbWMuY29tPg0KPiAtLS0NCj4gIGZzL25mcy9ibG9ja2xheW91dC9ibG9ja2xheW91dC5j
IHwgICA0NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQ0KPiAgMSBmaWxl
cyBjaGFuZ2VkLCA0NiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAt
LWdpdCBhL2ZzL25mcy9ibG9ja2xheW91dC9ibG9ja2xheW91dC5jIGIvZnMvbmZzL2Jsb2NrbGF5
b3V0L2Jsb2NrbGF5b3V0LmMNCj4gaW5kZXggYmFiNDMyZi4uYjQ4YjA4YiAxMDA2NDQNCj4gLS0t
IGEvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmMNCj4gKysrIGIvZnMvbmZzL2Jsb2Nr
bGF5b3V0L2Jsb2NrbGF5b3V0LmMNCj4gQEAgLTI1MSw2ICsyNTEsNyBAQCBibF9yZWFkX3BhZ2Vs
aXN0KHN0cnVjdCBuZnNfcmVhZF9kYXRhICpyZGF0YSkNCj4gIA0KPiAgCWRwcmludGsoIiVzIGVu
dGVyIG5yX3BhZ2VzICV1IG9mZnNldCAlbGxkIGNvdW50ICV1XG4iLCBfX2Z1bmNfXywNCj4gIAkg
ICAgICAgcmRhdGEtPnBhZ2VzLm5wYWdlcywgZl9vZmZzZXQsICh1bnNpZ25lZCBpbnQpcmRhdGEt
PmFyZ3MuY291bnQpOw0KPiArCUJVR19PTihoZWFkZXItPmRyZXEgJiYgaGVhZGVyLT5sYXlvdXRf
cHJpdmF0ZSA9PSBOVUxMKTsNCj4gIA0KPiAgCWlmICghYmxfY2hlY2tfYWxpZ25tZW50KGZfb2Zm
c2V0LCByZGF0YS0+YXJncy5jb3VudCwgUEFHRV9DQUNIRV9NQVNLKSkNCj4gIAkJZ290byB1c2Vf
bWRzOw0KPiBAQCAtMzIwLDkgKzMyMSwxNyBAQCBvdXQ6DQo+ICAJYmxfcHV0X2V4dGVudChjb3df
cmVhZCk7DQo+ICAJYmxfc3VibWl0X2JpbyhSRUFELCBiaW8pOw0KPiAgCXB1dF9wYXJhbGxlbChw
YXIpOw0KPiArCWlmIChoZWFkZXItPmRyZXEgJiYgIWhlYWRlci0+bW9yZWlvKSB7DQo+ICsJCWJs
a19maW5pc2hfcGx1Zygoc3RydWN0IGJsa19wbHVnICopaGVhZGVyLT5sYXlvdXRfcHJpdmF0ZSk7
DQo+ICsJCWtmcmVlKGhlYWRlci0+bGF5b3V0X3ByaXZhdGUpOw0KDQpXYWl0Li4uIFdoeSBjYW4n
dCB0aGlzIGp1c3QgZ28gaW4gdGhlIGJsb2NrLXNwZWNpZmljIC0+cGdfZG9pbygpDQpjYWxsYmFj
az8gV2h5IGRvZXMgaXQgbmVlZCB0byBnbyB0byB5b3VyDQpyZWFkX3BhZ2VsaXN0KCkvd3JpdGVf
cGFnZWxpc3QoKT8NCg0KPiArCX0NCj4gIAlyZXR1cm4gUE5GU19BVFRFTVBURUQ7DQo+ICANCj4g
LSB1c2VfbWRzOg0KPiArdXNlX21kczoNCj4gKwlpZiAoaGVhZGVyLT5kcmVxKSB7DQo+ICsJCWJs
a19maW5pc2hfcGx1Zygoc3RydWN0IGJsa19wbHVnICopaGVhZGVyLT5sYXlvdXRfcHJpdmF0ZSk7
DQo+ICsJCWtmcmVlKGhlYWRlci0+bGF5b3V0X3ByaXZhdGUpOw0KPiArCX0NCj4gIAlkcHJpbnRr
KCJHaXZpbmcgdXAgYW5kIHVzaW5nIG5vcm1hbCBORlNcbiIpOw0KPiAgCXJldHVybiBQTkZTX05P
VF9BVFRFTVBURUQ7DQo+ICB9DQo+IEBAIC01NzUsNiArNTg0LDggQEAgYmxfd3JpdGVfcGFnZWxp
c3Qoc3RydWN0IG5mc193cml0ZV9kYXRhICp3ZGF0YSwgaW50IHN5bmMpDQo+ICAJdW5zaWduZWQg
bG9uZyBibGttYXNrID0gUEFHRV9DQUNIRV9NQVNLOw0KPiAgDQo+ICAJZHByaW50aygiJXMgZW50
ZXIsICVadUAlbGxkXG4iLCBfX2Z1bmNfXywgY291bnQsIG9mZnNldCk7DQo+ICsJQlVHX09OKGhl
YWRlci0+ZHJlcSAmJiBoZWFkZXItPmxheW91dF9wcml2YXRlID09IE5VTEwpOw0KPiArDQo+ICAJ
LyogQ2hlY2sgZm9yIGFsaWdubWVudCBmaXJzdCAqLw0KPiAgCWlmIChoZWFkZXItPmRyZXEpDQo+
ICAJCWJsa21hc2sgPSBORlNfU0VSVkVSKGhlYWRlci0+aW5vZGUpLT5wbmZzX2Jsa3NpemUgLSAx
Ow0KPiBAQCAtNzQwLDggKzc1MSwxNiBAQCBvdXQ6DQo+ICAJYmxfcHV0X2V4dGVudChiZSk7DQo+
ICAJYmxfc3VibWl0X2JpbyhXUklURSwgYmlvKTsNCj4gIAlwdXRfcGFyYWxsZWwocGFyKTsNCj4g
KwlpZiAoaGVhZGVyLT5kcmVxICYmICFoZWFkZXItPm1vcmVpbykgew0KPiArCQlibGtfZmluaXNo
X3BsdWcoKHN0cnVjdCBibGtfcGx1ZyAqKWhlYWRlci0+bGF5b3V0X3ByaXZhdGUpOw0KPiArCQlr
ZnJlZShoZWFkZXItPmxheW91dF9wcml2YXRlKTsNCj4gKwl9DQo+ICAJcmV0dXJuIFBORlNfQVRU
RU1QVEVEOw0KPiAgb3V0X21kczoNCj4gKwlpZiAoaGVhZGVyLT5kcmVxKSB7DQo+ICsJCWJsa19m
aW5pc2hfcGx1Zygoc3RydWN0IGJsa19wbHVnICopaGVhZGVyLT5sYXlvdXRfcHJpdmF0ZSk7DQo+
ICsJCWtmcmVlKGhlYWRlci0+bGF5b3V0X3ByaXZhdGUpOw0KPiArCX0NCj4gIAlibF9wdXRfZXh0
ZW50KGJlKTsNCj4gIAlrZnJlZShwYXIpOw0KPiAgCXJldHVybiBQTkZTX05PVF9BVFRFTVBURUQ7
DQo+IEBAIC0xMDE3LDE1ICsxMDM2LDMwIEBAIGJsX2NsZWFyX2xheW91dGRyaXZlcihzdHJ1Y3Qg
bmZzX3NlcnZlciAqc2VydmVyKQ0KPiAgc3RhdGljIHZvaWQNCj4gIGJsX3BnX2luaXRfcmVhZChz
dHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpwZ2lvLCBzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSkN
Cj4gIHsNCj4gKwlCVUdfT04ocGdpby0+cGdfbGF5b3V0X3ByaXZhdGUgIT0gTlVMTCk7DQo+ICsN
Cj4gIAlpZiAoIWJsX2NoZWNrX2FsaWdubWVudChyZXEtPndiX29mZnNldCwgcmVxLT53Yl9ieXRl
cywgUEFHRV9DQUNIRV9NQVNLKSkNCj4gIAkJbmZzX3BhZ2Vpb19yZXNldF9yZWFkX21kcyhwZ2lv
KTsNCj4gIAllbHNlDQo+ICAJCXBuZnNfZ2VuZXJpY19wZ19pbml0X3JlYWQocGdpbywgcmVxKTsN
Cj4gKw0KPiArCWlmIChwZ2lvLT5wZ19kcmVxICYmIHBnaW8tPnBnX2xzZWcpIHsNCj4gKwkJc3Ry
dWN0IGJsa19wbHVnICpwbHVnOw0KPiArCQkvKiBGcmVlZCBpbiBibF9yZWFkX3BhZ2VsaXN0ICov
DQo+ICsJCXBsdWcgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmxrX3BsdWcpLCBHRlBfS0VSTkVM
KTsNCj4gKwkJaWYgKHBsdWcgIT0gTlVMTCkgew0KPiArCQkJYmxrX3N0YXJ0X3BsdWcocGx1Zyk7
DQo+ICsJCQlwZ2lvLT5wZ19sYXlvdXRfcHJpdmF0ZSA9IHBsdWc7DQo+ICsJCX0gZWxzZQ0KPiAr
CQkJbmZzX3BhZ2Vpb19yZXNldF9yZWFkX21kcyhwZ2lvKTsNCj4gKwl9DQo+ICB9DQo+ICANCj4g
IHN0YXRpYyB2b2lkDQo+ICBibF9wZ19pbml0X3dyaXRlKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2Ny
aXB0b3IgKnBnaW8sIHN0cnVjdCBuZnNfcGFnZSAqcmVxKQ0KPiAgew0KPiArCUJVR19PTihwZ2lv
LT5wZ19sYXlvdXRfcHJpdmF0ZSAhPSBOVUxMKTsNCj4gKw0KPiAgCWlmIChwZ2lvLT5wZ19kcmVx
KSB7DQo+ICAJCS8qIERpcmVjdCB3cml0ZSBzaG91bGQgYmUgYmxrc2l6ZSBhbGlnbmVkICovDQo+
ICAJCXVuc2lnbmVkIGJsa21hc2sgPSBORlNfU0VSVkVSKHBnaW8tPnBnX2lub2RlKS0+cG5mc19i
bGtzaXplIC0gMTsNCj4gQEAgLTEwMzgsNiArMTA3MiwxNyBAQCBibF9wZ19pbml0X3dyaXRlKHN0
cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKnBnaW8sIHN0cnVjdCBuZnNfcGFnZSAqcmVxKQ0K
PiAgCQluZnNfcGFnZWlvX3Jlc2V0X3dyaXRlX21kcyhwZ2lvKTsNCj4gIAllbHNlDQo+ICAJCXBu
ZnNfZ2VuZXJpY19wZ19pbml0X3dyaXRlKHBnaW8sIHJlcSk7DQo+ICsNCj4gKwlpZiAocGdpby0+
cGdfZHJlcSAmJiBwZ2lvLT5wZ19sc2VnKSB7DQo+ICsJCXN0cnVjdCBibGtfcGx1ZyAqcGx1ZzsN
Cj4gKwkJLyogRnJlZWQgaW4gYmxfd3JpdGVfcGFnZWxpc3QgKi8NCj4gKwkJcGx1ZyA9IGttYWxs
b2Moc2l6ZW9mKHN0cnVjdCBibGtfcGx1ZyksIEdGUF9OT0ZTKTsNCj4gKwkJaWYgKHBsdWcgIT0g
TlVMTCkgew0KPiArCQkJYmxrX3N0YXJ0X3BsdWcocGx1Zyk7DQo+ICsJCQlwZ2lvLT5wZ19sYXlv
dXRfcHJpdmF0ZSA9IHBsdWc7DQo+ICsJCX0gZWxzZQ0KPiArCQkJbmZzX3BhZ2Vpb19yZXNldF93
cml0ZV9tZHMocGdpbyk7DQo+ICsJfQ0KPiAgfQ0KPiAgDQo+ICBzdGF0aWMgY29uc3Qgc3RydWN0
IG5mc19wYWdlaW9fb3BzIGJsX3BnX3JlYWRfb3BzID0gew0KDQotLSANClRyb25kIE15a2xlYnVz
dA0KTGludXggTkZTIGNsaWVudCBtYWludGFpbmVyDQoNCk5ldEFwcA0KVHJvbmQuTXlrbGVidXN0
QG5ldGFwcC5jb20NCnd3dy5uZXRhcHAuY29tDQoNCg==

2012-05-29 04:39:39

by Peng Tao

[permalink] [raw]
Subject: [PATCH-v2 3/3] pnfsblock: call blk_plug functions for direct IO

NFS DIO bypasses generic DIO code path. So we need to plug/unplug
on our own.

Signed-off-by: Peng Tao <[email protected]>
---
fs/nfs/blocklayout/blocklayout.c | 47 +++++++++++++++++++++++++++++++++++++-
1 files changed, 46 insertions(+), 1 deletions(-)

diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
index bab432f..b48b08b 100644
--- a/fs/nfs/blocklayout/blocklayout.c
+++ b/fs/nfs/blocklayout/blocklayout.c
@@ -251,6 +251,7 @@ bl_read_pagelist(struct nfs_read_data *rdata)

dprintk("%s enter nr_pages %u offset %lld count %u\n", __func__,
rdata->pages.npages, f_offset, (unsigned int)rdata->args.count);
+ BUG_ON(header->dreq && header->layout_private == NULL);

if (!bl_check_alignment(f_offset, rdata->args.count, PAGE_CACHE_MASK))
goto use_mds;
@@ -320,9 +321,17 @@ out:
bl_put_extent(cow_read);
bl_submit_bio(READ, bio);
put_parallel(par);
+ if (header->dreq && !header->moreio) {
+ blk_finish_plug((struct blk_plug *)header->layout_private);
+ kfree(header->layout_private);
+ }
return PNFS_ATTEMPTED;

- use_mds:
+use_mds:
+ if (header->dreq) {
+ blk_finish_plug((struct blk_plug *)header->layout_private);
+ kfree(header->layout_private);
+ }
dprintk("Giving up and using normal NFS\n");
return PNFS_NOT_ATTEMPTED;
}
@@ -575,6 +584,8 @@ bl_write_pagelist(struct nfs_write_data *wdata, int sync)
unsigned long blkmask = PAGE_CACHE_MASK;

dprintk("%s enter, %Zu@%lld\n", __func__, count, offset);
+ BUG_ON(header->dreq && header->layout_private == NULL);
+
/* Check for alignment first */
if (header->dreq)
blkmask = NFS_SERVER(header->inode)->pnfs_blksize - 1;
@@ -740,8 +751,16 @@ out:
bl_put_extent(be);
bl_submit_bio(WRITE, bio);
put_parallel(par);
+ if (header->dreq && !header->moreio) {
+ blk_finish_plug((struct blk_plug *)header->layout_private);
+ kfree(header->layout_private);
+ }
return PNFS_ATTEMPTED;
out_mds:
+ if (header->dreq) {
+ blk_finish_plug((struct blk_plug *)header->layout_private);
+ kfree(header->layout_private);
+ }
bl_put_extent(be);
kfree(par);
return PNFS_NOT_ATTEMPTED;
@@ -1017,15 +1036,30 @@ bl_clear_layoutdriver(struct nfs_server *server)
static void
bl_pg_init_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *req)
{
+ BUG_ON(pgio->pg_layout_private != NULL);
+
if (!bl_check_alignment(req->wb_offset, req->wb_bytes, PAGE_CACHE_MASK))
nfs_pageio_reset_read_mds(pgio);
else
pnfs_generic_pg_init_read(pgio, req);
+
+ if (pgio->pg_dreq && pgio->pg_lseg) {
+ struct blk_plug *plug;
+ /* Freed in bl_read_pagelist */
+ plug = kmalloc(sizeof(struct blk_plug), GFP_KERNEL);
+ if (plug != NULL) {
+ blk_start_plug(plug);
+ pgio->pg_layout_private = plug;
+ } else
+ nfs_pageio_reset_read_mds(pgio);
+ }
}

static void
bl_pg_init_write(struct nfs_pageio_descriptor *pgio, struct nfs_page *req)
{
+ BUG_ON(pgio->pg_layout_private != NULL);
+
if (pgio->pg_dreq) {
/* Direct write should be blksize aligned */
unsigned blkmask = NFS_SERVER(pgio->pg_inode)->pnfs_blksize - 1;
@@ -1038,6 +1072,17 @@ bl_pg_init_write(struct nfs_pageio_descriptor *pgio, struct nfs_page *req)
nfs_pageio_reset_write_mds(pgio);
else
pnfs_generic_pg_init_write(pgio, req);
+
+ if (pgio->pg_dreq && pgio->pg_lseg) {
+ struct blk_plug *plug;
+ /* Freed in bl_write_pagelist */
+ plug = kmalloc(sizeof(struct blk_plug), GFP_NOFS);
+ if (plug != NULL) {
+ blk_start_plug(plug);
+ pgio->pg_layout_private = plug;
+ } else
+ nfs_pageio_reset_write_mds(pgio);
+ }
}

static const struct nfs_pageio_ops bl_pg_read_ops = {
--
1.7.1.262.g5ef3d


2012-05-29 04:39:22

by Peng Tao

[permalink] [raw]
Subject: [PATCH-v2 1/3] pnfsblock: bail out partial block direct write

Signed-off-by: Peng Tao <[email protected]>
---
fs/nfs/blocklayout/blocklayout.c | 15 +++++++++++++--
1 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
index dd392ed..bab432f 100644
--- a/fs/nfs/blocklayout/blocklayout.c
+++ b/fs/nfs/blocklayout/blocklayout.c
@@ -572,10 +572,13 @@ bl_write_pagelist(struct nfs_write_data *wdata, int sync)
u64 temp;
int npg_per_block =
NFS_SERVER(header->inode)->pnfs_blksize >> PAGE_CACHE_SHIFT;
+ unsigned long blkmask = PAGE_CACHE_MASK;

dprintk("%s enter, %Zu@%lld\n", __func__, count, offset);
/* Check for alignment first */
- if (!bl_check_alignment(offset, count, PAGE_CACHE_MASK))
+ if (header->dreq)
+ blkmask = NFS_SERVER(header->inode)->pnfs_blksize - 1;
+ if (!bl_check_alignment(offset, count, blkmask))
goto out_mds;

/* At this point, wdata->pages is a (sequential) list of nfs_pages.
@@ -1023,7 +1026,15 @@ bl_pg_init_read(struct nfs_pageio_descriptor *pgio, struct nfs_page *req)
static void
bl_pg_init_write(struct nfs_pageio_descriptor *pgio, struct nfs_page *req)
{
- if (!bl_check_alignment(req->wb_offset, req->wb_bytes, PAGE_CACHE_MASK))
+ if (pgio->pg_dreq) {
+ /* Direct write should be blksize aligned */
+ unsigned blkmask = NFS_SERVER(pgio->pg_inode)->pnfs_blksize - 1;
+ u64 pos = (req->wb_index << PAGE_CACHE_SHIFT) + req->wb_bytes;
+ if (!bl_check_alignment(pos, 0, blkmask) ||
+ req->wb_bytes != PAGE_CACHE_SIZE)
+ nfs_pageio_reset_write_mds(pgio);
+ } else if (!bl_check_alignment(req->wb_offset, req->wb_bytes,
+ PAGE_CACHE_MASK))
nfs_pageio_reset_write_mds(pgio);
else
pnfs_generic_pg_init_write(pgio, req);
--
1.7.1.262.g5ef3d