int page_no, ret;
        struct rpcrdma_read_chunk *ch;
        u32 handle, page_offset, byte_count;
+       u32 position;
        u64 rs_offset;
        bool last;
 
        head->arg.len = rqstp->rq_arg.len;
        head->arg.buflen = rqstp->rq_arg.buflen;
 
-       page_no = 0; page_offset = 0;
-       for (ch = (struct rpcrdma_read_chunk *)&rmsgp->rm_body.rm_chunks[0];
-            ch->rc_discrim != 0; ch++) {
-               handle = be32_to_cpu(ch->rc_target.rs_handle);
+       ch = (struct rpcrdma_read_chunk *)&rmsgp->rm_body.rm_chunks[0];
+       position = be32_to_cpu(ch->rc_position);
+
+       ret = 0;
+       page_no = 0;
+       page_offset = 0;
+       for (; ch->rc_discrim != xdr_zero; ch++) {
+               if (be32_to_cpu(ch->rc_position) != position)
+                       goto err;
+
+               handle = be32_to_cpu(ch->rc_target.rs_handle),
                byte_count = be32_to_cpu(ch->rc_target.rs_length);
                xdr_decode_hyper((__be32 *)&ch->rc_target.rs_offset,
                                 &rs_offset);