The patch is in Linus's tree, so you should be able to try it with the weekly kernel updates for various distros which have download sites for more current kernel packages (Ubuntu, Fedora etc.) or build kernel yourself if you prefer. To get it into stable we will need to send a followup email as described in their process guide below: "send an email to stable@xxxxxxxxxxxxxxx containing the subject of the patch, the commit ID, why you think it should be applied" but some of the distros will apply it automatically (it is still helpful to send the email to stable as a reminder) On Sat, Nov 13, 2021 at 9:37 AM Julian Sikorski <belegdol@xxxxxxxxx> wrote: > > Am 10.11.21 um 12:23 schrieb Julian Sikorski: > > W dniu 10.11.2021 o 08:56, Steve French pisze: > >> Fix for the kernel client attached > >> > >> > >> On Tue, Nov 9, 2021 at 6:54 PM Jeremy Allison <jra@xxxxxxxxx> wrote: > >>> > >>> On Tue, Nov 09, 2021 at 10:26:59AM +0100, Julian Sikorski wrote: > >>>> Am 09.11.21 um 09:10 schrieb Steve French: > >>>>> 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); > >>>>> } > >>>>> > >>>> > >>>> I can confirm this fails on my machine without nostrictsync: > >>>> > >>>> $ ./test > >>>> > >>>> fsync(): Permission denied > >>>> > >>>> read fsync rc=-1, write fsync rc=0, close rc=0, RO close rc=0 > >>>> > >>>> and works with nostrictsync: > >>>> > >>>> $ ./test > >>>> > >>>> read fsync rc=0, write fsync rc=0, close rc=0, RO close rc=0 > >>>> > >>>> So is the bug in the Linux kernel? > >>> > >>> Yes, it's in the kernel cifsfs module which is forwarding an > >>> SMB_FLUSH request > >>> (which the spec says must fail on a non-writable handle) to > >>> a handle opened as non-writable. Steve hopefully will fix :-). > >> > >> > >> > > Thank you. I can confirm that 5.15.1 kernel with this patch applied [1] > > works both with the test case you provided earlier as well as with mock > > chainbuilds without the need for the nostrictsync mount option. Fedora > > kernel-5.14.16-301.fc35.x86_64 was failing without it. > > > > Tested-by: Julian Sikorski <belegdol@xxxxxxxxx> > > > > Best regards, > > Julian > > > > [1] https://gitlab.com/belegdol/kernel-ark/-/commits/fedora-5.15-cifs-fix/ > > Hi, > > may I ask what the usual process of getting the patch into the Linus's > tree and to the stable branches is? If it takes longer, I am going to go > back to nostrictsync for now. > > Best regards, > Julian -- Thanks, Steve