]> git.baikalelectronics.ru Git - kernel.git/commitdiff
coda: check for async upcall request using local state
authorJan Harkes <jaharkes@cs.cmu.edu>
Tue, 9 Nov 2021 02:34:33 +0000 (18:34 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 9 Nov 2021 18:02:51 +0000 (10:02 -0800)
Originally flagged by Smatch because the code implicitly assumed outSize
is not NULL for non-async upcalls because of a flag that was (not) set in
req->uc_flags.

However req->uc_flags field is in shared state and although the current
code will not allow it to be changed before the async request check the
code is more robust when it tests against the local outSize variable.

Link: https://lkml.kernel.org/r/20210908140308.18491-3-jaharkes@cs.cmu.edu
Signed-off-by: Jan Harkes <jaharkes@cs.cmu.edu>
Cc: Alex Shi <alex.shi@linux.alibaba.com>
Cc: Jing Yangyang <jing.yangyang@zte.com.cn>
Cc: Xin Tan <tanxin.ctf@gmail.com>
Cc: Xiyu Yang <xiyuyang19@fudan.edu.cn>
Cc: Zeal Robot <zealci@zte.com.cn>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/coda/upcall.c

index eb3b1898da462afd84c62bd9646eb968d4c84225..59f6cfd06f96a59817fc77fb0753fa2bc2e2db36 100644 (file)
@@ -744,7 +744,8 @@ static int coda_upcall(struct venus_comm *vcp,
        list_add_tail(&req->uc_chain, &vcp->vc_pending);
        wake_up_interruptible(&vcp->vc_waitq);
 
-       if (req->uc_flags & CODA_REQ_ASYNC) {
+       /* We can return early on asynchronous requests */
+       if (outSize == NULL) {
                mutex_unlock(&vcp->vc_mutex);
                return 0;
        }