Commit 4a4b8831 authored by J. Bruce Fields's avatar J. Bruce Fields Committed by Linus Torvalds

knfsd: eliminate unnecessary -ENOENT returns on export downcalls

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: default avatar"J. Bruce Fields" <bfields@citi.umich.edu>
Cc: Neil Brown <neilb@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 0a725fc4
...@@ -564,9 +564,10 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen) ...@@ -564,9 +564,10 @@ static int svc_export_parse(struct cache_detail *cd, char *mesg, int mlen)
/* flags */ /* flags */
err = get_int(&mesg, &an_int); err = get_int(&mesg, &an_int);
if (err == -ENOENT) if (err == -ENOENT) {
err = 0;
set_bit(CACHE_NEGATIVE, &exp.h.flags); set_bit(CACHE_NEGATIVE, &exp.h.flags);
else { } else {
if (err || an_int < 0) goto out; if (err || an_int < 0) goto out;
exp.ex_flags= an_int; exp.ex_flags= an_int;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment