Details
-
Bug
-
Resolution: Fixed
-
Minor
-
None
-
None
-
3
-
9223372036854775807
Description
osd_fallocate_preallocate() can extend current transaction but also restart it while holding an object's lock. It leads to the following deadlock between two mdt treads doing
fallocate:
crash> bt 44982 PID: 44982 TASK: ffff9f6d53555580 CPU: 13 COMMAND: "mdt02_016" #0 [ffffbcd90e5679d0] __schedule at ffffffffa2331fe8 #1 [ffffbcd90e567a38] schedule at ffffffffa233241a #2 [ffffbcd90e567a50] wait_transaction_locked at ffffffffc106f08a [jbd2] #3 [ffffbcd90e567aa8] add_transaction_credits at ffffffffc106f67a [jbd2] #4 [ffffbcd90e567b08] start_this_handle at ffffffffc106fa10 [jbd2] #5 [ffffbcd90e567b98] jbd2__journal_restart at ffffffffc107015e [jbd2] #6 [ffffbcd90e567be0] osd_fallocate_preallocate.constprop.0 at ffffffffc23e3b1b [osd_ldiskfs] #7 [ffffbcd90e567c70] osd_fallocate at ffffffffc23e40cb [osd_ldiskfs] #8 [ffffbcd90e567ca0] mdt_object_fallocate at ffffffffc21418f9 [mdt] #9 [ffffbcd90e567ce8] mdt_fallocate_hdl at ffffffffc2144125 [mdt] #10 [ffffbcd90e567d98] tgt_handle_request0 at ffffffffc1dea9e7 [ptlrpc] #11 [ffffbcd90e567dc0] tgt_request_handle at ffffffffc1deba0b [ptlrpc] #12 [ffffbcd90e567e30] ptlrpc_server_handle_request at ffffffffc1d362fd [ptlrpc] #13 [ffffbcd90e567e98] ptlrpc_main at ffffffffc1d3825e [ptlrpc] #14 [ffffbcd90e567f18] kthread at ffffffffa191fae6 #15 [ffffbcd90e567f50] ret_from_fork at ffffffffa1802d9f
and setxattr:
bt 44939 PID: 44939 TASK: ffff9f676a7f1c80 CPU: 6 COMMAND: "mdt03_014" #0 [ffffbcd90e4b7968] __schedule at ffffffffa2331fe8 #1 [ffffbcd90e4b79d0] schedule at ffffffffa233241a #2 [ffffbcd90e4b79e8] wait_transaction_locked at ffffffffc106f08a [jbd2] #3 [ffffbcd90e4b7a40] add_transaction_credits at ffffffffc106f67a [jbd2] #4 [ffffbcd90e4b7aa0] start_this_handle at ffffffffc106fa10 [jbd2] #5 [ffffbcd90e4b7b30] jbd2__journal_start at ffffffffc106ff7b [jbd2] #6 [ffffbcd90e4b7b70] __ldiskfs_journal_start_sb at ffffffffc22af0a6 [ldiskfs] #7 [ffffbcd90e4b7bb0] osd_trans_start at ffffffffc23c53bc [osd_ldiskfs] #8 [ffffbcd90e4b7be8] tgt_client_data_update at ffffffffc1ddb389 [ptlrpc] #9 [ffffbcd90e4b7c28] tgt_client_new at ffffffffc1dde91b [ptlrpc] #10 [ffffbcd90e4b7c58] mdt_obd_connect at ffffffffc20e81a6 [mdt] #11 [ffffbcd90e4b7cb0] obd_connect at ffffffffc1d806dc [ptlrpc] #12 [ffffbcd90e4b7cf0] target_handle_connect at ffffffffc1d86cbb [ptlrpc] #13 [ffffbcd90e4b7dc0] tgt_request_handle at ffffffffc1debbcd [ptlrpc] #14 [ffffbcd90e4b7e30] ptlrpc_server_handle_request at ffffffffc1d362fd [ptlrpc] #15 [ffffbcd90e4b7e98] ptlrpc_main at ffffffffc1d3825e [ptlrpc] #16 [ffffbcd90e4b7f18] kthread at ffffffffa191fae6 #17 [ffffbcd90e4b7f50] ret_from_fork at ffffffffa1802d9f crash> ps -m 44939 [0 00:29:42.671] [UN] PID: 44939 TASK: ffff9f676a7f1c80 CPU: 6 COMMAND: "mdt03_014"