Re: Need some pointers to debug a target hang

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Nicholas,

(sorry it would be a long mail)

Sorry for the delay, I spent some test and debug work. I find the patch http://www.spinics.net/lists/target-devel/msg13530.html can solve two issues:
(a). iscsit_stop_session() on the top of iscsi_np stack.
(b).iscsi_check_for_session_reinstatement() on the top of iscsi_np stack, it is a must to reboot to recover.

But I also find two more issues.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Please let me explain my setup:
I have a target server, kernel version 4.4.21, it has a SATA HDD as a LUN, only one LUN.
I have two initiators, both login to the target.
Create two partitions on the LUN, each initiator mount a certain partition. Like initiator1 mount /dev/sdc1, initiator2 mount /dev/sdc2.
looks like this:
lszhu_DEV:~ # lsscsi
[0:0:0:0]    cd/dvd  HL-DT-ST DVD+-RW GHB0N    A1C0  /dev/sr0
[4:0:0:0]    disk    ATA      TOSHIBA DT01ACA2 MX4O  /dev/sda
[9:0:0:0]    disk    LIO-ORG  IBLOCK           4.0   /dev/sdc
lszhu_DEV:~ # lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   1.8T  0 disk
├─sda1   8:1    0    16G  0 part [SWAP]
├─sda2   8:2    0   200G  0 part /
└─sda3   8:3    0   1.6T  0 part /home
sdc      8:32   0 465.8G  0 disk
├─sdc1   8:33   0   200G  0 part
└─sdc2   8:34   0 265.8G  0 part /mnt
sr0     11:0    1  1024M  0 rom

bj-ha-5:~ # lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 465.8G  0 disk
├─sda1   8:1    0     8G  0 part [SWAP]
├─sda2   8:2    0   100G  0 part /
└─sda3   8:3    0 357.8G  0 part /home
sdb      8:16   0 465.8G  0 disk
sdc      8:32   0 465.8G  0 disk
├─sdc1   8:33   0   200G  0 part /mnt
└─sdc2   8:34   0 265.8G  0 part
sr0     11:0    1  1024M  0 rom

so you can see each initiator will read / write on their own partition from the LUN.

mount the partition like this:
mount -o dioread_nolock /dev/sdc1 /mnt, option dioread_nolock can help we reproduce this bug a little quicker.

Then run fio on both initiators like this:
fio -filename=/mnt/file1 -direct=1 -rw=randread -iodepth=64 -ioengin=libaio -bs=64K -size=5G -numjobs=24 -runtime=60000 -time_based -group_reporting -name=init1
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Here are the three more issues I found, kernel version 4.4.21
(1) The first one looks like this, it is quite rare, only once, I failed to get stack information for iscsi_trx and hard to reproduce, call stack of iscsi_np is here:

bj-ha-3:~ # ps -aux | grep iscsi
root     10501  0.0  0.0      0     0 ?        D    16:45   0:00 [iscsi_np]
root     10519  0.4  0.0      0     0 ?        S    16:49   0:02 [iscsi_ttx]
root     10520  2.2  0.0      0     0 ?        S    16:49   0:14 [iscsi_trx]
root     10533  0.9  0.0      0     0 ?        D    16:54   0:03 [iscsi_trx]
root 10547 0.0 0.0 10508 1552 pts/0 S+ 16:59 0:00 grep --color=auto iscsi
bj-ha-3:~ # cat /proc/10501/stack
[<ffffffff815334c9>] inet_csk_accept+0x269/0x2e0
[<ffffffff8155f4aa>] inet_accept+0x2a/0x100
[<ffffffff814d2a88>] kernel_accept+0x48/0xa0
[<ffffffffa06fe871>] iscsit_accept_np+0x31/0x230 [iscsi_target_mod]
[<ffffffffa06fefab>] iscsi_target_login_thread+0xeb/0xfd0 [iscsi_target_mod]
[<ffffffff810996bd>] kthread+0xbd/0xe0
[<ffffffff815e15bf>] ret_from_fork+0x3f/0x70
[<ffffffff81099600>] kthread+0x0/0xe0
[<ffffffffffffffff>] 0xffffffffffffffff
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
(2) The second issue I found has iscsi_check_for_session_reinstatement() on the top of iscsi_np call stack, but different from case (b) we mentioned before. In case (b), we must reboot the target to recover, but in this case, it will auto recover, here is the details:
dmesg:
[ 100.487421] iSCSI/iqn.1996-04.de.suse:01:faad5846cde9: Unsupported SCSI Opcode 0xa3, sending CHECK_CONDITION.
[  182.582323] ABORT_TASK: Found referenced iSCSI task_tag: 15
[  197.616800] Unexpected ret: -32 send data 48
[  197.712278] ABORT_TASK: Sending TMR_FUNCTION_COMPLETE for ref_tag: 15
[  263.603305] ABORT_TASK: Found referenced iSCSI task_tag: 268435537
[  278.640172] Unexpected ret: -32 send data 48
[ 278.671299] ABORT_TASK: Sending TMR_FUNCTION_COMPLETE for ref_tag: 268435537
[  341.584329] ABORT_TASK: Found referenced iSCSI task_tag: 536871038
[  357.423710] Unexpected ret: -32 send data 48
[  373.660476] iSCSI Login timeout on Network Portal 192.168.100.233:3260

call stacks:
bj-ha-3:~ # ps -aux | grep iscsi
root      3063  0.0  0.0      0     0 ?        D    15:36   0:00 [iscsi_np]
root      3073  0.3  0.0      0     0 ?        S    15:36   0:01 [iscsi_ttx]
root      3074  0.4  0.0      0     0 ?        S    15:36   0:01 [iscsi_trx]
root      3094  0.3  0.0      0     0 ?        D    15:39   0:00 [iscsi_trx]
root 3116 0.0 0.0 10508 1616 pts/0 S+ 15:42 0:00 grep --color=auto iscsi
bj-ha-3:~ # cat /proc/3063/stack
[<ffffffffa03fcd97>] iscsi_check_for_session_reinstatement+0x1d7/0x270 [iscsi_target_mod]
[<ffffffffa03ff971>] iscsi_target_do_login+0x111/0x5f0 [iscsi_target_mod]
[<ffffffffa0400b17>] iscsi_target_start_negotiation+0x17/0xa0 [iscsi_target_mod] [<ffffffffa03fe932>] iscsi_target_login_thread+0xa72/0xfd0 [iscsi_target_mod]
[<ffffffff810997cd>] kthread+0xbd/0xe0
[<ffffffff815e177f>] ret_from_fork+0x3f/0x70
[<ffffffff81099710>] kthread+0x0/0xe0
[<ffffffffffffffff>] 0xffffffffffffffff
bj-ha-3:~ # cat /proc/3094/stack
[<ffffffffa03adcc6>] transport_generic_free_cmd+0x76/0x110 [target_core_mod]
[<ffffffffa0404917>] iscsit_free_cmd+0x67/0x130 [iscsi_target_mod]
[<ffffffffa040b929>] iscsit_close_connection+0x4a9/0x860 [iscsi_target_mod]
[<ffffffffa040b0b3>] iscsi_target_rx_thread+0x93/0xa0 [iscsi_target_mod]
[<ffffffff810997cd>] kthread+0xbd/0xe0
[<ffffffff815e177f>] ret_from_fork+0x3f/0x70
[<ffffffff81099710>] kthread+0x0/0xe0
[<ffffffffffffffff>] 0xffffffffffffffff

At this moment, we can see IO errors at one initiator side, the other will survive. Once we killed the survival side FIO processes or wait a moment, the target would auto recover, looks like this:

bj-ha-3:~ # ps -aux | grep iscsi
root      3063  0.0  0.0      0     0 ?        S    15:36   0:00 [iscsi_np]
root      3142  0.0  0.0      0     0 ?        S    15:43   0:00 [iscsi_ttx]
root      3143  0.0  0.0      0     0 ?        S    15:43   0:00 [iscsi_trx]
root      3146  0.6  0.0      0     0 ?        S    15:43   0:00 [iscsi_ttx]
root      3147  0.8  0.0      0     0 ?        S    15:43   0:00 [iscsi_trx]
root 3149 0.0 0.0 10508 1636 pts/0 S+ 15:43 0:00 grep --color=auto iscsi

dmesg at this moment:
[ 90.507364] iSCSI/iqn.1996-04.de.suse:01:4039926d2313: Unsupported SCSI Opcode 0xa3, sending CHECK_CONDITION. [ 100.487421] iSCSI/iqn.1996-04.de.suse:01:faad5846cde9: Unsupported SCSI Opcode 0xa3, sending CHECK_CONDITION.
[  182.582323] ABORT_TASK: Found referenced iSCSI task_tag: 15
[  197.616800] Unexpected ret: -32 send data 48
[  197.712278] ABORT_TASK: Sending TMR_FUNCTION_COMPLETE for ref_tag: 15
[  263.603305] ABORT_TASK: Found referenced iSCSI task_tag: 268435537
[  278.640172] Unexpected ret: -32 send data 48
[ 278.671299] ABORT_TASK: Sending TMR_FUNCTION_COMPLETE for ref_tag: 268435537
[  341.584329] ABORT_TASK: Found referenced iSCSI task_tag: 536871038
[  357.423710] Unexpected ret: -32 send data 48
[  373.660476] iSCSI Login timeout on Network Portal 192.168.100.233:3260
[  535.852903] Unexpected ret: -32 send data 48
[ 535.923803] ABORT_TASK: Sending TMR_FUNCTION_COMPLETE for ref_tag: 536871038
[  535.923811] ABORT_TASK: Found referenced iSCSI task_tag: 76
[  535.923815] ABORT_TASK: Sending TMR_TASK_DOES_NOT_EXIST for ref_tag: 76
[  535.924325] Unexpected ret: -104 send data 360
[  535.924329] tx_data returned -32, expecting 360.
[  535.924489] iSCSI Login negotiation failed.
[  535.924916] Unexpected ret: -104 send data 360
[  535.924918] tx_data returned -32, expecting 360.
[  535.924943] iSCSI Login negotiation failed.
[  535.925424] Unexpected ret: -104 send data 360
[  535.925428] tx_data returned -32, expecting 360.
[  535.925650] iSCSI Login negotiation failed.
[  535.926095] Unexpected ret: -104 send data 360
[  535.926097] tx_data returned -32, expecting 360.
[  535.926132] iSCSI Login negotiation failed.
[  535.926349] Unexpected ret: -104 send data 360
[  535.926351] tx_data returned -32, expecting 360.
[  535.926369] iSCSI Login negotiation failed.
[  535.926576] Unexpected ret: -104 send data 360
[  535.926577] tx_data returned -32, expecting 360.
[  535.926593] iSCSI Login negotiation failed.
[  535.926750] Unexpected ret: -104 send data 360
[  535.926752] tx_data returned -32, expecting 360.
[  535.926768] iSCSI Login negotiation failed.
[  535.926905] Unexpected ret: -104 send data 360
[  535.926906] tx_data returned -32, expecting 360.
[  535.926925] iSCSI Login negotiation failed.
[  535.927064] Unexpected ret: -104 send data 360
[  535.927065] tx_data returned -32, expecting 360.
[  535.927082] iSCSI Login negotiation failed.
[  535.927219] Unexpected ret: -104 send data 360
[  535.927220] tx_data returned -32, expecting 360.
[  535.927237] iSCSI Login negotiation failed.

I am still debugging on this case, I have core dumps, I think the dump files are too big for a mail list, I can send it off the list if needed.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
(3) In this case, dmesg and call stack looks like this:
bj-ha-3:~ # dmesg
[  803.570868] ABORT_TASK: Found referenced iSCSI task_tag: 96
[  818.584038] Unexpected ret: -32 send data 48
[  818.620210] ABORT_TASK: Sending TMR_FUNCTION_COMPLETE for ref_tag: 96
[  882.555923] ABORT_TASK: Found referenced iSCSI task_tag: 268435496
[  897.587925] Unexpected ret: -32 send data 48
[  898.845646] Unexpected ret: -32 send data 48
[ 898.916090] ABORT_TASK: Sending TMR_FUNCTION_COMPLETE for ref_tag: 268435496
[  898.916095] ABORT_TASK: Found referenced iSCSI task_tag: 45
[  898.916377] ABORT_TASK: Sending TMR_FUNCTION_COMPLETE for ref_tag: 45
[  962.785419] ABORT_TASK: Found referenced iSCSI task_tag: 268435489

bj-ha-3:~ # ps -aux | grep iscsi
root      3063  0.0  0.0      0     0 ?        D    15:36   0:00 [iscsi_np]
root      3296  1.9  0.0      0     0 ?        S    15:49   0:01 [iscsi_ttx]
root      3297  1.9  0.0      0     0 ?        R    15:49   0:01 [iscsi_trx]
root      3299  0.0  0.0      0     0 ?        D    15:49   0:00 [iscsi_trx]
root 3506 0.0 0.0 10508 1516 pts/0 S+ 15:51 0:00 grep --color=auto iscsi


bj-ha-3:~ # cat /proc/3063/stack
[<ffffffffa03fcd97>] iscsi_check_for_session_reinstatement+0x1d7/0x270 [iscsi_target_mod]
[<ffffffffa03ff971>] iscsi_target_do_login+0x111/0x5f0 [iscsi_target_mod]
[<ffffffffa0400b17>] iscsi_target_start_negotiation+0x17/0xa0 [iscsi_target_mod] [<ffffffffa03fe932>] iscsi_target_login_thread+0xa72/0xfd0 [iscsi_target_mod]
[<ffffffff810997cd>] kthread+0xbd/0xe0
[<ffffffff815e177f>] ret_from_fork+0x3f/0x70
[<ffffffff81099710>] kthread+0x0/0xe0
[<ffffffffffffffff>] 0xffffffffffffffff
bj-ha-3:~ # cat /proc/3099/stack
[<ffffffffa03ac784>] __transport_wait_for_tasks+0xb4/0x190 [target_core_mod]
[<ffffffffa03ac905>] transport_wait_for_tasks+0x45/0x60 [target_core_mod]
[<ffffffffa03aa034>] core_tmr_abort_task+0xf4/0x160 [target_core_mod]
[<ffffffffa03aca43>] target_tmr_work+0x123/0x140 [target_core_mod]
[<ffffffff81093ace>] process_one_work+0x14e/0x410
[<ffffffff81094326>] worker_thread+0x116/0x490
[<ffffffff810997cd>] kthread+0xbd/0xe0
[<ffffffff815e177f>] ret_from_fork+0x3f/0x70
[<ffffffff81099710>] kthread+0x0/0xe0
[<ffffffffffffffff>] 0xffffffffffffffff

This case is also rare, only once, but I got the core dump files.
-------------------------------------------------------------------------------------------------------------------------------------------------
Sorry again for the delay and send such a long mail, I am still working on there cases, I will keep the list update once I find anything new.


Thanks,
BR
Zhu Lingshan


On 10/30/2016 07:03 AM, Johannes Thumshirn wrote:
On Sat, Oct 29, 2016 at 03:53:25PM -0700, Nicholas A. Bellinger wrote:
Hi Johannes & Zhu,

On Tue, 2016-10-18 at 23:29 -0700, Nicholas A. Bellinger wrote:
On Tue, 2016-10-18 at 19:35 +0200, Johannes Thumshirn wrote:
On Tue, Oct 18, 2016 at 09:01:34AM +0200, Johannes Thumshirn wrote:

[...]

This is likely the missing SCF_ACK_KREF assignment in >= v4.1.y:

http://www.spinics.net/lists/target-devel/msg13530.html
Sorry to disappoint you but it didn't fix my issue. Is there any debug data I
can give you, or do you have an advice where I could start looking?

I have to admit I only tested the patch on our downstream kernel and not the
upstream kernel, I'll repeat the tests on 4.8 final tomorrow.

Is it possible to generate vmcore to have a look in crash + gdb..?


Just curious if you've been able to verify the above patch for
v4.8.y iscsi-target ports on your specific config(s)..?

To confirm, using v4.1.y + patch I've not run into any further
se_cmd->cmd_kref leaks and/or hung tasks with iscsi-target ports due to
high backend device I/O latency, resulting in host timeouts + ABORT_TASK
+ session reinstatement to occur while waiting for outstanding se_cmd
backend I/O to complete.
Hi Nic,

I'm sorry I haven't come around to testing it but I do have my test VMs with
me and I should have time tomorrow to do it. Sorry for not giving you any updates
on this.

Thanks (and sorry),
        Johannes

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux