summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2023-11-01 22:03:28 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-12-03 07:31:22 +0100
commitb5d50c6a609da672e0606a2791102e1eed440c8b (patch)
tree8da324b4d4155ca952610dfa30ccf3b4a178feca
parent84ebfbed3ae055e516e8e7204697207b60d7898d (diff)
downloadlinux-b5d50c6a609da672e0606a2791102e1eed440c8b.tar.gz
linux-b5d50c6a609da672e0606a2791102e1eed440c8b.tar.bz2
linux-b5d50c6a609da672e0606a2791102e1eed440c8b.zip
afs: Fix file locking on R/O volumes to operate in local mode
[ 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>
-rw-r--r--fs/afs/super.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/afs/super.c b/fs/afs/super.c
index 34c68724c98b..910e73bb5a08 100644
--- a/fs/afs/super.c
+++ b/fs/afs/super.c
@@ -406,6 +406,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;