[libvirt] [PATCH] iohelper: Don't report errors on special FDs
Michal Privoznik
mprivozn at redhat.com
Mon Nov 5 15:56:17 UTC 2012
On 05.11.2012 16:40, Eric Blake wrote:
> On 11/05/2012 07:54 AM, Michal Privoznik wrote:
>> Some FDs may not implement fdatasync() functionality, e.g.
>> pipes or stdout. In that case EINVAL or EROFS is returned.
>
> Don't mention 'stdout'. It is not an inherent property of fd 1 that it
> can't support fdatasync(); rather, it is a property of WHAT the fd is.
> You don't know if stdout is a pipe or a regular file (at least, not
> without an fstat()).
>
>
>> We don't want to fail then nor report any error.
>>
>> Reported-by: Christophe Fergeau <cfergeau at redhat.com>
>> ---
>>
>> I know that those two 'if-s' can be joined together but it just looks weird to me.
>>
>> src/util/iohelper.c | 7 +++++--
>> 1 files changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/util/iohelper.c b/src/util/iohelper.c
>> index 860e14a..b8c91aa 100644
>> --- a/src/util/iohelper.c
>> +++ b/src/util/iohelper.c
>> @@ -181,8 +181,11 @@ runIO(const char *path, int fd, int oflags, unsigned long long length)
>>
>> /* Ensure all data is written */
>> if (fdatasync(fdout) < 0) {
>> - virReportSystemError(errno, _("unable to fsync %s"), fdoutname);
>> - goto cleanup;
>> + if (errno != EINVAL && errno != EROFS) {
>
> We're highly unlikely to get EROFS this late in the game (we would have
> already failed at write()ing to stdout earlier). But going off the man
> page, I see why you did it:
>
> EROFS, EINVAL
> fd is bound to a special file which does not support
> synchro‐
> nization.
>
>
>> + /* fdatasync() may fail on some special FDs like stdout or pipes */
>
> Again, don't mention stdout. Mentioning just pipes is sufficient.
>
>> + virReportSystemError(errno, _("unable to fsync %s"), fdoutname);
>> + goto cleanup;
>> + }
>
> ACK if you clean up the comment and commit message.
Okay, cleaned up and pushed. Thanks.
Michal
More information about the libvir-list
mailing list