|
|
@@ -330,13 +330,21 @@ static int decode_write_response(struct xdr_stream *xdr,
|
|
|
struct nfs42_write_res *res)
|
|
|
{
|
|
|
__be32 *p;
|
|
|
- int stateids;
|
|
|
|
|
|
p = xdr_inline_decode(xdr, 4 + 8 + 4);
|
|
|
if (unlikely(!p))
|
|
|
goto out_overflow;
|
|
|
|
|
|
- stateids = be32_to_cpup(p++);
|
|
|
+ /*
|
|
|
+ * We never use asynchronous mode, so warn if a server returns
|
|
|
+ * a stateid.
|
|
|
+ */
|
|
|
+ if (unlikely(*p != 0)) {
|
|
|
+ pr_err_once("%s: server has set unrequested "
|
|
|
+ "asynchronous mode\n", __func__);
|
|
|
+ return -EREMOTEIO;
|
|
|
+ }
|
|
|
+ p++;
|
|
|
p = xdr_decode_hyper(p, &res->count);
|
|
|
res->verifier.committed = be32_to_cpup(p);
|
|
|
return decode_verifier(xdr, &res->verifier.verifier);
|