]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
cifs: simplify SWN code with dummy funcs instead of ifdefs
authorAurelien Aptel <aaptel@suse.com>
Fri, 9 Apr 2021 14:31:37 +0000 (16:31 +0200)
committerSteve French <stfrench@microsoft.com>
Sun, 25 Apr 2021 21:28:22 +0000 (16:28 -0500)
This commit doesn't change the logic of SWN.

Add dummy implementation of SWN functions when SWN is disabled instead
of using ifdef sections.

The dummy functions get optimized out, this leads to clearer code and
compile time type-checking regardless of config options with no
runtime penalty.

Leave the simple ifdefs section as-is.

A single bitfield (bool foo:1) on its own will use up one int. Move
tcon->use_witness out of ifdefs with the other tcon bitfields.

Signed-off-by: Aurelien Aptel <aaptel@suse.com>
Reviewed-by: Samuel Cabrero <scabrero@suse.de>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/cifs_debug.c
fs/cifs/cifs_swn.h
fs/cifs/cifsfs.c
fs/cifs/cifsglob.h
fs/cifs/connect.c

index 88a7958170ee0f7612e94f576f7da965e3c235ba..d8ae961a510fea1d1c332a448a03c2e60650a6a3 100644 (file)
@@ -23,9 +23,7 @@
 #ifdef CONFIG_CIFS_SMB_DIRECT
 #include "smbdirect.h"
 #endif
-#ifdef CONFIG_CIFS_SWN_UPCALL
 #include "cifs_swn.h"
-#endif
 
 void
 cifs_dump_mem(char *label, void *data, int length)
@@ -118,10 +116,8 @@ static void cifs_debug_tcon(struct seq_file *m, struct cifs_tcon *tcon)
                seq_printf(m, " POSIX Extensions");
        if (tcon->ses->server->ops->dump_share_caps)
                tcon->ses->server->ops->dump_share_caps(m, tcon);
-#ifdef CONFIG_CIFS_SWN_UPCALL
        if (tcon->use_witness)
                seq_puts(m, " Witness");
-#endif
 
        if (tcon->need_reconnect)
                seq_puts(m, "\tDISCONNECTED ");
@@ -490,10 +486,8 @@ skip_rdma:
 
        spin_unlock(&cifs_tcp_ses_lock);
        seq_putc(m, '\n');
-
-#ifdef CONFIG_CIFS_SWN_UPCALL
        cifs_swn_dump(m);
-#endif
+
        /* BB add code to dump additional info such as TCP session info now */
        return 0;
 }
index 236ecd4959d5d98e1fdc5962ae11d1e2643c22d3..8a9d2a5c9077e851d3e52d148d4c458b3e2105f2 100644 (file)
@@ -7,11 +7,13 @@
 
 #ifndef _CIFS_SWN_H
 #define _CIFS_SWN_H
+#include "cifsglob.h"
 
 struct cifs_tcon;
 struct sk_buff;
 struct genl_info;
 
+#ifdef CONFIG_CIFS_SWN_UPCALL
 extern int cifs_swn_register(struct cifs_tcon *tcon);
 
 extern int cifs_swn_unregister(struct cifs_tcon *tcon);
@@ -22,4 +24,29 @@ extern void cifs_swn_dump(struct seq_file *m);
 
 extern void cifs_swn_check(void);
 
+static inline bool cifs_swn_set_server_dstaddr(struct TCP_Server_Info *server)
+{
+       if (server->use_swn_dstaddr) {
+               server->dstaddr = server->swn_dstaddr;
+               return true;
+       }
+       return false;
+}
+
+static inline void cifs_swn_reset_server_dstaddr(struct TCP_Server_Info *server)
+{
+       server->use_swn_dstaddr = false;
+}
+
+#else
+
+static inline int cifs_swn_register(struct cifs_tcon *tcon) { return 0; }
+static inline int cifs_swn_unregister(struct cifs_tcon *tcon) { return 0; }
+static inline int cifs_swn_notify(struct sk_buff *s, struct genl_info *i) { return 0; }
+static inline void cifs_swn_dump(struct seq_file *m) {}
+static inline void cifs_swn_check(void) {}
+static inline bool cifs_swn_set_server_dstaddr(struct TCP_Server_Info *server) { return false; }
+static inline void cifs_swn_reset_server_dstaddr(struct TCP_Server_Info *server) {}
+
+#endif /* CONFIG_CIFS_SWN_UPCALL */
 #endif /* _CIFS_SWN_H */
index 5ddd20b62484de389a5ee67654b4375559bf874e..1b65ff9e9189e06047281f19aec6a0ae3192555c 100644 (file)
@@ -656,10 +656,8 @@ cifs_show_options(struct seq_file *s, struct dentry *root)
                seq_printf(s, ",multichannel,max_channels=%zu",
                           tcon->ses->chan_max);
 
-#ifdef CONFIG_CIFS_SWN_UPCALL
        if (tcon->use_witness)
                seq_puts(s, ",witness");
-#endif
 
        return 0;
 }
index 21a749074789107e9971f6560e2fba34c1a7bdc2..aafc985e98c2244161bd87bf49d98cb77c36f429 100644 (file)
@@ -1070,6 +1070,7 @@ struct cifs_tcon {
        bool use_resilient:1; /* use resilient instead of durable handles */
        bool use_persistent:1; /* use persistent instead of durable handles */
        bool no_lease:1;    /* Do not request leases on files or directories */
+       bool use_witness:1; /* use witness protocol */
        __le32 capabilities;
        __u32 share_flags;
        __u32 maximal_access;
@@ -1094,9 +1095,6 @@ struct cifs_tcon {
        int remap:2;
        struct list_head ulist; /* cache update list */
 #endif
-#ifdef CONFIG_CIFS_SWN_UPCALL
-       bool use_witness:1; /* use witness protocol */
-#endif
 };
 
 /*
index 24668eb006c63f9d09a40ad6518213353915f85f..35dbb9c836ea4238a02fb738d8447227cfa4c5f5 100644 (file)
@@ -62,9 +62,7 @@
 #include "dfs_cache.h"
 #endif
 #include "fs_context.h"
-#ifdef CONFIG_CIFS_SWN_UPCALL
 #include "cifs_swn.h"
-#endif
 
 extern mempool_t *cifs_req_poolp;
 extern bool disable_legacy_dialects;
@@ -314,12 +312,8 @@ cifs_reconnect(struct TCP_Server_Info *server)
 
                mutex_lock(&server->srv_mutex);
 
-#ifdef CONFIG_CIFS_SWN_UPCALL
-               if (server->use_swn_dstaddr) {
-                       server->dstaddr = server->swn_dstaddr;
-               } else {
-#endif
 
+               if (!cifs_swn_set_server_dstaddr(server)) {
 #ifdef CONFIG_CIFS_DFS_UPCALL
                if (cifs_sb && cifs_sb->origin_fullpath)
                        /*
@@ -344,9 +338,7 @@ cifs_reconnect(struct TCP_Server_Info *server)
 #endif
 
 
-#ifdef CONFIG_CIFS_SWN_UPCALL
                }
-#endif
 
                if (cifs_rdma_enabled(server))
                        rc = smbd_reconnect(server);
@@ -363,9 +355,7 @@ cifs_reconnect(struct TCP_Server_Info *server)
                        if (server->tcpStatus != CifsExiting)
                                server->tcpStatus = CifsNeedNegotiate;
                        spin_unlock(&GlobalMid_Lock);
-#ifdef CONFIG_CIFS_SWN_UPCALL
-                       server->use_swn_dstaddr = false;
-#endif
+                       cifs_swn_reset_server_dstaddr(server);
                        mutex_unlock(&server->srv_mutex);
                }
        } while (server->tcpStatus == CifsNeedReconnect);
@@ -430,10 +420,8 @@ cifs_echo_request(struct work_struct *work)
                cifs_dbg(FYI, "Unable to send echo request to server: %s\n",
                         server->hostname);
 
-#ifdef CONFIG_CIFS_SWN_UPCALL
        /* Check witness registrations */
        cifs_swn_check();
-#endif
 
 requeue_echo:
        queue_delayed_work(cifsiod_wq, &server->echo, server->echo_interval);
@@ -2009,7 +1997,6 @@ cifs_put_tcon(struct cifs_tcon *tcon)
                return;
        }
 
-#ifdef CONFIG_CIFS_SWN_UPCALL
        if (tcon->use_witness) {
                int rc;
 
@@ -2019,7 +2006,6 @@ cifs_put_tcon(struct cifs_tcon *tcon)
                                        __func__, rc);
                }
        }
-#endif
 
        list_del_init(&tcon->tcon_list);
        spin_unlock(&cifs_tcp_ses_lock);
@@ -2181,9 +2167,9 @@ cifs_get_tcon(struct cifs_ses *ses, struct smb3_fs_context *ctx)
                }
                tcon->use_resilient = true;
        }
-#ifdef CONFIG_CIFS_SWN_UPCALL
+
        tcon->use_witness = false;
-       if (ctx->witness) {
+       if (IS_ENABLED(CONFIG_CIFS_SWN_UPCALL) && ctx->witness) {
                if (ses->server->vals->protocol_id >= SMB30_PROT_ID) {
                        if (tcon->capabilities & SMB2_SHARE_CAP_CLUSTER) {
                                /*
@@ -2209,7 +2195,6 @@ cifs_get_tcon(struct cifs_ses *ses, struct smb3_fs_context *ctx)
                        goto out_fail;
                }
        }
-#endif
 
        /* If the user really knows what they are doing they can override */
        if (tcon->share_flags & SMB2_SHAREFLAG_NO_CACHING) {
@@ -3877,9 +3862,7 @@ cifs_construct_tcon(struct cifs_sb_info *cifs_sb, kuid_t fsuid)
        ctx->sectype = master_tcon->ses->sectype;
        ctx->sign = master_tcon->ses->sign;
        ctx->seal = master_tcon->seal;
-#ifdef CONFIG_CIFS_SWN_UPCALL
        ctx->witness = master_tcon->use_witness;
-#endif
 
        rc = cifs_set_vol_auth(ctx, master_tcon->ses);
        if (rc) {