From patchwork Mon Aug 8 22:02:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Atte_Heikkil=C3=A4?= X-Patchwork-Id: 12939147 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2315BC00140 for ; Mon, 8 Aug 2022 22:02:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236480AbiHHWC3 (ORCPT ); Mon, 8 Aug 2022 18:02:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44932 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231258AbiHHWC1 (ORCPT ); Mon, 8 Aug 2022 18:02:27 -0400 Received: from mail-lj1-x229.google.com (mail-lj1-x229.google.com [IPv6:2a00:1450:4864:20::229]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ADDCC1AF26 for ; Mon, 8 Aug 2022 15:02:26 -0700 (PDT) Received: by mail-lj1-x229.google.com with SMTP id r14so11245948ljp.2 for ; Mon, 08 Aug 2022 15:02:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc; bh=vEozrI9qeDZ0bs43tv0cC8zz34nNWEHvxQBc6wCU0X8=; b=AGLLsZ3AaOugkeJ0qiRnE8ETa1rzpdoNYmhV6q6X4m2ntHk4vVY+esnTXtg/vgPIki vksewMyDSUa2IFuk0aAYVc2skwTzJvFQi95Svmr4z7cAvIms8VHOr+Y8mrUcI4/pO/bE 1GXYVzA3lcEYT/3UgZ6Zy2DFhkxi9aplOEkws/4cE5K+ak5TWJykPC37jFMmvCvbTvzD iW/WbMQSu6QuhLuEVQBfGeRg694LMwlP97P06EYXymda0R6WVi5Pxd1VpZZnnypc1wCw MWIm1KwPTaoiYPDN92wwN9/VDRbHEPSlK6rAqf3tFPd1UPbvdrlPAxCw4juxqNXiL/us 7DvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc; bh=vEozrI9qeDZ0bs43tv0cC8zz34nNWEHvxQBc6wCU0X8=; b=EVC6E6ghpLCR6Oa2lxasseaKcupZrmUk7+DNlTfaItR7TZVilSEP0K3ozz6HOPEMQT Pmq/UEbu7TqRADsNtVVgQkTR2CyMKe4JP4/2UckO0VeXXdsrL0Oh3aqp4i95XMlM+WqS AbG2BLB1QNC20DhzKSLnzZBnMEr06CGgBQBW6XZXAwxRXAsnXwXtSLEDL9/CY07JTsB7 2aD3nRIEDz/McfAKz5I0zjhbz6G5GFTYT4YHpU/xEJTuLsfpG2TPqdXHnMu6dfgOgKUo d7aA0hnQ0E4ajYizZilsneoMjCFjfP68rz7errdyv7FN9megna7KEJ8GFBHwGvPbFQlz QbDg== X-Gm-Message-State: ACgBeo0tHO4vxChWAqTDVmkvErQYsRqIjSJCAXxWpywJPz1KA9k+oeuO mAVzLUNx9Ls17Mbc1ftur8MIIreMFak= X-Google-Smtp-Source: AA6agR7w2VYmFVr8oQGNVKQ4UBGZ2bYwOS65l/S7fXznTbJ5LZ27rq2ykg0yJNW6J5d20FnqkoMc3Q== X-Received: by 2002:a2e:b0c9:0:b0:25e:71e3:8441 with SMTP id g9-20020a2eb0c9000000b0025e71e38441mr6941702ljl.156.1659996144998; Mon, 08 Aug 2022 15:02:24 -0700 (PDT) Received: from pohjola.lan (mobile-user-c1d2eb-134.dhcp.inet.fi. [193.210.235.134]) by smtp.gmail.com with ESMTPSA id b15-20020a2eb90f000000b0025e72aae6bdsm1477817ljb.28.2022.08.08.15.02.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Aug 2022 15:02:24 -0700 (PDT) From: atheik To: linux-cifs@vger.kernel.org Cc: atheik Subject: [PATCH v2 1/3] ksmbd: request update to stale share config Date: Tue, 9 Aug 2022 01:02:14 +0300 Message-Id: <20220808220216.17235-1-atteh.mailbox@gmail.com> X-Mailer: git-send-email 2.37.1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org ksmbd_share_config_get() retrieves the cached share config as long as there is at least one connection to the share. This is an issue when the user space utilities are used to update share configs. In that case there is a need to inform ksmbd that it should not use the cached share config for a new connection to the share. With these changes the tree connection flag KSMBD_TREE_CONN_FLAG_UPDATE indicates this. When this flag is set, ksmbd removes the share config from the shares hash table meaning that ksmbd_share_config_get() ends up requesting a share config from user space. Signed-off-by: Atte Heikkilä Acked-by: Namjae Jeon --- fs/ksmbd/ksmbd_netlink.h | 2 ++ fs/ksmbd/mgmt/share_config.c | 6 +++++- fs/ksmbd/mgmt/share_config.h | 1 + fs/ksmbd/mgmt/tree_connect.c | 14 ++++++++++++++ fs/ksmbd/smb2pdu.c | 1 + 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/fs/ksmbd/ksmbd_netlink.h b/fs/ksmbd/ksmbd_netlink.h index 52aa0adeb951..a3211c55b01f 100644 --- a/fs/ksmbd/ksmbd_netlink.h +++ b/fs/ksmbd/ksmbd_netlink.h @@ -349,6 +349,7 @@ enum KSMBD_TREE_CONN_STATUS { #define KSMBD_SHARE_FLAG_STREAMS BIT(11) #define KSMBD_SHARE_FLAG_FOLLOW_SYMLINKS BIT(12) #define KSMBD_SHARE_FLAG_ACL_XATTR BIT(13) +#define KSMBD_SHARE_FLAG_UPDATE BIT(14) /* * Tree connect request flags. @@ -364,6 +365,7 @@ enum KSMBD_TREE_CONN_STATUS { #define KSMBD_TREE_CONN_FLAG_READ_ONLY BIT(1) #define KSMBD_TREE_CONN_FLAG_WRITABLE BIT(2) #define KSMBD_TREE_CONN_FLAG_ADMIN_ACCOUNT BIT(3) +#define KSMBD_TREE_CONN_FLAG_UPDATE BIT(4) /* * RPC over IPC. diff --git a/fs/ksmbd/mgmt/share_config.c b/fs/ksmbd/mgmt/share_config.c index 70655af93b44..c9bca1c2c834 100644 --- a/fs/ksmbd/mgmt/share_config.c +++ b/fs/ksmbd/mgmt/share_config.c @@ -51,12 +51,16 @@ static void kill_share(struct ksmbd_share_config *share) kfree(share); } -void __ksmbd_share_config_put(struct ksmbd_share_config *share) +void ksmbd_share_config_del(struct ksmbd_share_config *share) { down_write(&shares_table_lock); hash_del(&share->hlist); up_write(&shares_table_lock); +} +void __ksmbd_share_config_put(struct ksmbd_share_config *share) +{ + ksmbd_share_config_del(share); kill_share(share); } diff --git a/fs/ksmbd/mgmt/share_config.h b/fs/ksmbd/mgmt/share_config.h index 28bf3511763f..902f2cb1963a 100644 --- a/fs/ksmbd/mgmt/share_config.h +++ b/fs/ksmbd/mgmt/share_config.h @@ -64,6 +64,7 @@ static inline int test_share_config_flag(struct ksmbd_share_config *share, return share->flags & flag; } +void ksmbd_share_config_del(struct ksmbd_share_config *share); void __ksmbd_share_config_put(struct ksmbd_share_config *share); static inline void ksmbd_share_config_put(struct ksmbd_share_config *share) diff --git a/fs/ksmbd/mgmt/tree_connect.c b/fs/ksmbd/mgmt/tree_connect.c index dd262daa2c4a..97ab7987df6e 100644 --- a/fs/ksmbd/mgmt/tree_connect.c +++ b/fs/ksmbd/mgmt/tree_connect.c @@ -57,6 +57,20 @@ ksmbd_tree_conn_connect(struct ksmbd_conn *conn, struct ksmbd_session *sess, goto out_error; tree_conn->flags = resp->connection_flags; + if (test_tree_conn_flag(tree_conn, KSMBD_TREE_CONN_FLAG_UPDATE)) { + struct ksmbd_share_config *new_sc; + + ksmbd_share_config_del(sc); + new_sc = ksmbd_share_config_get(share_name); + if (!new_sc) { + pr_err("Failed to update stale share config\n"); + status.ret = -ESTALE; + goto out_error; + } + ksmbd_share_config_put(sc); + sc = new_sc; + } + tree_conn->user = sess->user; tree_conn->share_conf = sc; status.tree_conn = tree_conn; diff --git a/fs/ksmbd/smb2pdu.c b/fs/ksmbd/smb2pdu.c index 1f9a2cda0c58..b5c36657ecfd 100644 --- a/fs/ksmbd/smb2pdu.c +++ b/fs/ksmbd/smb2pdu.c @@ -1944,6 +1944,7 @@ int smb2_tree_connect(struct ksmbd_work *work) rsp->hdr.Status = STATUS_SUCCESS; rc = 0; break; + case -ESTALE: case -ENOENT: case KSMBD_TREE_CONN_STATUS_NO_SHARE: rsp->hdr.Status = STATUS_BAD_NETWORK_NAME; From patchwork Mon Aug 8 22:02:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Atte_Heikkil=C3=A4?= X-Patchwork-Id: 12939148 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4F6BEC25B0C for ; Mon, 8 Aug 2022 22:02:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231258AbiHHWCc (ORCPT ); Mon, 8 Aug 2022 18:02:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44966 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238465AbiHHWCa (ORCPT ); Mon, 8 Aug 2022 18:02:30 -0400 Received: from mail-lj1-x231.google.com (mail-lj1-x231.google.com [IPv6:2a00:1450:4864:20::231]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8AE971BE87 for ; Mon, 8 Aug 2022 15:02:27 -0700 (PDT) Received: by mail-lj1-x231.google.com with SMTP id j3so4057927ljo.0 for ; Mon, 08 Aug 2022 15:02:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=bgE+UMo9Vo+rfBsSHMr4wD8GPdfh6ZtGp/tMNdv+oq4=; b=Hdc9wO485a1KLcatKcQfudheOXeFhsbLxQ/fHQLvkXyolhs5dXZSNKcIu6pdAxfceH 3G6EgKN7ibSb3sQZvVh46/SaIKokP6RHO3tyamic3M8eeUGDEVRTJyv78ZAQddcyI5kC RRK+uAQubir9KHRoXpm9KvQJYFPK9pupMw32NcuoktX0xrFf4hVlyoFEoyHNLKE3W5UY G/mbovCDmiyAggBNjSR/g5VGYCjUsRcOff4xsvrDNluwb4Q7XacJP7zozznHZXqO5ur7 nCD1tmz0/fGaNazmxM26DX+y7A6Rqpw6K5tbS6+av3FCBCMl4D1rGhRnHETkBaaGtUWo Mf9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=bgE+UMo9Vo+rfBsSHMr4wD8GPdfh6ZtGp/tMNdv+oq4=; b=OthfvfhqHyFX1HyNTlpg5wawWqr0D9QY7ltfrP9XHkJb5WbM/s3lW+maT96uQT3vpl PrPqu+f5c2/IM95nJQyNBKXOgxFUiDUehju0kRSEiBiI4XqdTzWFRGV2yb8pdwY8NMOm cQXSV1fB8IjhA/HMC7vLB633UYICAyZuk3PLnwWPziOBrBghnMkiLzwGAyu1+t3Okdpu C7uRLwEX1juxzgVZ5TQm5t46rLB8dU8aWOvZir6GR+pdepC0P9rZo3KmXXAd/mZv9JG6 ugMOdklDIzl7K8B8UKbnMtnHg1vyxMUdhuIboU0b1PsbpKWabqPX4HhHFIacS2v7Ovtc 1ZrQ== X-Gm-Message-State: ACgBeo0Fm6JFPboIpOhpNui72iQvMj1mJmQz+dll4sM7Cb+eYCTFJlnt 7XNpZe0opB6PjRz5XL92x9OmhSY4+c0= X-Google-Smtp-Source: AA6agR6rRyXv6jg8kXht0GjWjfJ0mzBv4kt3hkUuIRCsWgCiAGUyFAI1IgDpwxC1CLpWZ65f06CM/g== X-Received: by 2002:a2e:9bcc:0:b0:25e:4dd8:11f7 with SMTP id w12-20020a2e9bcc000000b0025e4dd811f7mr6948700ljj.471.1659996145687; Mon, 08 Aug 2022 15:02:25 -0700 (PDT) Received: from pohjola.lan (mobile-user-c1d2eb-134.dhcp.inet.fi. [193.210.235.134]) by smtp.gmail.com with ESMTPSA id b15-20020a2eb90f000000b0025e72aae6bdsm1477817ljb.28.2022.08.08.15.02.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Aug 2022 15:02:25 -0700 (PDT) From: atheik To: linux-cifs@vger.kernel.org Cc: atheik Subject: [PATCH v2 2/3] ksmbd-tools: cleanup config group handling Date: Tue, 9 Aug 2022 01:02:15 +0300 Message-Id: <20220808220216.17235-2-atteh.mailbox@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220808220216.17235-1-atteh.mailbox@gmail.com> References: <20220808220216.17235-1-atteh.mailbox@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org Rename cp_add_ipc_share() to cp_add_ipc_group() in order to better describe its purpose. Use the ipc_group global variable so as to get rid of the group name comparison in groups_callback(). Keep track of used groups callback mode by saving it per-group. Move global group checks to global_conf_* functions. Signed-off-by: Atte Heikkilä --- include/config_parser.h | 5 +++ lib/config_parser.c | 95 +++++++++++++++++++++++------------------ 2 files changed, 59 insertions(+), 41 deletions(-) diff --git a/include/config_parser.h b/include/config_parser.h index b6c49b9..43212c8 100644 --- a/include/config_parser.h +++ b/include/config_parser.h @@ -10,7 +10,12 @@ #include +#define GROUPS_CALLBACK_NONE (0) +#define GROUPS_CALLBACK_INIT (1 << 0) +#define GROUPS_CALLBACK_REINIT (1 << 1) + struct smbconf_group { + unsigned short cb_mode; char *name; GHashTable *kv; }; diff --git a/lib/config_parser.c b/lib/config_parser.c index 5e7a438..d311386 100644 --- a/lib/config_parser.c +++ b/lib/config_parser.c @@ -21,7 +21,7 @@ struct smbconf_global global_conf; struct smbconf_parser parser; -struct smbconf_group *global_group; +struct smbconf_group *global_group, *ipc_group; unsigned long long memparse(const char *v) { @@ -107,6 +107,7 @@ static int add_new_group(char *line) } group = g_malloc(sizeof(struct smbconf_group)); + group->cb_mode = GROUPS_CALLBACK_NONE; group->name = name; group->kv = g_hash_table_new_full(g_str_hash, g_str_equal, @@ -561,6 +562,9 @@ static void global_conf_default(void) static void global_conf_create(void) { + if (!global_group || global_group->cb_mode != GROUPS_CALLBACK_INIT) + return; + /* * This will transfer server options to global_conf, and leave behind * in the global parser group, the options that must be applied to every @@ -569,6 +573,23 @@ static void global_conf_create(void) g_hash_table_foreach_remove(global_group->kv, global_group_kv, NULL); } +static void append_key_value(gpointer _k, gpointer _v, gpointer user_data) +{ + GHashTable *receiver = (GHashTable *) user_data; + + /* Don't override local share options */ + if (!g_hash_table_lookup(receiver, _k)) + g_hash_table_insert(receiver, g_strdup(_k), g_strdup(_v)); +} + +static void global_conf_update(struct smbconf_group *group) +{ + if (!global_group) + return; + + g_hash_table_foreach(global_group->kv, append_key_value, group->kv); +} + static void global_conf_fixup_missing(void) { int ret; @@ -607,39 +628,29 @@ static void global_conf_fixup_missing(void) ret); } -static void append_key_value(gpointer _k, gpointer _v, gpointer user_data) -{ - GHashTable *receiver = (GHashTable *) user_data; - - /* Don't override local share options */ - if (!g_hash_table_lookup(receiver, _k)) - g_hash_table_insert(receiver, g_strdup(_k), g_strdup(_v)); -} - -#define GROUPS_CALLBACK_STARTUP_INIT 0x1 -#define GROUPS_CALLBACK_REINIT 0x2 - static void groups_callback(gpointer _k, gpointer _v, gpointer user_data) { - struct smbconf_group *group = (struct smbconf_group *)_v; + struct smbconf_group *group = (struct smbconf_group *) _v; + unsigned short cb_mode = *(unsigned short *) user_data; - if (group != global_group) { - if (global_group && g_ascii_strcasecmp(_k, "ipc$")) - g_hash_table_foreach(global_group->kv, - append_key_value, - group->kv); + if (group == global_group) + return; - shm_add_new_share(group); - } + group->cb_mode = cb_mode; + + if (group != ipc_group) + global_conf_update(group); + + shm_add_new_share(group); } -static int cp_add_ipc_share(void) +static int cp_add_ipc_group(void) { char *comment = NULL, *guest = NULL; int ret = 0; - if (g_hash_table_lookup(parser.groups, "ipc$")) - return 0; + if (ipc_group) + return ret; comment = g_strdup("comment = IPC share"); guest = g_strdup("guest ok = yes"); @@ -649,13 +660,18 @@ static int cp_add_ipc_share(void) if (ret) { pr_err("Unable to add IPC$ share\n"); ret = -EINVAL; + goto out; } + + ipc_group = g_hash_table_lookup(parser.groups, "ipc$"); +out: g_free(comment); g_free(guest); return ret; } -static int __cp_parse_smbconfig(const char *smbconf, GHFunc cb, long flags) +static int __cp_parse_smbconfig(const char *smbconf, GHFunc cb, + unsigned short cb_mode) { int ret; @@ -665,35 +681,32 @@ static int __cp_parse_smbconfig(const char *smbconf, GHFunc cb, long flags) if (ret) return ret; - ret = cp_add_ipc_share(); - if (!ret) { - global_group = g_hash_table_lookup(parser.groups, "global"); + ret = cp_add_ipc_group(); + if (ret) + goto out; - if (global_group && (flags == GROUPS_CALLBACK_STARTUP_INIT)) - global_conf_create(); + global_group = g_hash_table_lookup(parser.groups, "global"); + if (global_group) + global_group->cb_mode = cb_mode; - g_hash_table_foreach(parser.groups, - groups_callback, - NULL); - - global_conf_fixup_missing(); - } + global_conf_create(); + g_hash_table_foreach(parser.groups, groups_callback, &cb_mode); + global_conf_fixup_missing(); +out: cp_smbconfig_destroy(); return ret; } int cp_parse_reload_smbconf(const char *smbconf) { - return __cp_parse_smbconfig(smbconf, - groups_callback, + return __cp_parse_smbconfig(smbconf, groups_callback, GROUPS_CALLBACK_REINIT); } int cp_parse_smbconf(const char *smbconf) { - return __cp_parse_smbconfig(smbconf, - groups_callback, - GROUPS_CALLBACK_STARTUP_INIT); + return __cp_parse_smbconfig(smbconf, groups_callback, + GROUPS_CALLBACK_INIT); } int cp_parse_pwddb(const char *pwddb) From patchwork Mon Aug 8 22:02:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Atte_Heikkil=C3=A4?= X-Patchwork-Id: 12939149 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A7239C3F6B0 for ; Mon, 8 Aug 2022 22:02:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238465AbiHHWCd (ORCPT ); Mon, 8 Aug 2022 18:02:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44968 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238347AbiHHWCa (ORCPT ); Mon, 8 Aug 2022 18:02:30 -0400 Received: from mail-lj1-x22b.google.com (mail-lj1-x22b.google.com [IPv6:2a00:1450:4864:20::22b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 232861BE93 for ; Mon, 8 Aug 2022 15:02:28 -0700 (PDT) Received: by mail-lj1-x22b.google.com with SMTP id x9so7551529ljj.13 for ; Mon, 08 Aug 2022 15:02:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=392Dmd/PigXAyQNBc3FJhswVSBZOfqlGTZD5FExUpT0=; b=hoLtK7dk10dArUk7oqXQ96I/TNZaF6SBdjng8Ruunce4lNMHnKPxot+OUBJC6s00cS lwK6ENQ3AhGt4ELJY+EYbTluI9iMhiMPI5G/97aa+We44TYXROy9EnEEN8OWxTFeMlTI nmaJ2qqMmnsB/wsfnU/loxkF8tE49n6oHB+Z4ckxYZGGi8NDIKW8ae7O3tovYHD6Criu HQ9GQxyCUth29YEy1Jd0Qv7aH6pwrUf7E8IqzlY741JmIl98h/DAWyWqlUinthzDNTdy 0UzFzc/582P1XmYJD+E0fB5aNx07h2/cwhB3d8DHXw/b0eTYu2B/TxTEEBeGMTiMOkWX ExPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=392Dmd/PigXAyQNBc3FJhswVSBZOfqlGTZD5FExUpT0=; b=kuPftn0DsQW66Xh2ISNPbFs66bJOBSK/04+JYeX2wvb4dkQX+vVV7quXOVaZho0VAX uFSeRAs69UM2YEaEXKCdKyhrShiiUjxnR7MvCLW5hM80JJcJoIYmoKj4UBDJ0d657leh yuB7svOxnuBLYCmkVOws5TKKNSYnHqulAfj2xwoDol11oxeY6CTUDHju5NfUYi3xjU6Z tM4kJ6M4uI5LqkNJ6YWdXvTbbVcuSEvV3EuLKgMBNLlld7G6E9hBII5uGMox9DoFoNp6 NmhMjCa/ooIjQVqtNNXeE/hbPymEuvuh/Gde/oZmH0yRZVTFeEj2ch13Z0bKZC+/I7iY Gy5A== X-Gm-Message-State: ACgBeo2URfv89R+fVsj/3yEEVUSzGljeK5jhygsXvbQB1RGAn9mhwSnO 8jpbg2FzRzrtqnT4dkwDjWNdo33s2Uk= X-Google-Smtp-Source: AA6agR4YV0/bpLHMNbuOx5b8ssWcX/o0yrX4/qaxylnbYUip6cN852DLN2fMoI0XTOQhuIIrufo/xw== X-Received: by 2002:a2e:9d59:0:b0:25e:1eda:86f6 with SMTP id y25-20020a2e9d59000000b0025e1eda86f6mr6546902ljj.315.1659996146411; Mon, 08 Aug 2022 15:02:26 -0700 (PDT) Received: from pohjola.lan (mobile-user-c1d2eb-134.dhcp.inet.fi. [193.210.235.134]) by smtp.gmail.com with ESMTPSA id b15-20020a2eb90f000000b0025e72aae6bdsm1477817ljb.28.2022.08.08.15.02.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Aug 2022 15:02:26 -0700 (PDT) From: atheik To: linux-cifs@vger.kernel.org Cc: atheik Subject: [PATCH v2 3/3] ksmbd-tools: inform ksmbd of stale share config Date: Tue, 9 Aug 2022 01:02:16 +0300 Message-Id: <20220808220216.17235-3-atteh.mailbox@gmail.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20220808220216.17235-1-atteh.mailbox@gmail.com> References: <20220808220216.17235-1-atteh.mailbox@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-cifs@vger.kernel.org When initializing a share from a group, flag the share with KSMBD_SHARE_FLAG_UPDATE if the group callback mode denotes that the config file was reloaded. If the share was flagged, then later when handling a tree connect request, flag the connection with KSMBD_TREE_CONN_FLAG_UPDATE to inform ksmbd that its cached share config is stale. If there are no failures when handling the request, remove the share flag. Signed-off-by: Atte Heikkilä --- include/linux/ksmbd_server.h | 2 ++ lib/management/share.c | 3 +++ lib/management/tree_conn.c | 8 +++++++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/include/linux/ksmbd_server.h b/include/linux/ksmbd_server.h index 6705dac..7e86d5d 100644 --- a/include/linux/ksmbd_server.h +++ b/include/linux/ksmbd_server.h @@ -235,6 +235,7 @@ enum KSMBD_TREE_CONN_STATUS { #define KSMBD_SHARE_FLAG_STREAMS (1 << 11) #define KSMBD_SHARE_FLAG_FOLLOW_SYMLINKS (1 << 12) #define KSMBD_SHARE_FLAG_ACL_XATTR (1 << 13) +#define KSMBD_SHARE_FLAG_UPDATE (1 << 14) /* * Tree connect request flags. @@ -250,6 +251,7 @@ enum KSMBD_TREE_CONN_STATUS { #define KSMBD_TREE_CONN_FLAG_READ_ONLY (1 << 1) #define KSMBD_TREE_CONN_FLAG_WRITABLE (1 << 2) #define KSMBD_TREE_CONN_FLAG_ADMIN_ACCOUNT (1 << 3) +#define KSMBD_TREE_CONN_FLAG_UPDATE (1 << 4) /* * RPC over IPC. diff --git a/lib/management/share.c b/lib/management/share.c index acd6d3f..e9492b5 100644 --- a/lib/management/share.c +++ b/lib/management/share.c @@ -605,6 +605,9 @@ static void init_share_from_group(struct ksmbd_share *share, if (!g_ascii_strcasecmp(share->name, "ipc$")) set_share_flag(share, KSMBD_SHARE_FLAG_PIPE); + if (group->cb_mode == GROUPS_CALLBACK_REINIT) + set_share_flag(share, KSMBD_SHARE_FLAG_UPDATE); + g_hash_table_foreach(group->kv, process_group_kv, share); fixup_missing_fields(share); diff --git a/lib/management/tree_conn.c b/lib/management/tree_conn.c index 10304d1..f5c5749 100644 --- a/lib/management/tree_conn.c +++ b/lib/management/tree_conn.c @@ -73,6 +73,8 @@ int tcm_handle_tree_connect(struct ksmbd_tree_connect_request *req, set_conn_flag(conn, KSMBD_TREE_CONN_FLAG_WRITABLE); if (test_share_flag(share, KSMBD_SHARE_FLAG_READONLY)) set_conn_flag(conn, KSMBD_TREE_CONN_FLAG_READ_ONLY); + if (test_share_flag(share, KSMBD_SHARE_FLAG_UPDATE)) + set_conn_flag(conn, KSMBD_TREE_CONN_FLAG_UPDATE); if (shm_open_connection(share)) { resp->status = KSMBD_TREE_CONN_STATUS_TOO_MANY_CONNS; @@ -207,8 +209,12 @@ bind: tcm_tree_conn_free(conn); put_ksmbd_user(user); } + + g_rw_lock_writer_lock(&share->update_lock); + clear_share_flag(share, KSMBD_SHARE_FLAG_UPDATE); + g_rw_lock_writer_unlock(&share->update_lock); + return 0; - out_error: tcm_tree_conn_free(conn); shm_close_connection(share);