NFS: advance nfs_entry cookie only after decoding completes successfully
authorFrank Sorenson <sorenson@redhat.com>
Mon, 2 Apr 2018 21:12:45 +0000 (16:12 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Tue, 10 Apr 2018 20:06:22 +0000 (16:06 -0400)
commit98de9ce6f6660d02aa72d7b9b17696fa68a2ed9b
tree982362bc07561f05a8bd60385b40fe29c8e713ae
parentdbc898ae107104ef49fd977a593e521fcefab5aa
NFS: advance nfs_entry cookie only after decoding completes successfully

In nfs[34]_decode_dirent, the cookie is advanced as soon as it is
read, but decoding may still fail later in the function, returning
an error.  Because the cookie has been advanced, the failing entry
is not re-requested from the server, resulting in a missing directory
entry.

In addition, nfs v3 and v4 read the cookie at different locations
in the xdr_stream, so the behavior of the two can be inconsistent.

Fix these by reading the cookie into a temporary variable, and
only advancing the cookie once the entire entry has been decoded
from the xdr_stream successfully.

Signed-off-by: Frank Sorenson <sorenson@redhat.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
fs/nfs/nfs3xdr.c
fs/nfs/nfs4xdr.c