2007-07-27 21:18:06

by J.Bruce Fields

[permalink] [raw]
Subject: [PATCH] knfsd: eliminate unnecessary -ENOENT returns on export downcalls

From: J. Bruce Fields <[email protected]>

A succesful downcall with a negative result (which indicates that the
given filesystem is not exported to the given user) should not return an
error.

Currently mountd is depending on stdio to write these downcalls. With
some versions of libc this appears to cause subsequent writes to attempt
to write all accumulated data (for which writes previously failed) along
with any new data. This can prevent the kernel from seeing responses to
later downcalls. Symptoms will be that nfsd fails to respond to certain
requests.

Signed-off-by: "J. Bruce Fields" <[email protected]>
---
fs/nfsd/export.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c
index 2d295dd..cba899a 100644
--- a/fs/nfsd/export.c
+++ b/fs/nfsd/export.c
@@ -564,9 +564,10 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen)

/* flags */
err = get_int(&mesg, &an_int);
- if (err == -ENOENT)
+ if (err == -ENOENT) {
+ err = 0;
set_bit(CACHE_NEGATIVE, &exp.h.flags);
- else {
+ } else {
if (err || an_int < 0) goto out;
exp.ex_flags= an_int;

--
1.5.3.rc2


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
NFS maillist - [email protected]
https://lists.sourceforge.net/lists/listinfo/nfs