fs/nfs/nfs42xdr.c:1131 decode_read_plus() warn: missing error code? 'status'

From: Dan Carpenter
Date: Mon May 22 2023 - 11:23:19 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 44c026a73be8038f03dbdeef028b642880cf1511
commit: d3b00a802c845a6021148ce2e669b5a0b5729959 NFS: Replace the READ_PLUS decoding code
config: microblaze-randconfig-m041-20230522 (https://download.01.org/0day-ci/archive/20230522/202305222209.6l5VM2lL-lkp@xxxxxxxxx/config)
compiler: microblaze-linux-gcc (GCC) 12.1.0

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Reported-by: Dan Carpenter <error27@xxxxxxxxx>
| Closes: https://lore.kernel.org/r/202305222209.6l5VM2lL-lkp@xxxxxxxxx/

New smatch warnings:
fs/nfs/nfs42xdr.c:1131 decode_read_plus() warn: missing error code? 'status'

Old smatch warnings:
fs/nfs/nfs4xdr.c:1194 encode_attrs() error: we previously assumed 'umask' could be null (see line 1103)

vim +/status +1131 fs/nfs/nfs42xdr.c

c567552612ece7 Anna Schumaker 2014-05-28 1108 static int decode_read_plus(struct xdr_stream *xdr, struct nfs_pgio_res *res)
c567552612ece7 Anna Schumaker 2014-05-28 1109 {
82f98c8b116bd7 Trond Myklebust 2020-12-08 1110 struct nfs_pgio_header *hdr =
82f98c8b116bd7 Trond Myklebust 2020-12-08 1111 container_of(res, struct nfs_pgio_header, res);
82f98c8b116bd7 Trond Myklebust 2020-12-08 1112 struct nfs_pgio_args *args = &hdr->args;
d3b00a802c845a Anna Schumaker 2022-07-21 1113 uint32_t segments;
d3b00a802c845a Anna Schumaker 2022-07-21 1114 struct read_plus_segment *segs;
bff049a3b5001e Anna Schumaker 2020-04-01 1115 int status, i;
d3b00a802c845a Anna Schumaker 2022-07-21 1116 char scratch_buf[16];
c567552612ece7 Anna Schumaker 2014-05-28 1117 __be32 *p;
c567552612ece7 Anna Schumaker 2014-05-28 1118
c567552612ece7 Anna Schumaker 2014-05-28 1119 status = decode_op_hdr(xdr, OP_READ_PLUS);
c567552612ece7 Anna Schumaker 2014-05-28 1120 if (status)
c567552612ece7 Anna Schumaker 2014-05-28 1121 return status;
c567552612ece7 Anna Schumaker 2014-05-28 1122
c567552612ece7 Anna Schumaker 2014-05-28 1123 p = xdr_inline_decode(xdr, 4 + 4);
c567552612ece7 Anna Schumaker 2014-05-28 1124 if (unlikely(!p))
c567552612ece7 Anna Schumaker 2014-05-28 1125 return -EIO;
c567552612ece7 Anna Schumaker 2014-05-28 1126
1ee6310119a5b4 Trond Myklebust 2020-12-08 1127 res->count = 0;
d3b00a802c845a Anna Schumaker 2022-07-21 1128 res->eof = be32_to_cpup(p++);
c567552612ece7 Anna Schumaker 2014-05-28 1129 segments = be32_to_cpup(p++);
c567552612ece7 Anna Schumaker 2014-05-28 1130 if (segments == 0)
d3b00a802c845a Anna Schumaker 2022-07-21 @1131 return status;

This looks like intentional? It's probably better to to do a literal
"return 0;" Makes the static checkers happy.

c567552612ece7 Anna Schumaker 2014-05-28 1132
d3b00a802c845a Anna Schumaker 2022-07-21 1133 segs = kmalloc_array(segments, sizeof(*segs), GFP_KERNEL);
d3b00a802c845a Anna Schumaker 2022-07-21 1134 if (!segs)
d3b00a802c845a Anna Schumaker 2022-07-21 1135 return -ENOMEM;
c567552612ece7 Anna Schumaker 2014-05-28 1136
d3b00a802c845a Anna Schumaker 2022-07-21 1137 xdr_set_scratch_buffer(xdr, &scratch_buf, 32);
d3b00a802c845a Anna Schumaker 2022-07-21 1138 status = -EIO;

This assignment is not used.

d3b00a802c845a Anna Schumaker 2022-07-21 1139 for (i = 0; i < segments; i++) {
d3b00a802c845a Anna Schumaker 2022-07-21 1140 status = decode_read_plus_segment(xdr, &segs[i]);
bff049a3b5001e Anna Schumaker 2020-04-01 1141 if (status < 0)
d3b00a802c845a Anna Schumaker 2022-07-21 1142 goto out;
bff049a3b5001e Anna Schumaker 2020-04-01 1143 }
c567552612ece7 Anna Schumaker 2014-05-28 1144
d3b00a802c845a Anna Schumaker 2022-07-21 1145 xdr_set_pagelen(xdr, xdr_align_size(args->count));
d3b00a802c845a Anna Schumaker 2022-07-21 1146 for (i = segments; i > 0; i--)
d3b00a802c845a Anna Schumaker 2022-07-21 @1147 res->count += process_read_plus_segment(xdr, args, res, &segs[i-1]);
d3b00a802c845a Anna Schumaker 2022-07-21 1148 status = 0;
d3b00a802c845a Anna Schumaker 2022-07-21 1149
c567552612ece7 Anna Schumaker 2014-05-28 1150 out:
d3b00a802c845a Anna Schumaker 2022-07-21 1151 kfree(segs);
d3b00a802c845a Anna Schumaker 2022-07-21 1152 return status;
c567552612ece7 Anna Schumaker 2014-05-28 1153 }

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki