]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
nfs: handle rpc errors for mount calls
authorThomas RIENOESSL <thomas.rienoessl@bachmann.info>
Fri, 10 Mar 2023 09:51:54 +0000 (10:51 +0100)
committerTom Rini <trini@konsulko.com>
Fri, 5 May 2023 21:48:44 +0000 (17:48 -0400)
Signed-off-by: Thomas RIENOESSL <thomas.rienoessl@bachmann.info>
net/nfs.c

index a2749bae82210498fb0794c3eb24c25a25d64b6a..21cae52f3586adda6a32da6fd6afddbc3ba2c078 100644 (file)
--- a/net/nfs.c
+++ b/net/nfs.c
@@ -524,6 +524,7 @@ static int rpc_lookup_reply(int prog, uchar *pkt, unsigned len)
 static int nfs_mount_reply(uchar *pkt, unsigned len)
 {
        struct rpc_t rpc_pkt;
+       int ret;
 
        debug("%s\n", __func__);
 
@@ -534,11 +535,9 @@ static int nfs_mount_reply(uchar *pkt, unsigned len)
        else if (ntohl(rpc_pkt.u.reply.id) < rpc_id)
                return -NFS_RPC_DROP;
 
-       if (rpc_pkt.u.reply.rstatus  ||
-           rpc_pkt.u.reply.verifier ||
-           rpc_pkt.u.reply.astatus  ||
-           rpc_pkt.u.reply.data[0])
-               return -1;
+       ret = rpc_handle_error(&rpc_pkt);
+       if (ret)
+               return ret;
 
        fs_mounted = 1;
        /*  NFSv2 and NFSv3 use same structure */
@@ -794,6 +793,10 @@ static void nfs_handler(uchar *pkt, unsigned dest, struct in_addr sip,
                        /* just to be sure... */
                        nfs_state = STATE_UMOUNT_REQ;
                        nfs_send();
+               } else if (reply == -NFS_RPC_PROG_MISMATCH &&
+                          choosen_nfs_version != NFS_UNKOWN) {
+                       nfs_state = STATE_MOUNT_REQ;
+                       nfs_send();
                } else {
                        nfs_state = STATE_LOOKUP_REQ;
                        nfs_send();