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: "J. Bruce Fields" <bfields@citi.umich.edu> Cc: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
0a725fc4d3
commit
4a4b88317a
1 changed files with 3 additions and 2 deletions
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue