Whamcloud - gitweb
LU-16056 libcfs: restore umask handling in kernel threads 33/48233/3
authorAndreas Dilger <adilger@whamcloud.com>
Tue, 16 Aug 2022 15:52:26 +0000 (15:52 +0000)
committerOleg Drokin <green@whamcloud.com>
Thu, 1 Sep 2022 05:52:25 +0000 (05:52 +0000)
This reverts commit 9013eb2bb5 which incorrectly assumes that Lustre
service threads do not modify umask.  A quick grep shows that umask
is modified in osd-ldiskfs __osd_create().

If some other thread sharing the same fs context is modifying umask
in an incompatible way (which includes all Lustre threads after
this patch) then it will occasionally break created file access
permissions for Lustre.

Change-Id: I589b72e4286dc84f4e3f1a0c54fe31aa988e6c18
Fixes: 9013eb2bb5 (LU-9859 libcfs: don't call unshare_fs_struct()")
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/48233
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Shuichi Ihara <sihara@ddn.com>
Reviewed-by: Lai Siyao <lai.siyao@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Neil Brown <neilb@suse.de>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/ldlm/ldlm_lib.c
lustre/ldlm/ldlm_request.c
lustre/obdclass/llog.c
lustre/ptlrpc/import.c
lustre/ptlrpc/pinger.c
lustre/ptlrpc/ptlrpcd.c
lustre/ptlrpc/service.c

index aacf22f..62c182c 100644 (file)
@@ -39,6 +39,7 @@
 #define DEBUG_SUBSYSTEM S_LDLM
 
 #include <cl_object.h>
 #define DEBUG_SUBSYSTEM S_LDLM
 
 #include <cl_object.h>
+#include <linux/fs_struct.h>
 #include <linux/jiffies.h>
 #include <linux/kernel.h>
 #include <linux/kthread.h>
 #include <linux/jiffies.h>
 #include <linux/kernel.h>
 #include <linux/kthread.h>
@@ -2716,6 +2717,7 @@ static int target_recovery_thread(void *arg)
        int rc = 0;
 
        ENTRY;
        int rc = 0;
 
        ENTRY;
+       unshare_fs_struct();
        OBD_ALLOC_PTR(thread);
        if (thread == NULL)
                RETURN(-ENOMEM);
        OBD_ALLOC_PTR(thread);
        if (thread == NULL)
                RETURN(-ENOMEM);
index 02deec2..6fe7af9 100644 (file)
@@ -56,6 +56,7 @@
 
 #define DEBUG_SUBSYSTEM S_LDLM
 
 
 #define DEBUG_SUBSYSTEM S_LDLM
 
+#include <linux/fs_struct.h>
 #include <lustre_errno.h>
 #include <lustre_dlm.h>
 #include <obd_class.h>
 #include <lustre_errno.h>
 #include <lustre_dlm.h>
 #include <obd_class.h>
@@ -2609,6 +2610,7 @@ static int ldlm_lock_replay_thread(void *data)
 {
        struct obd_import *imp = data;
 
 {
        struct obd_import *imp = data;
 
+       unshare_fs_struct();
        CDEBUG(D_HA, "lock replay thread %s to %s@%s\n",
               imp->imp_obd->obd_name, obd2cli_tgt(imp->imp_obd),
               imp->imp_connection->c_remote_uuid.uuid);
        CDEBUG(D_HA, "lock replay thread %s to %s@%s\n",
               imp->imp_obd->obd_name, obd2cli_tgt(imp->imp_obd),
               imp->imp_connection->c_remote_uuid.uuid);
index 1af4ae5..79f89fe 100644 (file)
@@ -42,6 +42,7 @@
 
 #define DEBUG_SUBSYSTEM S_LOG
 
 
 #define DEBUG_SUBSYSTEM S_LOG
 
+#include <linux/fs_struct.h>
 #include <linux/pid_namespace.h>
 #include <linux/kthread.h>
 #include <llog_swab.h>
 #include <linux/pid_namespace.h>
 #include <linux/kthread.h>
 #include <llog_swab.h>
@@ -836,6 +837,7 @@ static int llog_process_thread_daemonize(void *arg)
        }
        task_unlock(lpi->lpi_reftask);
 
        }
        task_unlock(lpi->lpi_reftask);
 
+       unshare_fs_struct();
        /* client env has no keys, tags is just 0 */
        rc = lu_env_init(&env, LCT_LOCAL | LCT_MG_THREAD);
        if (rc)
        /* client env has no keys, tags is just 0 */
        rc = lu_env_init(&env, LCT_LOCAL | LCT_MG_THREAD);
        if (rc)
index 2afcf6a..82dd394 100644 (file)
@@ -35,6 +35,7 @@
 
 #define DEBUG_SUBSYSTEM S_RPC
 
 
 #define DEBUG_SUBSYSTEM S_RPC
 
+#include <linux/fs_struct.h>
 #include <linux/kthread.h>
 #include <linux/delay.h>
 #include <obd_support.h>
 #include <linux/kthread.h>
 #include <linux/delay.h>
 #include <obd_support.h>
@@ -1508,6 +1509,7 @@ static int ptlrpc_invalidate_import_thread(void *data)
        struct obd_import *imp = data;
 
        ENTRY;
        struct obd_import *imp = data;
 
        ENTRY;
+       unshare_fs_struct();
        CDEBUG(D_HA, "thread invalidate import %s to %s@%s\n",
               imp->imp_obd->obd_name, obd2cli_tgt(imp->imp_obd),
               imp->imp_connection->c_remote_uuid.uuid);
        CDEBUG(D_HA, "thread invalidate import %s to %s@%s\n",
               imp->imp_obd->obd_name, obd2cli_tgt(imp->imp_obd),
               imp->imp_connection->c_remote_uuid.uuid);
index 9bcfebd..72825b2 100644 (file)
@@ -35,6 +35,7 @@
 
 #define DEBUG_SUBSYSTEM S_RPC
 
 
 #define DEBUG_SUBSYSTEM S_RPC
 
+#include <linux/fs_struct.h>
 #include <linux/kthread.h>
 #include <linux/workqueue.h>
 #include <obd_support.h>
 #include <linux/kthread.h>
 #include <linux/workqueue.h>
 #include <obd_support.h>
@@ -465,6 +466,7 @@ static int ping_evictor_main(void *arg)
        time64_t expire_time;
 
        ENTRY;
        time64_t expire_time;
 
        ENTRY;
+       unshare_fs_struct();
        CDEBUG(D_HA, "Starting Ping Evictor\n");
        pet_state = PET_READY;
        while (1) {
        CDEBUG(D_HA, "Starting Ping Evictor\n");
        pet_state = PET_READY;
        while (1) {
index 1f540af..9d29cc7 100644 (file)
@@ -50,6 +50,7 @@
 
 #define DEBUG_SUBSYSTEM S_RPC
 
 
 #define DEBUG_SUBSYSTEM S_RPC
 
+#include <linux/fs_struct.h>
 #include <linux/kthread.h>
 #include <libcfs/libcfs.h>
 #include <lustre_net.h>
 #include <linux/kthread.h>
 #include <libcfs/libcfs.h>
 #include <lustre_net.h>
@@ -436,6 +437,7 @@ static int ptlrpcd(void *arg)
        int                             exit = 0;
 
        ENTRY;
        int                             exit = 0;
 
        ENTRY;
+       unshare_fs_struct();
        if (cfs_cpt_bind(cfs_cpt_tab, pc->pc_cpt) != 0)
                CWARN("Failed to bind %s on CPT %d\n", pc->pc_name, pc->pc_cpt);
 
        if (cfs_cpt_bind(cfs_cpt_tab, pc->pc_cpt) != 0)
                CWARN("Failed to bind %s on CPT %d\n", pc->pc_name, pc->pc_cpt);
 
index abe24c4..4453e4d 100644 (file)
@@ -31,6 +31,7 @@
 
 #define DEBUG_SUBSYSTEM S_RPC
 
 
 #define DEBUG_SUBSYSTEM S_RPC
 
+#include <linux/fs_struct.h>
 #include <linux/kthread.h>
 #include <linux/ratelimit.h>
 
 #include <linux/kthread.h>
 #include <linux/ratelimit.h>
 
@@ -2751,6 +2752,7 @@ static int ptlrpc_main(void *arg)
        int counter = 0, rc = 0;
 
        ENTRY;
        int counter = 0, rc = 0;
 
        ENTRY;
+       unshare_fs_struct();
 
        thread->t_task = current;
        thread->t_pid = current->pid;
 
        thread->t_task = current;
        thread->t_pid = current->pid;
@@ -2957,6 +2959,7 @@ static int ptlrpc_hr_main(void *arg)
        struct lu_env *env;
        int rc;
 
        struct lu_env *env;
        int rc;
 
+       unshare_fs_struct();
        OBD_ALLOC_PTR(env);
        if (env == NULL)
                RETURN(-ENOMEM);
        OBD_ALLOC_PTR(env);
        if (env == NULL)
                RETURN(-ENOMEM);