]> nv-tegra.nvidia Code Review - linux-4.9.git/commitdiff
cifs: report reconnect error to userspace
authorRobert Shih <rshih@nvidia.com>
Tue, 26 Jun 2018 05:38:21 +0000 (13:38 +0800)
committermobile promotions <svcmobile_promotions@nvidia.com>
Sat, 27 Oct 2018 10:16:30 +0000 (03:16 -0700)
Bug 2194577

Change-Id: Iec3d9dde7ad3abb1daa80df0eb9f84e5474722e8
Signed-off-by: Robert Shih <rshih@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1761297
Reviewed-on: https://git-master.nvidia.com/r/1851180
Reviewed-on: https://git-master.nvidia.com/r/1934988
GVS: Gerrit_Virtual_Submit
Reviewed-by: Shawn Heo <sheo@nvidia.com>
Tested-by: Shawn Heo <sheo@nvidia.com>
Reviewed-by: Vinayak Pane <vpane@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
fs/cifs/connect.c
fs/cifs/sysfs.h

index 14fa88b34ba1d68b44197f4ff31c2ecf3bb8c382..c74b1795778bf1295809346eeda548adb951d4e7 100644 (file)
@@ -327,6 +327,10 @@ cifs_reconnect(struct TCP_Server_Info *server)
        struct cifs_tcon *tcon;
        struct mid_q_entry *mid_entry;
        struct list_head retry_list;
+#ifdef CONFIG_CIFS_SYSFS
+       bool notify_reconnect_error = true;
+       int reconnect_error_count = 0;
+#endif
 
        spin_lock(&GlobalMid_Lock);
        if (server->tcpStatus == CifsExiting) {
@@ -409,6 +413,15 @@ cifs_reconnect(struct TCP_Server_Info *server)
                mutex_lock(&server->srv_mutex);
                rc = generic_ip_connect(server);
                if (rc) {
+#ifdef CONFIG_CIFS_SYSFS
+                       if (notify_reconnect_error) {
+                               if (reconnect_error_count == 2) {
+                                       cifs_sysfs_notify_change(server->hostname, RECONNECT_ERROR);
+                                       notify_reconnect_error = false;
+                               }
+                               reconnect_error_count++;
+                       }
+#endif
                        cifs_dbg(FYI, "reconnect error %d\n", rc);
                        mutex_unlock(&server->srv_mutex);
                        msleep(3000);
index 538e0a5e1a4521430db945dd0fe6b1ad259abd3c..38b39e043110e4ecade175c69743d9f5649ffa59 100644 (file)
@@ -23,6 +23,8 @@ typedef enum {
        DISCONNECTED,
        RECONNECTING,
        RECONNECTED,
+       SMB_ERROR,
+       RECONNECT_ERROR
 } cifs_event_type;
 
 void cifs_sysfs_notify_change(const char* source, cifs_event_type type);