[stgt] tgtd CPU 100% problem

李春 pickup112 at gmail.com
Tue Jul 11 15:34:39 CEST 2017


Sorry for the wrong CC'd lists.
Is CC'd lists correct this email?

When tgtd received the DEVICE_REMOVAL event, we found that the tgtd
cost 100% of one CPU

When we attach to the process with gdb, we found that process run a
infinite loop in usr/iscsi/iser.c:iser_nop_work_handler() to check if
the conn state is STATE_FULL.

it is a infinite loop code in iser_nop_work_handler():

```
list_for_each_entry(conn, &iser_conn_list, conn_list) {
```

 gdb show that:
```
gdb attach 31629
...
3511                    if (conn->h.state != STATE_FULL)
(gdb) l
3506    {
3507            struct iser_conn *conn;
3508            struct iser_task *task;
3509
3510            list_for_each_entry(conn, &iser_conn_list, conn_list) {
3511                    if (conn->h.state != STATE_FULL)
3512                            continue;
3513                    task = conn->nop_in_task;
3514                    if (!task)
3515                            continue;

(gdb) p iser_conn_list->next
$1 = (struct list_head *) 0x1edc6e0
(gdb) p iser_conn_list->next->next
$2 = (struct list_head *) 0x1edc6e0
(gdb) p iser_conn_list->next->next->next
$3 = (struct list_head *) 0x1edc6e0

```

the iser_conn_list is a endless loop.

2017-07-11 18:41 GMT+08:00 Sagi Grimberg <sagi at grimberg.me>:
>
>> Thanks very much for reply.
>> I think it may be better to  assert failed to exit problem than run
>> the endless loop after receivered DEVICE_REMOVAL event.
>> Or we can sleep 5 ms to check if the conn->h.state is STATE_FULL.
>
>
> Note that neither of the CC'd lists are the correct list
> for stgt, you should correspond stgt at lists.wpkg.org
>
> Regarding your observation, not sure why you think this is
> happening, the work is queued once in 5 seconds and the loop
> is finite.



-- 
pickup.lichun 李春


More information about the stgt mailing list