From c56b7d27123efe2947849967cc8e56cfb30f7809 Mon Sep 17 00:00:00 2001 From: Li Dongyang Date: Mon, 17 Apr 2023 21:13:03 +1000 Subject: [PATCH] LU-16745 mdc: md_open_data should keep ref on close_req md_open_data should keep a ref on mod_close_req, otherwise the mod_close_req could be freed before we try to access mod_close_req via md_open_data. Lustre-change: https://review.whamcloud.com/50656 Lustre-commit: ca716f763f89af192ab86678ee9d14f49c80cae6 Change-Id: I621f7db389854326db298d99957a0bce43024b6e Signed-off-by: Li Dongyang Reviewed-by: Andreas Dilger Reviewed-by: Lai Siyao Reviewed-on: https://review.whamcloud.com/c/ex/lustre-release/+/51198 Tested-by: jenkins Tested-by: Maloo --- lustre/include/obd.h | 2 ++ lustre/mdc/mdc_request.c | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/lustre/include/obd.h b/lustre/include/obd.h index 96098d4..7bdd275 100644 --- a/lustre/include/obd.h +++ b/lustre/include/obd.h @@ -1262,6 +1262,8 @@ static inline struct md_open_data *obd_mod_alloc(void) if (atomic_dec_and_test(&(mod)->mod_refcount)) { \ if ((mod)->mod_open_req) \ ptlrpc_req_finished((mod)->mod_open_req); \ + if ((mod)->mod_close_req) \ + ptlrpc_req_finished((mod)->mod_close_req);\ OBD_FREE_PTR(mod); \ } \ }) diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c index 343214b..b882f71 100644 --- a/lustre/mdc/mdc_request.c +++ b/lustre/mdc/mdc_request.c @@ -1026,14 +1026,16 @@ static int mdc_close(struct obd_export *exp, struct md_op_data *op_data, } out: - if (mod) { - if (rc != 0) - mod->mod_close_req = NULL; - /* Since now, mod is accessed through open_req only, - * thus close req does not keep a reference on mod anymore. */ - obd_mod_put(mod); - } - *request = req; + if (mod) { + if (rc != 0) + mod->mod_close_req = NULL; + if (mod->mod_close_req) + ptlrpc_request_addref(mod->mod_close_req); + /* Since now, mod is accessed through open_req only, + * thus close req does not keep a reference on mod anymore. */ + obd_mod_put(mod); + } + *request = req; RETURN(rc < 0 ? rc : saved_rc); } -- 1.8.3.1