@@ -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);
}
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 <dhowells@redhat.com> cc: Steve French <sfrench@samba.org> cc: Shyam Prasad N <nspmangalore@gmail.com> cc: Rohith Surabattula <rohiths.msft@gmail.com> cc: linux-cifs@vger.kernel.org --- fs/cifs/file.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-)