From 068bc3f41eae1da1cee39e5839a1ab7c8851bbf4 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Tue, 1 Mar 2016 17:39:37 +0000 Subject: [PATCH] scst: Fix scst_resume_activity() Avoid that the following crash is triggered under memory pressure: PID: 12622 TASK: ffff88042069a040 CPU: 2 COMMAND: "scst_uid" #0 [ffff88040daebaa0] machine_kexec at ffffffff8103b60b #1 [ffff88040daebb00] crash_kexec at ffffffff810c99e2 #2 [ffff88040daebbd0] oops_end at ffffffff8152e1c0 #3 [ffff88040daebc00] die at ffffffff81010f5b #4 [ffff88040daebc30] do_general_protection at ffffffff8152dcb2 #5 [ffff88040daebc60] general_protection at ffffffff8152d485 [exception RIP: __scst_resume_activity+531] RIP: ffffffffa05ccbd3 RSP: ffff88040daebd10 RFLAGS: 00010046 RAX: 0000000000000063 RBX: dead000000100100 RCX: 0000000000000000 RDX: ffffffffa067c8a0 RSI: 0000000000000046 RDI: 0000000000000046 RBP: ffff88040daebd30 R8: 000000001c1471e6 R9: 6320746d676d2065 R10: 766974636120666f R11: 2064616568206f74 R12: ffff88068fea73a8 R13: ffff88068fea73a8 R14: ffff88040daebe08 R15: ffff88043a7eaab0 ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018 #6 [ffff88040daebd18] mutex_lock at ffffffff8152af9e #7 [ffff88040daebd38] scst_resume_activity at ffffffffa05ccc6d [scst] #8 [ffff88040daebd48] scst_unregister_virtual_device at ffffffffa05ce18c [scst] #9 [ffff88040daebd88] vdev_del_device at ffffffffa07ca1c0 [scst_vdisk] #10 [ffff88040daebdb8] vdisk_del_device at ffffffffa07ca4bf [scst_vdisk] #11 [ffff88040daebde8] scst_process_devt_mgmt_store at ffffffffa0605ab9 [scst] #12 [ffff88040daebe38] scst_devt_mgmt_store_work_fn at ffffffffa0605af6 [scst] #13 [ffff88040daebe48] scst_process_sysfs_works at ffffffffa0601c5f [scst] #14 [ffff88040daebe78] sysfs_work_thread_fn at ffffffffa0601e97 [scst] #15 [ffff88040daebee8] kthread at ffffffff8109e78e #16 [ffff88040daebf48] kernel_thread at ffffffff8100c28a Reported-by: Ashok Ramu Reported-by: Boris Protopopov git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@6818 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- scst/src/scst_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scst/src/scst_main.c b/scst/src/scst_main.c index d52fe3f42..b8fafe2f8 100644 --- a/scst/src/scst_main.c +++ b/scst/src/scst_main.c @@ -1092,7 +1092,8 @@ static void __scst_resume_activity(void) TRACE_MGMT_DBG("Moving delayed mgmt cmd %p to head of active " "mgmt cmd list", m); } - list_splice(&scst_delayed_mgmt_cmd_list, &scst_active_mgmt_cmd_list); + list_splice_init(&scst_delayed_mgmt_cmd_list, + &scst_active_mgmt_cmd_list); spin_unlock_irq(&scst_mcmd_lock); wake_up_all(&scst_mgmt_cmd_list_waitQ);