]> git.itanic.dy.fi Git - linux-stable/commitdiff
afs: Fix file locking on R/O volumes to operate in local mode
authorDavid Howells <dhowells@redhat.com>
Wed, 1 Nov 2023 22:03:28 +0000 (22:03 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 Dec 2023 07:44:23 +0000 (08:44 +0100)
[ Upstream commit b590eb41be766c5a63acc7e8896a042f7a4e8293 ]

AFS doesn't really do locking on R/O volumes as fileservers don't maintain
state with each other and thus a lock on a R/O volume file on one
fileserver will not be be visible to someone looking at the same file on
another fileserver.

Further, the server may return an error if you try it.

Fix this by doing what other AFS clients do and handle filelocking on R/O
volume files entirely within the client and don't touch the server.

Fixes: 6c6c1d63c243 ("afs: Provide mount-time configurable byte-range file locking emulation")
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/afs/super.c

index eb04dcc543289887b79509a6473a46d182632588..554119068ea44582a6b8a49b870ec2dc84f26987 100644 (file)
@@ -391,6 +391,8 @@ static int afs_validate_fc(struct fs_context *fc)
                        return PTR_ERR(volume);
 
                ctx->volume = volume;
+               if (volume->type != AFSVL_RWVOL)
+                       ctx->flock_mode = afs_flock_mode_local;
        }
 
        return 0;