From: "J. Bruce Fields" <bfields@fieldses.org>
To: NeilBrown <neilb@suse.de>
Cc: Steve Dickson <SteveD@redhat.com>,
NFS <linux-nfs@vger.kernel.org>,
Sean Finney <sean.finney@sonyericsson.com>
Subject: Re: [nfs-utils PATCH] mountd: fix checking for errors when exporting filesystems.
Date: Thu, 13 Dec 2012 10:53:47 -0500 [thread overview]
Message-ID: <20121213155347.GD24855@fieldses.org> (raw)
In-Reply-To: <20121213112529.06ebda22@notabene.brown>
On Thu, Dec 13, 2012 at 11:25:29AM +1100, NeilBrown wrote:
>
>
> commit 5604b35a61e22930873ffc4e9971002f578e7978
> nfs-utils: Increase the stdio file buffer size for procfs files
>
> changed writes to some sysfs files to be line buffered (_IOLBF) where
> they weren't before. While this probably makes sense, it introduced a bug.
>
> With fully buffered streams, you don't expect to get an error until you
> call fflush().
> With line buffered streams you can get the error from fprintf() et al.
>
> qword_eol() only tests the return from fflush(), not from fprintf(). Consequently
> errors were not noticed.
>
> One result of this is that if you export, with crossmnt, a filesystem underneath
> which are mounted non-exportable filesystems (e.g. /proc) then an 'ls -l' on the
> client will block indefinitely waiting for a meaningful 'yes' or 'no' from the
> server, but will never get one.
>
> This patch changes qword_eol to test both fprintf and fflush.
Makes sense to me.--b.
>
> Signed-off-by: NeilBrown <neilb@suse.de>
>
> diff --git a/support/nfs/cacheio.c b/support/nfs/cacheio.c
> index e641c45..61e07a8 100644
> --- a/support/nfs/cacheio.c
> +++ b/support/nfs/cacheio.c
> @@ -162,11 +162,16 @@ int qword_eol(FILE *f)
> {
> int err;
>
> - fprintf(f,"\n");
> - err = fflush(f);
> - if (err) {
> - xlog_warn("qword_eol: fflush failed: errno %d (%s)",
> + err = fprintf(f,"\n");
> + if (err < 0) {
> + xlog_warn("qword_eol: fprintf failed: errno %d (%s)",
> errno, strerror(errno));
> + } else {
> + err = fflush(f);
> + if (err) {
> + xlog_warn("qword_eol: fflush failed: errno %d (%s)",
> + errno, strerror(errno));
> + }
> }
> /*
> * We must send one line (and one line only) in a single write
next prev parent reply other threads:[~2012-12-13 15:53 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-13 0:25 [nfs-utils PATCH] mountd: fix checking for errors when exporting filesystems NeilBrown
2012-12-13 15:53 ` J. Bruce Fields [this message]
2012-12-17 21:45 ` Steve Dickson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20121213155347.GD24855@fieldses.org \
--to=bfields@fieldses.org \
--cc=SteveD@redhat.com \
--cc=linux-nfs@vger.kernel.org \
--cc=neilb@suse.de \
--cc=sean.finney@sonyericsson.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.