|
@@ -7518,6 +7518,7 @@ int nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
|
|
|
unsigned int savep;
|
|
|
uint32_t bitmap[3] = {0};
|
|
|
uint32_t len;
|
|
|
+ uint64_t new_cookie;
|
|
|
__be32 *p = xdr_inline_decode(xdr, 4);
|
|
|
if (unlikely(!p))
|
|
|
goto out_overflow;
|
|
@@ -7534,8 +7535,7 @@ int nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
|
|
|
p = xdr_inline_decode(xdr, 12);
|
|
|
if (unlikely(!p))
|
|
|
goto out_overflow;
|
|
|
- entry->prev_cookie = entry->cookie;
|
|
|
- p = xdr_decode_hyper(p, &entry->cookie);
|
|
|
+ p = xdr_decode_hyper(p, &new_cookie);
|
|
|
entry->len = be32_to_cpup(p);
|
|
|
|
|
|
p = xdr_inline_decode(xdr, entry->len);
|
|
@@ -7569,6 +7569,9 @@ int nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
|
|
|
if (entry->fattr->valid & NFS_ATTR_FATTR_TYPE)
|
|
|
entry->d_type = nfs_umode_to_dtype(entry->fattr->mode);
|
|
|
|
|
|
+ entry->prev_cookie = entry->cookie;
|
|
|
+ entry->cookie = new_cookie;
|
|
|
+
|
|
|
return 0;
|
|
|
|
|
|
out_overflow:
|