READDIRPLUS3 and NFS3ERR_BAD_COOKIE
Subsystems (2)
Hi,
what is the client's behavior if NFS3ERR_BAD_COOKIE is replied by READDIRPLUS3 ?
I have this error when running bonnie++ on top of my (non knfsd) server. At this step bonnie++ readdirs all dentries and erase them. One of the readdir calls ends with NFS3ERR_BAD_COOKIE and immediatly after, the client is calling RMDIR3, without having removed any of the found dentries. Of course RMDIR3 replies NFS3ERR_NOT_EMPTY, but I do not understand why REMOVE is not called. It looks like the clients behaves that the directory is empty after having received NFS3ERR_BAD_COOKIE (that just an hypothesis, I am not just this is what actually happens). Do you have any idea ?
Regards
Philippe
T24gVGh1LCAyMDEyLTAzLTIyIGF0IDEzOjQ1ICswMTAwLCBERU5JRUwgUGhpbGlwcGUgd3JvdGU6 DQo+IEhpLA0KPiANCj4gd2hhdCBpcyB0aGUgY2xpZW50J3MgYmVoYXZpb3IgaWYgTkZTM0VSUl9C QURfQ09PS0lFIGlzIHJlcGxpZWQgYnkgDQo+IFJFQURESVJQTFVTMyA/DQo+IEkgaGF2ZSB0aGlz IGVycm9yIHdoZW4gcnVubmluZyBib25uaWUrKyBvbiB0b3Agb2YgbXkgKG5vbiBrbmZzZCkgc2Vy dmVyLiANCj4gQXQgdGhpcyBzdGVwIGJvbm5pZSsrIHJlYWRkaXJzIGFsbCBkZW50cmllcyBhbmQg ZXJhc2UgdGhlbS4gT25lIG9mIHRoZSANCj4gcmVhZGRpciBjYWxscyBlbmRzIHdpdGggTkZTM0VS Ul9CQURfQ09PS0lFIGFuZCBpbW1lZGlhdGx5IGFmdGVyLCB0aGUgDQo+IGNsaWVudCBpcyBjYWxs aW5nIFJNRElSMywgd2l0aG91dCBoYXZpbmcgcmVtb3ZlZCBhbnkgb2YgdGhlIGZvdW5kIA0KPiBk ZW50cmllcy4gT2YgY291cnNlIFJNRElSMyByZXBsaWVzIE5GUzNFUlJfTk9UX0VNUFRZLCBidXQg SSBkbyBub3QgDQo+IHVuZGVyc3RhbmQgd2h5IFJFTU9WRSBpcyBub3QgY2FsbGVkLiBJdCBsb29r cyBsaWtlIHRoZSBjbGllbnRzIGJlaGF2ZXMgDQo+IHRoYXQgdGhlIGRpcmVjdG9yeSBpcyBlbXB0 eSBhZnRlciBoYXZpbmcgcmVjZWl2ZWQgTkZTM0VSUl9CQURfQ09PS0lFIA0KPiAodGhhdCBqdXN0 IGFuIGh5cG90aGVzaXMsIEkgYW0gbm90IGp1c3QgdGhpcyBpcyB3aGF0IGFjdHVhbGx5IGhhcHBl bnMpLg0KPiBEbyB5b3UgaGF2ZSBhbnkgaWRlYSA/DQoNCkRvZXMgYm9ubmllKysgY2hlY2sgdGhl IHJldHVybiB2YWx1ZSBvZiByZWFkZGlyPyBUaGVyZSBpcyBubyBlYXN5IHdheQ0KZm9yIHRoZSBj bGllbnQgdG8gcmVjb3ZlciB3aGVuIHRoZSBzZXJ2ZXIgcmV0dXJucyBCQURfQ09PS0lFLCBzbyB3 ZQ0Kc2hvdWxkIGJlIHBhc3NpbmcgdGhhdCBlcnJvciBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbi4N Cg0KLS0gDQpUcm9uZCBNeWtsZWJ1c3QNCkxpbnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lcg0KDQpO ZXRBcHANClRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tDQp3d3cubmV0YXBwLmNvbQ0KDQo=
Quoted 4 lines · Trond
Does bonnie++ check the return value of readdir? There is no easy way for the client to recover when the server returns
BAD_COOKIE, so we should be passing that error back to the application
Thanks for your reply, Trond.
No, it does not. It uses the readdir() call that takes a directory as argument and returns a pointer to an array of struct dirents. When bad cookie is sent back to the application, which error will it be. I saw errno = 523 ? Is this correct ?
Regards
Philippe
T24gVGh1LCAyMDEyLTAzLTIyIGF0IDE4OjE0ICswMTAwLCBERU5JRUwgUGhpbGlwcGUgd3JvdGU6 DQo+IE15a2xlYnVzdCwgVHJvbmQgYSDDqWNyaXQgOg0KPiA+DQo+ID4gRG9lcyBib25uaWUrKyBj aGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIHJlYWRkaXI/IFRoZXJlIGlzIG5vIGVhc3kgd2F5DQo+ ID4gZm9yIHRoZSBjbGllbnQgdG8gcmVjb3ZlciB3aGVuIHRoZSBzZXJ2ZXIgcmV0dXJucyBCQURf Q09PS0lFLCBzbyB3ZQ0KPiA+IHNob3VsZCBiZSBwYXNzaW5nIHRoYXQgZXJyb3IgYmFjayB0byB0 aGUgYXBwbGljYXRpb24NCj4gVGhhbmtzIGZvciB5b3VyIHJlcGx5LCBUcm9uZC4NCj4gTm8sIGl0 IGRvZXMgbm90LiBJdCB1c2VzIHRoZSByZWFkZGlyKCkgY2FsbCB0aGF0IHRha2VzIGEgZGlyZWN0 b3J5IGFzIA0KPiBhcmd1bWVudCBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2Yg c3RydWN0IGRpcmVudHMuDQo+IFdoZW4gYmFkIGNvb2tpZSBpcyBzZW50IGJhY2sgdG8gdGhlIGFw cGxpY2F0aW9uLCB3aGljaCBlcnJvciB3aWxsIGl0IGJlLiANCj4gSSBzYXcgZXJybm8gPSA1MjMg PyBJcyB0aGlzIGNvcnJlY3QgPw0KDQpZZXMsIHRoYXQgc291bmRzIHJpZ2h0Lg0KDQotLSANClRy b25kIE15a2xlYnVzdA0KTGludXggTkZTIGNsaWVudCBtYWludGFpbmVyDQoNCk5ldEFwcA0KVHJv bmQuTXlrbGVidXN0QG5ldGFwcC5jb20NCnd3dy5uZXRhcHAuY29tDQoNCg==