]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
cifs: Fix caching to try to do open O_WRONLY as rdwr on server
authorDavid Howells <dhowells@redhat.com>
Tue, 2 Apr 2024 09:11:35 +0000 (10:11 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 10 Apr 2024 14:36:00 +0000 (16:36 +0200)
commit0fdada1ef5b10ea73bf618d0498723c7860b5be9
treeb6311ac9ccff24322ce8574d165a3eaccc4cde02
parent0f28afed9f9d71a3f97df94b9691ac49f49ec887
cifs: Fix caching to try to do open O_WRONLY as rdwr on server

[ Upstream commit e9e62243a3e2322cf639f653a0b0a88a76446ce7 ]

When we're engaged in local caching of a cifs filesystem, we cannot perform
caching of a partially written cache granule unless we can read the rest of
the granule.  This can result in unexpected access errors being reported to
the user.

Fix this by the following: if a file is opened O_WRONLY locally, but the
mount was given the "-o fsc" flag, try first opening the remote file with
GENERIC_READ|GENERIC_WRITE and if that returns -EACCES, try dropping the
GENERIC_READ and doing the open again.  If that last succeeds, invalidate
the cache for that file as for O_DIRECT.

Fixes: 70431bfd825d ("cifs: Support fscache indexing rewrite")
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Steve French <sfrench@samba.org>
cc: Shyam Prasad N <nspmangalore@gmail.com>
cc: Rohith Surabattula <rohiths.msft@gmail.com>
cc: Jeff Layton <jlayton@kernel.org>
cc: linux-cifs@vger.kernel.org
cc: netfs@lists.linux.dev
cc: linux-fsdevel@vger.kernel.org
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/smb/client/dir.c
fs/smb/client/file.c
fs/smb/client/fscache.h