Merge tag 'nfs-for-4.17-1' of git://git.linux-nfs.org/projects/anna/linux-nfs
[linux-2.6-microblaze.git] / net / 9p / client.c
index b433aff..21e6df1 100644 (file)
@@ -190,7 +190,9 @@ static int parse_opts(char *opts, struct p9_client *clnt)
                                p9_debug(P9_DEBUG_ERROR,
                                         "problem allocating copy of trans arg\n");
                                goto free_and_return;
-                        }
+                       }
+
+                       v9fs_put_trans(clnt->trans_mod);
                        clnt->trans_mod = v9fs_get_trans_by_name(s);
                        if (clnt->trans_mod == NULL) {
                                pr_info("Could not find request transport: %s\n",
@@ -226,6 +228,7 @@ static int parse_opts(char *opts, struct p9_client *clnt)
        }
 
 free_and_return:
+       v9fs_put_trans(clnt->trans_mod);
        kfree(tmp_options);
        return ret;
 }
@@ -769,7 +772,7 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...)
        if (err < 0) {
                if (err != -ERESTARTSYS && err != -EFAULT)
                        c->status = Disconnected;
-               goto reterr;
+               goto recalc_sigpending;
        }
 again:
        /* Wait for the response */
@@ -804,6 +807,7 @@ again:
                if (req->status == REQ_STATUS_RCVD)
                        err = 0;
        }
+recalc_sigpending:
        if (sigpending) {
                spin_lock_irqsave(&current->sighand->siglock, flags);
                recalc_sigpending();
@@ -867,7 +871,7 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type,
                if (err == -EIO)
                        c->status = Disconnected;
                if (err != -ERESTARTSYS)
-                       goto reterr;
+                       goto recalc_sigpending;
        }
        if (req->status == REQ_STATUS_ERROR) {
                p9_debug(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err);
@@ -885,6 +889,7 @@ static struct p9_req_t *p9_client_zc_rpc(struct p9_client *c, int8_t type,
                if (req->status == REQ_STATUS_RCVD)
                        err = 0;
        }
+recalc_sigpending:
        if (sigpending) {
                spin_lock_irqsave(&current->sighand->siglock, flags);
                recalc_sigpending();