Merge tag 'nfs-for-6.6-1' of git://git.linux-nfs.org/projects/anna/linux-nfs
[platform/kernel/linux-rpi.git] / include / linux / sunrpc / xdr.h
index 42f9d7e..5b4fb3c 100644 (file)
@@ -226,6 +226,7 @@ struct xdr_stream {
        struct kvec *iov;       /* pointer to the current kvec */
        struct kvec scratch;    /* Scratch buffer */
        struct page **page_ptr; /* pointer to the current page */
+       void *page_kaddr;       /* kmapped address of the current page */
        unsigned int nwords;    /* Remaining decode buffer length */
 
        struct rpc_rqst *rqst;  /* For debugging */
@@ -257,6 +258,7 @@ extern void xdr_init_decode(struct xdr_stream *xdr, struct xdr_buf *buf,
                            __be32 *p, struct rpc_rqst *rqst);
 extern void xdr_init_decode_pages(struct xdr_stream *xdr, struct xdr_buf *buf,
                struct page **pages, unsigned int len);
+extern void xdr_finish_decode(struct xdr_stream *xdr);
 extern __be32 *xdr_inline_decode(struct xdr_stream *xdr, size_t nbytes);
 extern unsigned int xdr_read_pages(struct xdr_stream *xdr, unsigned int len);
 extern void xdr_enter_page(struct xdr_stream *xdr, unsigned int len);
@@ -777,9 +779,7 @@ xdr_stream_decode_uint32_array(struct xdr_stream *xdr,
 
        if (unlikely(xdr_stream_decode_u32(xdr, &len) < 0))
                return -EBADMSG;
-       if (len > SIZE_MAX / sizeof(*p))
-               return -EBADMSG;
-       p = xdr_inline_decode(xdr, len * sizeof(*p));
+       p = xdr_inline_decode(xdr, size_mul(len, sizeof(*p)));
        if (unlikely(!p))
                return -EBADMSG;
        if (array == NULL)