Steffen Daode Nurpmeso <sdao...@googlemail.com> added the comment: > > Even PEP 3151 won't help. > > I don't understand. If the syscall supposed to flush the disk's buffer > cache fails - be it fcntl() or sync_file_range() - I think the error > should be propagated, not silently ignored and replaced with another > syscall which doesn't have the same semantic. That's all.
I'm with you theoretically - of course errors should be propagated to users so that they can act accordingly. And this is exactly what the patches do, *unless* it is an error which is not produced by the native fsync(2) call: -- >8 -- ?0%0[steffen@sherwood tmp]$ cat t.c #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <string.h> #include <unistd.h> int main(void) { int r = fcntl(2, F_FULLFSYNC); fprintf(stderr, "1. %d: %d, %s\n", r, errno, strerror(errno)); errno = 0; r = fsync(2); fprintf(stderr, "2. %d: %d, %s\n", r, errno, strerror(errno)); return 0; } ?0%0[steffen@sherwood tmp]$ gcc -o t t.c && ./t 1. -1: 25, Inappropriate ioctl for device 2. 0: 0, Unknown error: 0 ?0%0[steffen@sherwood tmp]$ grep -F 25 /usr/include/sys/errno.h #define ENOTTY 25 /* Inappropriate ioctl for device */ -- >8 -- So in fact the patches do what is necessary to make the changed version act just as the plain systemcall. > > - I favour haypos fullsync() approach > Are you willing to update your patch accordingly? Both patches still apply onto the tip of friday noon: http://bugs.python.org/file22016/11877.9.diff, http://bugs.python.org/file22046/11877-standalone.1.diff. Again: i personally would favour os.fsync(fd, fullsync=True), because that is the only way to put reliability onto unaware facilities unaware (e.g. my S-Postman replaces os.fsync() with a special function so that reliability is injected in- and onto Python's mailbox.py, which calls plain os.fsync()), but i've been convinced that this is impossible to do. It seems to be impossible to change os.fsync() at all, because it has a standartized function prototype. So what do you mean? Shall i rewrite 11877-standalone.1.diff to always offer fullsync() whenever there is fsync()? This sounds to be a useful change, because testing hasattr() of the one would imply availability of the other. > > + Aaarrg! I'm a liar!! I lie about - data integrity!!! > Well, actually, some hard disks lie about this too :-) Yeah. But hey: "I feel save in New York City. I feel save in New York City." Nice weekend - and may the juice be with you! --Steffen Ciao, sdaoden(*)(gmail.com) ASCII ribbon campaign ( ) More nuclear fission plants against HTML e-mail X can serve more coloured and proprietary attachments / \ and sounding animations ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue11877> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com