cifs: Fix in error types returned for out-of-credit situations.
authorShyam Prasad N <sprasad@microsoft.com>
Thu, 4 Feb 2021 06:58:38 +0000 (22:58 -0800)
committerSteve French <stfrench@microsoft.com>
Tue, 16 Feb 2021 21:40:13 +0000 (15:40 -0600)
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: Shyam Prasad N <sprasad@microsoft.com>
Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/transport.c

index 41223a9ee08694c2ee0db7b6fbeff2703effee91..39e87705840d1fe728e430ebe5dcc4fd254af133 100644 (file)
@@ -567,7 +567,7 @@ wait_for_free_credits(struct TCP_Server_Info *server, const int num_credits,
                                        server->hostname, num_credits, 0);
                                cifs_server_dbg(VFS, "wait timed out after %d ms\n",
                                         timeout);
-                               return -ENOTSUPP;
+                               return -EBUSY;
                        }
                        if (rc == -ERESTARTSYS)
                                return -ERESTARTSYS;
@@ -609,7 +609,7 @@ wait_for_free_credits(struct TCP_Server_Info *server, const int num_credits,
                                                0);
                                        cifs_server_dbg(VFS, "wait timed out after %d ms\n",
                                                 timeout);
-                                       return -ENOTSUPP;
+                                       return -EBUSY;
                                }
                                if (rc == -ERESTARTSYS)
                                        return -ERESTARTSYS;
@@ -687,7 +687,7 @@ wait_for_compound_request(struct TCP_Server_Info *server, int num,
                                        server->hostname, scredits, sin_flight);
                        cifs_dbg(FYI, "%s: %d requests in flight, needed %d total=%d\n",
                                        __func__, sin_flight, num, scredits);
-                       return -ENOTSUPP;
+                       return -EDEADLK;
                }
        }
        spin_unlock(&server->req_lock);