Jianbo Liu
2aeeef906d
bonding: change ipsec_lock from spin lock to mutex
In the cited commit, bond->ipsec_lock is added to protect ipsec_list,
hence xdo_dev_state_add and xdo_dev_state_delete are called inside
this lock. As ipsec_lock is a spin lock and such xfrmdev ops may sleep,
"scheduling while atomic" will be triggered when changing bond's
active slave.
[ 101.055189] BUG: scheduling while atomic: bash/902/0x00000200
[ 101.055726] Modules linked in:
[ 101.058211] CPU: 3 PID: 902 Comm: bash Not tainted 6.9.0-rc4+ #1
[ 101.058760] Hardware name:
[ 101.059434] Call Trace:
[ 101.059436] <TASK>
[ 101.060873] dump_stack_lvl+0x51/0x60
[ 101.061275] __schedule_bug+0x4e/0x60
[ 101.061682] __schedule+0x612/0x7c0
[ 101.062078] ? __mod_timer+0x25c/0x370
[ 101.062486] schedule+0x25/0xd0
[ 101.062845] schedule_timeout+0x77/0xf0
[ 101.063265] ? asm_common_interrupt+0x22/0x40
[ 101.063724] ? __bpf_trace_itimer_state+0x10/0x10
[ 101.064215] __wait_for_common+0x87/0x190
[ 101.064648] ? usleep_range_state+0x90/0x90
[ 101.065091] cmd_exec+0x437/0xb20 [mlx5_core]
[ 101.065569] mlx5_cmd_do+0x1e/0x40 [mlx5_core]
[ 101.066051] mlx5_cmd_exec+0x18/0x30 [mlx5_core]
[ 101.066552] mlx5_crypto_create_dek_key+0xea/0x120 [mlx5_core]
[ 101.067163] ? bonding_sysfs_store_option+0x4d/0x80 [bonding]
[ 101.067738] ? kmalloc_trace+0x4d/0x350
[ 101.068156] mlx5_ipsec_create_sa_ctx+0x33/0x100 [mlx5_core]
[ 101.068747] mlx5e_xfrm_add_state+0x47b/0xaa0 [mlx5_core]
[ 101.069312] bond_change_active_slave+0x392/0x900 [bonding]
[ 101.069868] bond_option_active_slave_set+0x1c2/0x240 [bonding]
[ 101.070454] __bond_opt_set+0xa6/0x430 [bonding]
[ 101.070935] __bond_opt_set_notify+0x2f/0x90 [bonding]
[ 101.071453] bond_opt_tryset_rtnl+0x72/0xb0 [bonding]
[ 101.071965] bonding_sysfs_store_option+0x4d/0x80 [bonding]
[ 101.072567] kernfs_fop_write_iter+0x10c/0x1a0
[ 101.073033] vfs_write+0x2d8/0x400
[ 101.073416] ? alloc_fd+0x48/0x180
[ 101.073798] ksys_write+0x5f/0xe0
[ 101.074175] do_syscall_64+0x52/0x110
[ 101.074576] entry_SYSCALL_64_after_hwframe+0x4b/0x53
As bond_ipsec_add_sa_all and bond_ipsec_del_sa_all are only called
from bond_change_active_slave, which requires holding the RTNL lock.
And bond_ipsec_add_sa and bond_ipsec_del_sa are xfrm state
xdo_dev_state_add and xdo_dev_state_delete APIs, which are in user
context. So ipsec_lock doesn't have to be spin lock, change it to
mutex, and thus the above issue can be resolved.
Fixes: 9a5605505d ("bonding: Add struct bond_ipesc to manage SA")
Signed-off-by: Jianbo Liu <jianbol@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
Acked-by: Jay Vosburgh <jv@jvosburgh.net>
Link: https://patch.msgid.link/20240823031056.110999-4-jianbol@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-08-27 13:11:37 -07:00
..
2024-05-01 18:07:37 +01:00
2024-08-15 13:07:55 -04:00
2024-06-05 10:18:06 +01:00
2024-05-14 20:21:04 +02:00
2024-07-10 10:46:32 -07:00
2024-08-13 13:09:54 +02:00
2024-07-24 20:59:29 +02:00
2024-07-14 07:56:32 -07:00
2024-03-05 11:21:18 -08:00
2024-07-10 10:28:23 -07:00
2023-06-15 22:33:26 -07:00
2024-07-09 11:31:32 +02:00
2024-01-02 12:41:16 +00:00
2024-02-02 10:57:55 -08:00
2024-04-09 17:09:05 -07:00
2023-12-24 15:22:50 +00:00
2024-06-25 11:10:18 +02:00
2024-08-15 12:07:04 +02:00
2022-07-22 12:53:22 +01:00
2023-03-21 21:32:18 -07:00
2024-05-14 10:53:19 -07:00
2022-08-09 22:14:02 -07:00
2021-12-13 12:34:09 +00:00
2024-02-06 13:17:54 +01:00
2022-11-02 20:38:13 -07:00
2024-02-06 13:17:54 +01:00
2024-08-27 13:11:37 -07:00
2021-03-26 17:43:55 +01:00
2024-02-09 10:01:09 -08:00
2022-11-16 11:31:47 +02:00
2024-07-09 11:36:00 +02:00
2024-03-06 21:01:26 +01:00
2023-01-27 11:19:46 +00:00
2024-05-13 14:58:12 -07:00
2021-12-22 15:03:47 -08:00
2022-07-22 12:53:22 +01:00
2023-07-14 20:39:29 -07:00
2022-07-24 18:39:17 -06:00
2023-07-27 17:17:32 -07:00
2022-07-22 12:53:22 +01:00
2023-01-20 09:33:22 +00:00
2024-06-05 10:24:57 +01:00
2024-02-28 10:39:21 +00:00
2023-08-14 08:01:06 +01:00
2023-10-24 13:08:14 -07:00
2024-08-16 09:59:32 +01:00
2024-05-08 10:35:09 +01:00
2024-05-08 18:49:51 -07:00
2024-04-01 10:49:28 +01:00
2024-05-29 17:34:49 -07:00
2024-02-06 11:45:53 +01:00
2024-03-05 19:21:17 -08:00
2022-07-22 12:53:22 +01:00
2022-07-22 12:53:22 +01:00
2024-04-01 21:27:08 -07:00
2022-07-22 12:53:22 +01:00
2021-12-06 16:06:02 -08:00
2024-01-03 16:42:48 -08:00
2022-07-28 22:21:54 -07:00
2024-07-15 09:14:39 -07:00
2024-06-12 17:56:00 -07:00
2023-11-02 09:31:02 +01:00
2023-04-12 16:40:39 -07:00
2022-12-01 15:09:10 +01:00
2023-08-08 15:58:23 -07:00
2022-07-22 12:53:22 +01:00
2021-10-18 12:54:41 +01:00
2024-04-01 21:44:34 -07:00
2022-10-31 10:43:04 +00:00
2024-04-01 10:49:28 +01:00
2024-05-14 10:49:50 -07:00
2023-06-10 00:11:41 -07:00
2024-05-07 01:35:55 +02:00
2022-07-22 12:53:22 +01:00
2023-07-28 14:07:59 -07:00
2024-04-30 18:46:52 -07:00
2022-07-22 12:53:22 +01:00
2021-06-28 14:29:45 -07:00
2024-05-08 10:35:09 +01:00
2024-05-23 10:19:39 +02:00
2023-11-20 11:43:03 +01:00
2024-02-26 18:40:34 -08:00
2022-07-22 12:53:22 +01:00
2023-08-15 13:57:51 -07:00
2024-05-13 18:19:09 -06:00
2024-06-25 11:37:45 +02:00
2022-02-07 20:12:45 -08:00
2021-10-15 11:33:08 +01:00
2024-05-23 14:14:23 -07:00
2023-12-22 22:15:35 +00:00
2024-03-06 12:37:06 +00:00
2024-06-10 11:54:18 +01:00
2024-02-28 11:19:41 +00:00
2021-11-16 13:16:54 +00:00
2024-04-29 13:32:01 +01:00
2024-07-14 07:34:16 -07:00
2024-04-01 10:49:28 +01:00
2024-07-18 11:11:02 +02:00
2024-07-15 09:14:39 -07:00
2023-04-22 01:39:41 +02:00
2024-06-05 10:06:00 +01:00
2022-09-29 07:18:00 +02:00
2022-07-22 12:53:22 +01:00
2022-10-31 20:14:27 -07:00
2024-06-26 13:22:42 +02:00
2024-03-01 08:42:31 +00:00
2023-08-22 21:40:40 +02:00
2024-08-19 18:36:12 -07:00
2021-03-23 14:14:50 -07:00
2023-08-04 15:33:17 -07:00
2023-08-04 15:33:17 -07:00
2024-07-15 08:51:01 -07:00
2023-07-20 10:46:28 +02:00
2021-10-13 09:40:46 -07:00
2024-01-19 21:30:09 -08:00
2022-07-22 12:53:22 +01:00
2022-07-22 12:53:22 +01:00
2024-07-15 08:51:19 -07:00
2021-11-07 19:25:29 +00:00
2023-08-18 16:05:26 +02:00
2024-07-11 17:22:04 -07:00
2022-10-12 12:57:19 +02:00
2024-04-25 08:20:54 -07:00
2024-02-29 14:24:56 -08:00
2021-10-29 13:23:51 +01:00
2021-03-26 15:14:56 -07:00
2022-07-22 12:53:22 +01:00
2024-05-13 18:29:23 -07:00
2022-11-18 12:14:55 +00:00
2022-07-22 12:53:22 +01:00
2024-07-24 20:59:29 +02:00
2024-07-24 20:59:29 +02:00
2022-05-11 12:43:10 +01:00
2024-02-07 18:55:10 -08:00
2021-12-10 06:38:26 -08:00
2024-06-01 15:11:52 -07:00
2023-12-04 18:04:05 -08:00
2022-07-22 12:53:22 +01:00
2023-11-20 10:15:16 -08:00
2024-05-19 09:21:03 -07:00
2024-05-19 09:21:03 -07:00
2024-07-02 18:59:33 -07:00
2022-07-22 12:53:22 +01:00
2024-04-25 15:24:23 -07:00
2023-11-20 11:43:45 +01:00
2023-07-14 20:39:29 -07:00
2023-08-04 15:33:50 -07:00
2024-04-01 10:49:28 +01:00
2023-07-14 20:39:30 -07:00
2023-06-02 09:55:22 +01:00
2024-03-29 09:46:39 +00:00
2024-02-02 10:57:55 -08:00
2022-07-22 12:53:22 +01:00
2024-04-30 18:46:52 -07:00
2024-03-07 21:12:43 -08:00
2024-07-11 18:11:31 -07:00
2022-07-22 12:53:22 +01:00
2023-04-06 12:01:20 -07:00
2023-03-17 08:56:37 +00:00
2024-04-19 11:34:07 +01:00
2024-05-23 10:19:34 +02:00
2024-06-06 15:18:04 +02:00
2022-08-01 11:59:23 -07:00
2024-04-30 18:32:38 -07:00
2023-06-19 11:32:58 -07:00
2024-04-01 11:28:32 +01:00
2023-07-14 20:39:30 -07:00
2024-05-13 17:33:57 -07:00
2024-06-05 12:34:54 +01:00
2024-04-26 10:46:41 +02:00
2024-05-10 18:52:45 -07:00
2022-07-22 12:53:22 +01:00
2024-05-30 18:29:38 -07:00
2024-06-24 16:41:23 -07:00
2024-05-30 18:29:38 -07:00
2021-04-28 14:06:45 -07:00
2024-04-30 13:24:48 +02:00
2022-10-25 11:35:16 +02:00
2024-06-24 16:41:22 -07:00
2023-10-04 11:49:20 -07:00
2022-07-22 12:53:22 +01:00
2022-07-18 11:24:10 +01:00
2024-02-16 09:36:37 +00:00
2024-02-14 10:49:37 +01:00
2024-06-12 06:39:04 +01:00
2023-12-04 14:45:26 -08:00
2024-06-12 06:39:04 +01:00
2024-07-08 14:07:31 -07:00
2024-05-09 20:25:55 -07:00
2023-07-28 14:07:59 -07:00
2024-04-25 12:41:37 -07:00
2023-08-01 15:06:27 -07:00
2022-12-12 15:04:39 -08:00
2022-07-22 12:53:22 +01:00
2024-04-01 10:49:28 +01:00
2024-04-07 02:42:36 -04:00
2023-09-14 16:16:36 +02:00
2023-11-16 22:33:31 +00:00
2023-03-18 12:23:34 +00:00
2022-07-22 12:53:22 +01:00
2024-05-08 08:51:20 +02:00
2024-07-02 15:26:57 +02:00
2023-12-14 16:38:59 +01:00
2024-07-15 13:19:17 -07:00
2024-05-08 08:51:20 +02:00