From 8ffbe6b82fac1d3e4d4391bcba74dc2ee1411a69 Mon Sep 17 00:00:00 2001 From: Wang Shilong Date: Sat, 3 Aug 2019 14:27:22 +0800 Subject: [PATCH] LU-12627 ofd: reset fti_attr in ofd_lvbo_update() This patch try to fix following panic: (ofd_internal.h:440:tsi2ofd_info()) ASSERTION( info->fti_attr.la_valid == 0 ) failed: (ofd_internal.h:440:tsi2ofd_info()) LBUG [ 5321.108598] Call Trace: [ 5321.109347] [] libcfs_call_trace+0x8c/0xc0 [libcfs] [ 5321.111342] [] lbug_with_loc+0x4c/0xa0 [libcfs] [ 5321.113026] [] ofd_preprw+0xcfa/0x1160 [ofd] [ 5321.114643] [] tgt_brw_write+0xc7c/0x1cf0 [ptlrpc] [ 5321.116373] [] tgt_request_handle+0x91a/0x15c0 [ptlrpc] [ 5321.118230] [] ptlrpc_server_handle_request+0x256/0xb00 [ptlrpc] [ 5321.120318] [] ptlrpc_main+0xbac/0x1560 [ptlrpc] [ 5321.122001] [] kthread+0xd1/0xe0 [ 5321.123023] [] ret_from_fork_nospec_end+0x0/0x39 [ 5321.124066] [] 0xffffffffffffffff If this is server lock, tgt_brw_lock() will finally call ofd_lvbo_update() upon lock canceling which will use @fti_attr and pollute value: |->ptlrpc_main |->lu_context_enter(le_ctx) |->tgt_brw_write |->tgt_brw_lock |->tgt_extent_lock |->ldlm_cli_enqueue_local |->ldlm_lock_enqueue |->ldlm_run_ast_work |->ptlrpc_check_set |->ldlm_cb_interpret |->ldlm_handle_ast_error |->ofd_lvbo_update |->ofd_attr_get polluted @info->fti_attr |->tgt_brw_write |->ofd_preprw |->tsi2ofd_info |->ASSERTION(info->fti_attr.la_valid == 0) |->lu_context_exit(le_ctx)--->memset @fti_attr To fix this problem, reset fti_attr->la_valid before ofd_lvbo_update() return just like what offd_lvbo_init() did. Change-Id: Ib6b448dd21603cfe0305d8425862a96ef3f7fee8 Signed-off-by: Wang Shilong Reviewed-on: https://review.whamcloud.com/35685 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Alex Zhuravlev Reviewed-by: Andreas Dilger Reviewed-by: Oleg Drokin --- lustre/ofd/ofd_lvb.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lustre/ofd/ofd_lvb.c b/lustre/ofd/ofd_lvb.c index d9638bc..8c6dfbe 100644 --- a/lustre/ofd/ofd_lvb.c +++ b/lustre/ofd/ofd_lvb.c @@ -334,6 +334,7 @@ disk_update: } unlock_res(res); + info->fti_attr.la_valid = 0; out_obj: ofd_object_put(env, fo); out: -- 1.8.3.1