On Tue, Nov 09, 2021 at 02:10:19AM -0600, Steve French wrote:
Yes - here is a trivial reproducer (excuse the ugly sample cut-n-paste) #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> int main(int argc, char *argv[]) { char *str = "Text to be added"; int fd, ret, fsyncrc, fsyncr_rc, openrc, closerc, close2rc; fd = creat("test.txt", S_IWUSR | S_IRUSR); if (fd < 0) { perror("creat()"); exit(1); } ret = write(fd, str, strlen(str)); if (ret < 0) { perror("write()"); exit(1); } openrc = open("test.txt", O_RDONLY); if (openrc < 0) { perror("creat()"); exit(1); } fsyncr_rc = fsync(openrc); if (fsyncr_rc < 0) perror("fsync()"); fsyncrc = fsync(fd); closerc = close(fd); close2rc = close(openrc); printf("read fsync rc=%d, write fsync rc=%d, close rc=%d, RO close rc=%d\n", fsyncr_rc, fsyncrc, closerc, close2rc); }
Yep, I expected such. cifsfs needs to keep track of open mode and silently eat fsync calls on non-writeable files/directory opens.