Commit 7de03948 authored by Shyam Prasad N's avatar Shyam Prasad N Committed by Steve French

cifs: Fix in error types returned for out-of-credit situations.

For failure by timeout waiting for credits, changed the error
returned to the app with EBUSY, instead of ENOTSUPP. This is done
because this situation is possible even in non-buggy cases. i.e.
overloaded server can return 0 credits until done with outstanding
requests. And this feels like a better error to return to the app.

For cases of zero credits found even when there are no requests
in flight, replaced ENOTSUPP with EDEADLK, since we're avoiding
deadlock here by returning error.
Signed-off-by: default avatarShyam Prasad N <sprasad@microsoft.com>
Reviewed-by: default avatarPavel Shilovsky <pshilov@microsoft.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 0f56db83
...@@ -567,7 +567,7 @@ wait_for_free_credits(struct TCP_Server_Info *server, const int num_credits, ...@@ -567,7 +567,7 @@ wait_for_free_credits(struct TCP_Server_Info *server, const int num_credits,
server->hostname, num_credits, 0); server->hostname, num_credits, 0);
cifs_server_dbg(VFS, "wait timed out after %d ms\n", cifs_server_dbg(VFS, "wait timed out after %d ms\n",
timeout); timeout);
return -ENOTSUPP; return -EBUSY;
} }
if (rc == -ERESTARTSYS) if (rc == -ERESTARTSYS)
return -ERESTARTSYS; return -ERESTARTSYS;
...@@ -609,7 +609,7 @@ wait_for_free_credits(struct TCP_Server_Info *server, const int num_credits, ...@@ -609,7 +609,7 @@ wait_for_free_credits(struct TCP_Server_Info *server, const int num_credits,
0); 0);
cifs_server_dbg(VFS, "wait timed out after %d ms\n", cifs_server_dbg(VFS, "wait timed out after %d ms\n",
timeout); timeout);
return -ENOTSUPP; return -EBUSY;
} }
if (rc == -ERESTARTSYS) if (rc == -ERESTARTSYS)
return -ERESTARTSYS; return -ERESTARTSYS;
...@@ -687,7 +687,7 @@ wait_for_compound_request(struct TCP_Server_Info *server, int num, ...@@ -687,7 +687,7 @@ wait_for_compound_request(struct TCP_Server_Info *server, int num,
server->hostname, scredits, sin_flight); server->hostname, scredits, sin_flight);
cifs_dbg(FYI, "%s: %d requests in flight, needed %d total=%d\n", cifs_dbg(FYI, "%s: %d requests in flight, needed %d total=%d\n",
__func__, sin_flight, num, scredits); __func__, sin_flight, num, scredits);
return -ENOTSUPP; return -EDEADLK;
} }
} }
spin_unlock(&server->req_lock); spin_unlock(&server->req_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment