fsync bug

Christopher Faylor cgf-use-the-mailinglist-please@cygwin.com
Thu Sep 22 14:58:00 GMT 2011


On Wed, Sep 21, 2011 at 03:07:21PM -0600, Eric Blake wrote:
>On 09/21/2011 02:54 PM, Christopher Faylor wrote:
>> On Wed, Sep 21, 2011 at 02:43:21PM -0600, Eric Blake wrote:
>>> fsync() is required to work on read-only fds (in theory, you can sync
>>> the atime metadata, which is a write operation triggered by a read-only
>>> fd).  But cygwin rejects this program, which works on Linux:
>>>
>>> $ cat foo.c
>>> #include<errno.h>
>>> #include<unistd.h>
>>> #include<stdio.h>
>>> #include<stdlib.h>
>>> #include<assert.h>
>>> #include<fcntl.h>
>>> int main (void)
>>> {
>>>    int fd = open("file", O_CREAT|O_EXCL|O_WRONLY, 0600);
>>>    if (fd<  0)
>>>      return 1;
>>>    if (close(fd))
>>>      return 2;
>>>    fd = open("file", O_RDONLY);
>>>    if (fd<  0)
>>>      return 3;
>>>    if (fsync(fd))
>>>      return 4;
>>>    if (unlink("file"))
>>>      return 5;
>>>    puts("success");
>>>    return 0;
>>> }
>>> $ rm -f file&&  ./foo; echo $?
>>> 4
>>
>> http://msdn.microsoft.com/en-us/library/aa364439%28VS.85%29.aspx
>
>So what's wrong with making fsync() a no-op for read-only fds, on the 
>grounds that windows doesn't give us a way to flush that data, so the 
>best emulation we can do is by ignoring the request rather than 
>propagating a spurious failure back to the user?

It's hard to see how lying that fsync worked would satisfy the
requirements to write metadata.  But, then, it isn't clear that this is
even an issue on Windows.

But, in any event, you know where the source code is.

cgf

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list