The Linux kernel's NFSd changed [1] its response code on access of symbolic links to be RFC 1094 compliant. When a symbolic link is encountered in NFSv2 mode it returns no longer NFSERR_INVAL (22) but NFSERR_IO (5).
This change from 7.0-rc1 got backported to different other versions like 6.12.75 and 6.18.14. Therefore, U-Boot needs to handle this new response code. [1] https://lore.kernel.org/all/[email protected]/ Signed-off-by: Jörg Sommer <[email protected]> --- There's a discussion going how to hande this in the kernel: https://lore.kernel.org/all/[email protected]/ net/nfs-common.c | 3 ++- net/nfs-common.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/net/nfs-common.c b/net/nfs-common.c index 637fcfd9bb8..ee24cd07196 100644 --- a/net/nfs-common.c +++ b/net/nfs-common.c @@ -855,7 +855,8 @@ void nfs_pkt_recv(uchar *pkt, unsigned int len) if (rlen > 0) { nfs_offset += rlen; nfs_send(); - } else if ((rlen == -NFSERR_ISDIR) || (rlen == -NFSERR_INVAL)) { + } else if ((rlen == -NFSERR_ISDIR) || (rlen == -NFSERR_INVAL) || + (rlen == -NFSERR_IO)) { /* symbolic link */ nfs_state = STATE_READLINK_REQ; nfs_send(); diff --git a/net/nfs-common.h b/net/nfs-common.h index a19b98b7b1f..04671d3c87a 100644 --- a/net/nfs-common.h +++ b/net/nfs-common.h @@ -23,6 +23,7 @@ #define NFSERR_PERM 1 #define NFSERR_NOENT 2 +#define NFSERR_IO 5 #define NFSERR_ACCES 13 #define NFSERR_ISDIR 21 #define NFSERR_INVAL 22 -- 2.55.0
