All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Ottens <kevin.ottens@enioka.com>
To: Andrew Bartlett <abartlet@samba.org>, Steve French <smfrench@gmail.com>
Cc: linux-cifs@vger.kernel.org, David Howells <dhowells@redhat.com>,
	Pavel Shilovsky <piastryyy@gmail.com>
Subject: Re: Different behavior of POSIX file locks depending on cache mode
Date: Thu, 22 Aug 2024 19:06:02 +0200	[thread overview]
Message-ID: <2720637.vYhyI6sBWr@wintermute> (raw)
In-Reply-To: <CAH2r5mt8oV5E4A7RDYr_PLXzDna_Xvg_i1n5bq1vXMY_Mi2=-g@mail.gmail.com>

Hello,

On Thursday 15 August 2024 22:47:21 CEST Steve French wrote:
> This (lock_test.cpp) was a nicely done test and turned out to be
> fairly easy fix (at least for the write path), and it does help your
> test (I will look at the read path next).   David also just reviewed
> it so will try to send up to mainline (and Cc: stable) fairly soon.
> See attached fix.
> 
> Thank you again for narrowing this down.   Your testing with other
> less common configs also helped fix two additional problems - SMB1
> bugs (these two important fixes went in mainline last month).   After
> I finish the patch for the read path I also will see if anything else
> missing in the SMB3.1.1 POSIX path (on client or server side - other
> than the known Samba server bug with QFSInfo).

Thanks a lot for all this. Very much appreciated!

Regards.
 
>     smb3: fix lock breakage for cached writes
> 
>     Mandatory locking is enforced for cached writes, which violates
>     default posix semantics, and also it is enforced inconsistently.
>     This apparently breaks recent versions of libreoffice, but can
>     also be demonstrated by opening a file twice from the same
>     client, locking it from handle one and writing to it from
>     handle two (which fails, returning EACCES).
> 
>     Since there was already a mount option "forcemandatorylock"
>     (which defaults to off), with this change only when the user
>     intentionally specifies "forcemandatorylock" on mount will we
>     break posix semantics on write to a locked range (ie we will
>     only fail the write in this case, if the user mounts with
>     "forcemandatorylock").
> 
>     Fixes: 85160e03a79e ("CIFS: Implement caching mechanism for
> mandatory brlocks")
> 
> On Sun, Jun 9, 2024 at 11:41 PM Andrew Bartlett <abartlet@samba.org> wrote:
> > (resend due spam rules on list)
> > 
> > Kia Ora Steve,
> > 
> > I'm working with Kevin on this, and I set up a clean environment with
> > the latest software to make sure this is all still an issue on current
> > software:
> > 
> > I was hoping to include the old SMB1 unix extensions in this test also,
> > but these seem unsupported in current kernels.  When did they go away?
> > 
> > Anyway, here is the data.  It certainly looks like an issue with the
> > SMB3 client, as only the client changes with the cache=none
> > 
> > Server is Samba 4.20.1 from Debian Sid.  Kernel is
> > Linux debian-sid-cifs-client 6.7.9-amd64 #1 SMP PREEMPT_DYNAMIC Debian
> > 6.7.9-2 (2024-03-13) x86_64 GNU/Linux
> > 
> > With SMB1 but not unix extensions (seems unsupported):
> > 
> > root@debian-sid-cifs-client:~# mount.cifs //192.168.122.234/testuser
> > mnt -o user=testuser,pass=pass,vers=1.0
> > root@debian-sid-cifs-client:~# cd mnt/
> > root@debian-sid-cifs-client:~/mnt# ../lock_test foo
> > Testing with foo
> > Got new file descriptor 3
> > Lock set: 1
> > Second file descriptor 4
> > Read from second fd: x count: 0
> > Third file descriptor 5
> > Wrote to third fd: 1
> > 
> > root@debian-sid-cifs-client:~# mount.cifs //192.168.122.234/testuser
> > mnt -o user=testuser,pass=penguin12#,vers=3.1.1,posix
> > root@debian-sid-cifs-client:~# cd mnt/
> > root@debian-sid-cifs-client:~/mnt# ../lock_test foo
> > Testing with foo
> > Got new file descriptor 3
> > Lock set: 1
> > Second file descriptor 4
> > Read from second fd: x count: -1
> > Third file descriptor 5
> > Wrote to third fd: -1
> > root@debian-sid-cifs-client:~# mount.cifs //192.168.122.234/testuser
> > mnt -o user=testuser,pass=penguin12#,vers=3.1.1,unix
> > 
> > root@debian-sid-cifs-client:~# mount.cifs //192.168.122.234/testuser
> > mnt -o user=testuser,pass=penguin12#,vers=3.1.1,unix,nobrl
> > root@debian-sid-cifs-client:~# cd mnt/
> > root@debian-sid-cifs-client:~/mnt# ../lock_test foo
> > Testing with foo
> > Got new file descriptor 3
> > Lock set: 1
> > Second file descriptor 4
> > Read from second fd: o count: 1
> > Third file descriptor 5
> > Wrote to third fd: 1
> > 
> > And with cache=none
> > 
> > root@debian-sid-cifs-client:~# mount.cifs //192.168.122.234/testuser
> > mnt -o user=testuser,pass=penguin12#,vers=3.1.1,posix,cache=none
> > root@debian-sid-cifs-client:~# cd mnt/
> > root@debian-sid-cifs-client:~/mnt# ../lock_test foo
> > Testing with foo
> > Got new file descriptor 3
> > Lock set: 1
> > Second file descriptor 4
> > Read from second fd: o count: 1
> > Third file descriptor 5
> > Wrote to third fd: 1
> > 
> > On Thu, 2024-05-23 at 11:12 -0500, Steve French wrote:
> > > What is the behavior with "nobrl" mount option? and what is the
> > > behavior when running with the POSIX extensions enabled (e.g. to
> > > current Samba or ksmbd adding "posix" to the mount options)
> > > 
> > > On Thu, May 23, 2024 at 11:08 AM Kevin Ottens <
> > > kevin.ottens@enioka.com
> > > 
> > > > wrote:
> > > > Hello,
> > > > 
> > > > I've been hunting down a bug exhibited by Libreoffice regarding
> > > > POSIX file
> > > > locks in conjunction with CIFS mounts. In short: just before
> > > > saving, it
> > > > reopens a file on which it already holds a file lock (via another
> > > > file
> > > > descriptor in the same process) in order to read from it to create
> > > > a backup
> > > > copy... but the read call fails.
> > > > 
> > > > I've been in discussion with Andrew Bartlett for a little while
> > > > regarding this
> > > > issue and, after exploring several venues, he advised me to send an
> > > > email to
> > > > this list in order to get more opinions about it.
> > > > 
> > > > The latest discovery we did was that the cache option on the
> > > > mountpoint seems
> > > > to impact the behavior of the POSIX file locks. I made a minimal
> > > > test
> > > > application (attached to this email) which basically does the
> > > > 
> > > > following:
> > > >  * open a file for read/write
> > > >  * set a POSIX write lock on the whole file
> > > >  * open the file a second time and try to read from it
> > > >  * open the file a third time and try to write to it
> > > > 
> > > > It assumes there is already some text in the file. Also, as it goes
> > > > it outputs
> > > > information about the calls.
> > > > 
> > > > The output I get is the following with cache=strict on the mount:
> > > > ---
> > > > Testing with /mnt/foo
> > > > Got new file descriptor 3
> > > > Lock set: 1
> > > > Second file descriptor 4
> > > > Read from second fd: x count: -1
> > > > Third file descriptor 5
> > > > Wrote to third fd: -1
> > > > ---
> > > > 
> > > > If I'm using cache=none:
> > > > ---
> > > > Testing with /mnt/foo
> > > > Got new file descriptor 3
> > > > Lock set: 1
> > > > Second file descriptor 4
> > > > Read from second fd: b count: 1
> > > > Third file descriptor 5
> > > > Wrote to third fd: 1
> > > > ---
> > > > 
> > > > That's the surprising behavior which prompted the email on this
> > > > list. Is it
> > > > somehow intended that the cache option would impact the semantic of
> > > > the file
> > > > locks? At least it caught me by surprise and I wouldn't expect such
> > > > a
> > > > difference in behavior.
> > > > 
> > > > Now, since the POSIX locks are process wide, I would have expected
> > > > to have the
> > > > output I'm getting for the "cache=none" case to be also the one I'm
> > > > getting
> > > > for the "cache=strict" case.
> > > > 
> > > > I'm looking forward to feedback on this one. I really wonder if we
> > > > missed
> > > > something obvious or if there is some kind of bug in the cifs
> > > > driver.
> > > > 
> > > > Regards.
> > > > --
> > > > Kévin Ottens
> > > > kevin.ottens@enioka.com
> > > > 
> > > > +33 7 57 08 95 13
> > 
> > --
> > 
> > Andrew Bartlett (he/him)       https://samba.org/~abartlet/
> > Samba Team Member (since 2001) https://samba.org
> > Samba Team Lead                https://catalyst.net.nz/services/samba
> > Catalyst.Net Ltd
> > 
> > Proudly developing Samba for Catalyst.Net Ltd - a Catalyst IT group
> > company
> > 
> > Samba Development and Support: https://catalyst.net.nz/services/samba
> > 
> > Catalyst IT - Expert Open Source Solutions
> > 
> > --
> > Andrew Bartlett (he/him)       https://samba.org/~abartlet/
> > Samba Team Member (since 2001) https://samba.org
> > Samba Team Lead                https://catalyst.net.nz/services/samba
> > Catalyst.Net Ltd
> > 
> > Proudly developing Samba for Catalyst.Net Ltd - a Catalyst IT group
> > company
> > 
> > Samba Development and Support: https://catalyst.net.nz/services/samba
> > 
> > Catalyst IT - Expert Open Source Solutions


-- 
Kévin Ottens
kevin.ottens@enioka.com
+33 7 57 08 95 13



  reply	other threads:[~2024-08-22 17:06 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-23 16:08 Different behavior of POSIX file locks depending on cache mode Kevin Ottens
2024-05-23 16:12 ` Steve French
2024-05-27 16:38   ` Kevin Ottens
2024-06-10  4:41   ` Andrew Bartlett
2024-06-10 20:05     ` Steve French
2024-06-10 20:50       ` Andrew Bartlett
     [not found]       ` <c6da3de7c205d40a41907874a0e6d26b6c8132fe.camel@samba.org>
2024-06-10 20:53         ` Steve French
2024-06-10 20:57           ` Andrew Bartlett
2024-06-10 21:19           ` Ralph Boehme
2024-06-10 22:49             ` Steve French
2024-06-10 22:53               ` Steve French
2024-06-24  4:54     ` Steve French
2024-06-25  6:00       ` Andrew Bartlett
2024-06-25  7:41         ` Kevin Ottens
2024-06-27 15:04           ` Kevin Ottens
2024-07-10  9:28             ` Andrew Bartlett
2024-07-11  2:03               ` Steve French
2024-07-11  4:20                 ` Andrew Bartlett
2024-08-15 20:47     ` Steve French
2024-08-22 17:06       ` Kevin Ottens [this message]
2024-09-01  4:48         ` Steve French

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2720637.vYhyI6sBWr@wintermute \
    --to=kevin.ottens@enioka.com \
    --cc=abartlet@samba.org \
    --cc=dhowells@redhat.com \
    --cc=linux-cifs@vger.kernel.org \
    --cc=piastryyy@gmail.com \
    --cc=smfrench@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.