2017-11-30 01:13:36

by Thomas Haynes

[permalink] [raw]
Subject: pyNFS and RNM14

Bruce,

[root@client1-ci-291117203803930 nfs4.1]# ./testserver.py 172.29.53.145:/ -=
-verbose --outfile=3D/tmp/pynfs4.1.out --minorversion=3D2 --maketree RNM14
Could not find gssapi module, proceeding without
INFO :rpc.poll:got connection from ('127.0.0.1', 55390), assigned to fd=
=3D5
INFO :rpc.thread:Called connect(('172.29.53.145', 2049))
INFO :rpc.poll:Adding 6 generated by another thread
INFO :test.env:Created client to 172.29.53.145, 2049
INFO :test.env:Called do_readdir()
INFO :test.env:do_readdir() =3D []
RNM14 st_rename.testFileToDir : RUNNING
RNM14 st_rename.testFileToDir : FAILURE
RENAME file into existing dir should return
NFS4ERR_EXIST or NFS4ERR_ISDIR, instead got
NFS4ERR_SERVERFAULT
INFO :test.env:Called do_readdir()
INFO :test.env:do_readdir() =3D [entry4(cookie=3D418L, name=3D'RNM14_1512=
003093', attrs=3D{})]
INFO :test.env:Called do_readdir()
INFO :test.env:do_readdir() =3D [entry4(cookie=3D419L, name=3D'dir', attr=
s=3D{}), entry4(cookie=3D420L, name=3D'file', attrs=3D{})]
**************************************************
RNM14 st_rename.testFileToDir : FAILURE
RENAME file into existing dir should return
NFS4ERR_EXIST or NFS4ERR_ISDIR, instead got
NFS4ERR_SERVERFAULT
**************************************************
Command line asked for 1 of 280 tests
Of those: 0 Skipped, 1 Failed, 0 Warned, 0 Passed

Yet according to RFC 5661, Section 15.2 (table 6), NFS4ERR_ISDIR
is not an allowed error code for RENAME.

According to POSIX rename() it is an allowed error code. I believe
the assumption is that the client should catch this case first?

Anyway, does the knfsd return NFS4ERR_ISDIR in this test case?

Thanks,
Tom



2017-11-30 16:25:47

by J. Bruce Fields

[permalink] [raw]
Subject: Re: pyNFS and RNM14

On Thu, Nov 30, 2017 at 01:13:30AM +0000, Thomas Haynes wrote:
> Bruce,
>
> [root@client1-ci-291117203803930 nfs4.1]# ./testserver.py 172.29.53.145:/ --verbose --outfile=/tmp/pynfs4.1.out --minorversion=2 --maketree RNM14
> Could not find gssapi module, proceeding without
> INFO :rpc.poll:got connection from ('127.0.0.1', 55390), assigned to fd=5
> INFO :rpc.thread:Called connect(('172.29.53.145', 2049))
> INFO :rpc.poll:Adding 6 generated by another thread
> INFO :test.env:Created client to 172.29.53.145, 2049
> INFO :test.env:Called do_readdir()
> INFO :test.env:do_readdir() = []
> RNM14 st_rename.testFileToDir : RUNNING
> RNM14 st_rename.testFileToDir : FAILURE
> RENAME file into existing dir should return
> NFS4ERR_EXIST or NFS4ERR_ISDIR, instead got
> NFS4ERR_SERVERFAULT
> INFO :test.env:Called do_readdir()
> INFO :test.env:do_readdir() = [entry4(cookie=418L, name='RNM14_1512003093', attrs={})]
> INFO :test.env:Called do_readdir()
> INFO :test.env:do_readdir() = [entry4(cookie=419L, name='dir', attrs={}), entry4(cookie=420L, name='file', attrs={})]
> **************************************************
> RNM14 st_rename.testFileToDir : FAILURE
> RENAME file into existing dir should return
> NFS4ERR_EXIST or NFS4ERR_ISDIR, instead got
> NFS4ERR_SERVERFAULT
> **************************************************
> Command line asked for 1 of 280 tests
> Of those: 0 Skipped, 1 Failed, 0 Warned, 0 Passed
>
> Yet according to RFC 5661, Section 15.2 (table 6), NFS4ERR_ISDIR
> is not an allowed error code for RENAME.
>
> According to POSIX rename() it is an allowed error code. I believe
> the assumption is that the client should catch this case first?
>
> Anyway, does the knfsd return NFS4ERR_ISDIR in this test case?

I just checked--yes. Looking at git history, I find commit
2a6cf944c2f8, which says


nfsd4: don't remap EISDIR errors in rename

We're going out of our way here to remap an error to make rfc 3530
happy--but the rfc itself (nor rfc 1813, which has similar language)
gives no justification. And disagrees with local filesystem behavior,
with Linux and posix man pages, and knfsd's implemented behavior for v2
and v3.

And the documented behavior seems better, in that it gives a little more
information--you could implement the 3530 behavior using the posix
behavior, but not the other way around.

Also, the Linux client makes no attempt to remap this error in the v4
case, so it can end up just returning EEXIST to the application in a
case where it should return EISDIR.

So honestly I think the rfc's are just buggy here--or in any case it
doesn't see worth the trouble to remap this error.

--b.

2017-11-30 16:56:05

by Thomas Haynes

[permalink] [raw]
Subject: Re: pyNFS and RNM14

DQoNCj4gT24gTm92IDMwLCAyMDE3LCBhdCA4OjI1IEFNLCBKLiBCcnVjZSBGaWVsZHMgPGJmaWVs
ZHNAcmVkaGF0LmNvbT4gd3JvdGU6DQo+IA0KPiBPbiBUaHUsIE5vdiAzMCwgMjAxNyBhdCAwMTox
MzozMEFNICswMDAwLCBUaG9tYXMgSGF5bmVzIHdyb3RlOg0KPj4gQnJ1Y2UsDQo+PiANCj4+IFty
b290QGNsaWVudDEtY2ktMjkxMTE3MjAzODAzOTMwIG5mczQuMV0jIC4vdGVzdHNlcnZlci5weSAx
NzIuMjkuNTMuMTQ1Oi8gLS12ZXJib3NlIC0tb3V0ZmlsZT0vdG1wL3B5bmZzNC4xLm91dCAtLW1p
bm9ydmVyc2lvbj0yICAtLW1ha2V0cmVlIFJOTTE0DQo+PiBDb3VsZCBub3QgZmluZCBnc3NhcGkg
bW9kdWxlLCBwcm9jZWVkaW5nIHdpdGhvdXQNCj4+IElORk8gICA6cnBjLnBvbGw6Z290IGNvbm5l
Y3Rpb24gZnJvbSAoJzEyNy4wLjAuMScsIDU1MzkwKSwgYXNzaWduZWQgdG8gZmQ9NQ0KPj4gSU5G
TyAgIDpycGMudGhyZWFkOkNhbGxlZCBjb25uZWN0KCgnMTcyLjI5LjUzLjE0NScsIDIwNDkpKQ0K
Pj4gSU5GTyAgIDpycGMucG9sbDpBZGRpbmcgNiBnZW5lcmF0ZWQgYnkgYW5vdGhlciB0aHJlYWQN
Cj4+IElORk8gICA6dGVzdC5lbnY6Q3JlYXRlZCBjbGllbnQgdG8gMTcyLjI5LjUzLjE0NSwgMjA0
OQ0KPj4gSU5GTyAgIDp0ZXN0LmVudjpDYWxsZWQgZG9fcmVhZGRpcigpDQo+PiBJTkZPICAgOnRl
c3QuZW52OmRvX3JlYWRkaXIoKSA9IFtdDQo+PiBSTk0xNCAgICBzdF9yZW5hbWUudGVzdEZpbGVU
b0RpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFJVTk5JTkcNCj4+IFJOTTE0
ICAgIHN0X3JlbmFtZS50ZXN0RmlsZVRvRGlyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogRkFJTFVSRQ0KPj4gICAgICAgICAgIFJFTkFNRSBmaWxlIGludG8gZXhpc3RpbmcgZGly
IHNob3VsZCByZXR1cm4NCj4+ICAgICAgICAgICBORlM0RVJSX0VYSVNUIG9yIE5GUzRFUlJfSVNE
SVIsIGluc3RlYWQgZ290DQo+PiAgICAgICAgICAgTkZTNEVSUl9TRVJWRVJGQVVMVA0KPj4gSU5G
TyAgIDp0ZXN0LmVudjpDYWxsZWQgZG9fcmVhZGRpcigpDQo+PiBJTkZPICAgOnRlc3QuZW52OmRv
X3JlYWRkaXIoKSA9IFtlbnRyeTQoY29va2llPTQxOEwsIG5hbWU9J1JOTTE0XzE1MTIwMDMwOTMn
LCBhdHRycz17fSldDQo+PiBJTkZPICAgOnRlc3QuZW52OkNhbGxlZCBkb19yZWFkZGlyKCkNCj4+
IElORk8gICA6dGVzdC5lbnY6ZG9fcmVhZGRpcigpID0gW2VudHJ5NChjb29raWU9NDE5TCwgbmFt
ZT0nZGlyJywgYXR0cnM9e30pLCBlbnRyeTQoY29va2llPTQyMEwsIG5hbWU9J2ZpbGUnLCBhdHRy
cz17fSldDQo+PiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKg0KPj4gUk5NMTQgICAgc3RfcmVuYW1lLnRlc3RGaWxlVG9EaXIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiBGQUlMVVJFDQo+PiAgICAgICAgICAgUkVOQU1FIGZpbGUgaW50
byBleGlzdGluZyBkaXIgc2hvdWxkIHJldHVybg0KPj4gICAgICAgICAgIE5GUzRFUlJfRVhJU1Qg
b3IgTkZTNEVSUl9JU0RJUiwgaW5zdGVhZCBnb3QNCj4+ICAgICAgICAgICBORlM0RVJSX1NFUlZF
UkZBVUxUDQo+PiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKg0KPj4gQ29tbWFuZCBsaW5lIGFza2VkIGZvciAxIG9mIDI4MCB0ZXN0cw0KPj4gT2YgdGhv
c2U6IDAgU2tpcHBlZCwgMSBGYWlsZWQsIDAgV2FybmVkLCAwIFBhc3NlZA0KPj4gDQo+PiBZZXQg
YWNjb3JkaW5nIHRvIFJGQyA1NjYxLCBTZWN0aW9uIDE1LjIgKHRhYmxlIDYpLCBORlM0RVJSX0lT
RElSDQo+PiBpcyBub3QgYW4gYWxsb3dlZCBlcnJvciBjb2RlIGZvciBSRU5BTUUuDQo+PiANCj4+
IEFjY29yZGluZyB0byBQT1NJWCByZW5hbWUoKSBpdCBpcyBhbiBhbGxvd2VkIGVycm9yIGNvZGUu
IEkgYmVsaWV2ZQ0KPj4gdGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgY2xpZW50IHNob3VsZCBj
YXRjaCB0aGlzIGNhc2UgZmlyc3Q/DQo+PiANCj4+IEFueXdheSwgZG9lcyB0aGUga25mc2QgcmV0
dXJuIE5GUzRFUlJfSVNESVIgaW4gdGhpcyB0ZXN0IGNhc2U/DQo+IA0KPiBJIGp1c3QgY2hlY2tl
ZC0teWVzLiAgTG9va2luZyBhdCBnaXQgaGlzdG9yeSwgSSBmaW5kIGNvbW1pdA0KPiAyYTZjZjk0
NGMyZjgsIHdoaWNoIHNheXMNCj4gDQo+IA0KPiAgICBuZnNkNDogZG9uJ3QgcmVtYXAgRUlTRElS
IGVycm9ycyBpbiByZW5hbWUNCj4gDQo+ICAgIFdlJ3JlIGdvaW5nIG91dCBvZiBvdXIgd2F5IGhl
cmUgdG8gcmVtYXAgYW4gZXJyb3IgdG8gbWFrZSByZmMgMzUzMA0KPiAgICBoYXBweS0tYnV0IHRo
ZSByZmMgaXRzZWxmIChub3IgcmZjIDE4MTMsIHdoaWNoIGhhcyBzaW1pbGFyIGxhbmd1YWdlKQ0K
PiAgICBnaXZlcyBubyBqdXN0aWZpY2F0aW9uLiAgQW5kIGRpc2FncmVlcyB3aXRoIGxvY2FsIGZp
bGVzeXN0ZW0gYmVoYXZpb3IsDQo+ICAgIHdpdGggTGludXggYW5kIHBvc2l4IG1hbiBwYWdlcywg
YW5kIGtuZnNkJ3MgaW1wbGVtZW50ZWQgYmVoYXZpb3IgZm9yIHYyDQo+ICAgIGFuZCB2My4NCj4g
DQo+ICAgIEFuZCB0aGUgZG9jdW1lbnRlZCBiZWhhdmlvciBzZWVtcyBiZXR0ZXIsIGluIHRoYXQg
aXQgZ2l2ZXMgYSBsaXR0bGUgbW9yZQ0KPiAgICBpbmZvcm1hdGlvbi0teW91IGNvdWxkIGltcGxl
bWVudCB0aGUgMzUzMCBiZWhhdmlvciB1c2luZyB0aGUgcG9zaXgNCj4gICAgYmVoYXZpb3IsIGJ1
dCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuDQo+IA0KPiAgICBBbHNvLCB0aGUgTGludXggY2xp
ZW50IG1ha2VzIG5vIGF0dGVtcHQgdG8gcmVtYXAgdGhpcyBlcnJvciBpbiB0aGUgdjQNCj4gICAg
Y2FzZSwgc28gaXQgY2FuIGVuZCB1cCBqdXN0IHJldHVybmluZyBFRVhJU1QgdG8gdGhlIGFwcGxp
Y2F0aW9uIGluIGENCj4gICAgY2FzZSB3aGVyZSBpdCBzaG91bGQgcmV0dXJuIEVJU0RJUi4NCj4g
DQo+ICAgIFNvIGhvbmVzdGx5IEkgdGhpbmsgdGhlIHJmYydzIGFyZSBqdXN0IGJ1Z2d5IGhlcmUt
LW9yIGluIGFueSBjYXNlIGl0DQo+ICAgIGRvZXNuJ3Qgc2VlIHdvcnRoIHRoZSB0cm91YmxlIHRv
IHJlbWFwIHRoaXMgZXJyb3IuDQo+IA0KPiAtLWIuDQoNClJpZ2h0LCBidXQgbXkgaXNzdWUgaXMg
dGhhdCBJIG5lZWQgdG8gaGF2ZSBteSBzZXJ2ZXIgbGV0IEVJU0RJUiB0aHJvdWdoIGluIHRoaXMN
CmNhc2UuDQoNCknigJltIGluY2xpbmVkIHRvIGZpbGUgYW4gZXJyYXRhLCBJ4oCZbGwganVzdCBo
YXZlIHRvIGdldCB0byBpdC4gOi0pDQoNCg==