Move the credits into the cifs_io_subrequest struct rather than placing them
on the stack.  They are then allocated by netfslib when it allocates its
netfs_io_subrequest.

Signed-off-by: David Howells <dhowe...@redhat.com>
cc: Steve French <sfre...@samba.org>
cc: Shyam Prasad N <nspmangal...@gmail.com>
cc: Rohith Surabattula <rohiths.m...@gmail.com>
cc: linux-c...@vger.kernel.org
---

 fs/cifs/file.c |   12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index fb2885134154..fc3a46f7e2cf 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -3450,7 +3450,6 @@ static void cifs_req_issue_read(struct 
netfs_io_subrequest *subreq)
        struct cifs_io_subrequest *rdata = container_of(subreq, struct 
cifs_io_subrequest, subreq);
        struct cifsFileInfo *open_file = rreq->netfs_priv;
        struct cifs_sb_info *cifs_sb = CIFS_SB(rreq->inode->i_sb);
-       struct cifs_credits credits_on_stack, *credits = &credits_on_stack;
        unsigned int xid;
        pid_t pid;
        int rc = 0;
@@ -3482,7 +3481,8 @@ static void cifs_req_issue_read(struct 
netfs_io_subrequest *subreq)
                        
server->ops->negotiate_rsize(tlink_tcon(open_file->tlink),
                                                     cifs_sb->ctx);
 
-       rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->rsize, &rsize, 
credits);
+       rc = server->ops->wait_mtu_credits(server, cifs_sb->ctx->rsize, &rsize,
+                                          &rdata->credits);
        if (rc)
                goto out;
 
@@ -3492,7 +3492,6 @@ static void cifs_req_issue_read(struct 
netfs_io_subrequest *subreq)
        rdata->offset   = subreq->start + subreq->transferred;
        rdata->bytes    = subreq->len   - subreq->transferred;
        rdata->pid      = pid;
-       rdata->credits  = credits_on_stack;
 
        rc = adjust_credits(server, &rdata->credits, rdata->bytes);
        if (!rc) {
@@ -3502,11 +3501,6 @@ static void cifs_req_issue_read(struct 
netfs_io_subrequest *subreq)
                        rc = server->ops->async_readv(rdata);
        }
 
-       if (rc) {
-               add_credits_and_wake_if(server, &rdata->credits, 0);
-               /* Fallback to the readpage in error/reconnect cases */
-       }
-
 out:
        free_xid(xid);
        if (rc)
@@ -3584,6 +3578,8 @@ static void cifs_free_subrequest(struct 
netfs_io_subrequest *subreq)
                        rdata->mr = NULL;
                }
 #endif
+
+               add_credits_and_wake_if(rdata->server, &rdata->credits, 0);
                if (rdata->cfile)
                        cifsFileInfo_put(rdata->cfile);
        }


--
Linux-cachefs mailing list
Linux-cachefs@redhat.com
https://listman.redhat.com/mailman/listinfo/linux-cachefs

Reply via email to