summaryrefslogtreecommitdiffstats
path: root/fs/afs/rxrpc.c
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2020-04-08 16:13:20 +0100
committerDavid Howells <dhowells@redhat.com>2020-05-31 15:19:51 +0100
commit38355eec6a7d2b8f2f313f9174736dc877744e59 (patch)
treec27c84a0214ef1025788181c9e4a0164dc414a78 /fs/afs/rxrpc.c
parent8230fd8217b7ea76f838ae88e4a5a8e54f37099f (diff)
downloadlinux-38355eec6a7d2b8f2f313f9174736dc877744e59.tar.gz
linux-38355eec6a7d2b8f2f313f9174736dc877744e59.tar.bz2
linux-38355eec6a7d2b8f2f313f9174736dc877744e59.zip
afs: Set error flag rather than return error from file status decode
Set a flag in the call struct to indicate an unmarshalling error rather than return and handle an error from the decoding of file statuses. This flag is checked on a successful return from the delivery function. Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'fs/afs/rxrpc.c')
-rw-r--r--fs/afs/rxrpc.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/afs/rxrpc.c b/fs/afs/rxrpc.c
index ab2962fff1fb..c84d571782d7 100644
--- a/fs/afs/rxrpc.c
+++ b/fs/afs/rxrpc.c
@@ -540,6 +540,8 @@ static void afs_deliver_to_call(struct afs_call *call)
ret = call->type->deliver(call);
state = READ_ONCE(call->state);
+ if (ret == 0 && call->unmarshalling_error)
+ ret = -EBADMSG;
switch (ret) {
case 0:
afs_queue_call_work(call);
@@ -963,5 +965,7 @@ noinline int afs_protocol_error(struct afs_call *call, int error,
enum afs_eproto_cause cause)
{
trace_afs_protocol_error(call, error, cause);
+ if (call)
+ call->unmarshalling_error = true;
return error;
}