summaryrefslogtreecommitdiffstats
path: root/fs/afs/fsclient.c
diff options
context:
space:
mode:
authorDavid Howells2018-05-12 23:31:33 +0200
committerDavid Howells2018-05-14 16:15:18 +0200
commit68251f0a6818f3be19b1471f36c956ca97c1427d (patch)
tree1e4fb0cacb40aff37e9f0177a772c6509631afec /fs/afs/fsclient.c
parentafs: Fix afs_find_server search loop (diff)
downloadkernel-qcow2-linux-68251f0a6818f3be19b1471f36c956ca97c1427d.tar.gz
kernel-qcow2-linux-68251f0a6818f3be19b1471f36c956ca97c1427d.tar.xz
kernel-qcow2-linux-68251f0a6818f3be19b1471f36c956ca97c1427d.zip
afs: Fix whole-volume callback handling
It's possible for an AFS file server to issue a whole-volume notification that callbacks on all the vnodes in the file have been broken. This is done for R/O and backup volumes (which don't have per-file callbacks) and for things like a volume being taken offline. Fix callback handling to detect whole-volume notifications, to track it across operations and to check it during inode validation. Fixes: c435ee34551e ("afs: Overhaul the callback handling") Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'fs/afs/fsclient.c')
-rw-r--r--fs/afs/fsclient.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/afs/fsclient.c b/fs/afs/fsclient.c
index d16f26c6cdbe..b273e1d60478 100644
--- a/fs/afs/fsclient.c
+++ b/fs/afs/fsclient.c
@@ -261,7 +261,7 @@ static void xdr_decode_AFSCallBack(struct afs_call *call,
write_seqlock(&vnode->cb_lock);
- if (call->cb_break == (vnode->cb_break + cbi->server->cb_s_break)) {
+ if (call->cb_break == afs_cb_break_sum(vnode, cbi)) {
vnode->cb_version = ntohl(*bp++);
cb_expiry = ntohl(*bp++);
vnode->cb_type = ntohl(*bp++);