From 8bf2fb4db6ac489b7c1d48c709fea76d6f534c7c Mon Sep 17 00:00:00 2001 From: Andreas Dilger Date: Thu, 1 Sep 2022 10:31:48 -0700 Subject: [PATCH] LU-16056 libcfs: restore umask handling in kernel threads 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. Lustre-change: https://review.whamcloud.com/48233 Lustre-commit: c92bdd97d99cc755a187987f3d5963adeb3ea475 Change-Id: I589b72e4286dc84f4e3f1a0c54fe31aa988e6c18 Fixes: 9013eb2bb5 (LU-9859 libcfs: don't call unshare_fs_struct()") Signed-off-by: Andreas Dilger Reviewed-by: Shuichi Ihara Reviewed-by: Lai Siyao Reviewed-by: James Simmons Reviewed-by: Neil Brown Reviewed-on: https://review.whamcloud.com/48414 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Oleg Drokin --- lustre/ldlm/ldlm_lib.c | 2 ++ lustre/ldlm/ldlm_request.c | 2 ++ lustre/obdclass/llog.c | 2 ++ lustre/ptlrpc/import.c | 2 ++ lustre/ptlrpc/pinger.c | 2 ++ lustre/ptlrpc/ptlrpcd.c | 2 ++ lustre/ptlrpc/service.c | 3 +++ 7 files changed, 15 insertions(+) diff --git a/lustre/ldlm/ldlm_lib.c b/lustre/ldlm/ldlm_lib.c index aacf22f..62c182c 100644 --- a/lustre/ldlm/ldlm_lib.c +++ b/lustre/ldlm/ldlm_lib.c @@ -39,6 +39,7 @@ #define DEBUG_SUBSYSTEM S_LDLM #include +#include #include #include #include @@ -2716,6 +2717,7 @@ static int target_recovery_thread(void *arg) int rc = 0; ENTRY; + unshare_fs_struct(); OBD_ALLOC_PTR(thread); if (thread == NULL) RETURN(-ENOMEM); diff --git a/lustre/ldlm/ldlm_request.c b/lustre/ldlm/ldlm_request.c index 048f5c3..38ca9ed 100644 --- a/lustre/ldlm/ldlm_request.c +++ b/lustre/ldlm/ldlm_request.c @@ -56,6 +56,7 @@ #define DEBUG_SUBSYSTEM S_LDLM +#include #include #include #include @@ -2609,6 +2610,7 @@ static int ldlm_lock_replay_thread(void *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); diff --git a/lustre/obdclass/llog.c b/lustre/obdclass/llog.c index e021ee4..24ed571 100644 --- a/lustre/obdclass/llog.c +++ b/lustre/obdclass/llog.c @@ -42,6 +42,7 @@ #define DEBUG_SUBSYSTEM S_LOG +#include #include #include #include @@ -824,6 +825,7 @@ static int llog_process_thread_daemonize(void *arg) } 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) diff --git a/lustre/ptlrpc/import.c b/lustre/ptlrpc/import.c index 77d9da0..1e0dd2d 100644 --- a/lustre/ptlrpc/import.c +++ b/lustre/ptlrpc/import.c @@ -35,6 +35,7 @@ #define DEBUG_SUBSYSTEM S_RPC +#include #include #include #include @@ -1507,6 +1508,7 @@ static int ptlrpc_invalidate_import_thread(void *data) 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); diff --git a/lustre/ptlrpc/pinger.c b/lustre/ptlrpc/pinger.c index 9bcfebd..72825b2 100644 --- a/lustre/ptlrpc/pinger.c +++ b/lustre/ptlrpc/pinger.c @@ -35,6 +35,7 @@ #define DEBUG_SUBSYSTEM S_RPC +#include #include #include #include @@ -465,6 +466,7 @@ static int ping_evictor_main(void *arg) time64_t expire_time; ENTRY; + unshare_fs_struct(); CDEBUG(D_HA, "Starting Ping Evictor\n"); pet_state = PET_READY; while (1) { diff --git a/lustre/ptlrpc/ptlrpcd.c b/lustre/ptlrpc/ptlrpcd.c index 1f540af..9d29cc7 100644 --- a/lustre/ptlrpc/ptlrpcd.c +++ b/lustre/ptlrpc/ptlrpcd.c @@ -50,6 +50,7 @@ #define DEBUG_SUBSYSTEM S_RPC +#include #include #include #include @@ -436,6 +437,7 @@ static int ptlrpcd(void *arg) 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); diff --git a/lustre/ptlrpc/service.c b/lustre/ptlrpc/service.c index abe24c4..4453e4d 100644 --- a/lustre/ptlrpc/service.c +++ b/lustre/ptlrpc/service.c @@ -31,6 +31,7 @@ #define DEBUG_SUBSYSTEM S_RPC +#include #include #include @@ -2751,6 +2752,7 @@ static int ptlrpc_main(void *arg) int counter = 0, rc = 0; ENTRY; + unshare_fs_struct(); 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; + unshare_fs_struct(); OBD_ALLOC_PTR(env); if (env == NULL) RETURN(-ENOMEM); -- 1.8.3.1