scsi: target: tcmu: clean the nl_cmd of the udev when nl send fails
authorLi Zhong <lizhongfs@gmail.com>
Mon, 5 Aug 2019 00:43:36 +0000 (08:43 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 8 Aug 2019 01:52:01 +0000 (21:52 -0400)
commit7d8948627a7cd84c45069276e5fcddf6ab074baa
tree0dce2daf349a3dd03eb3a4b8e0036ba0e89c57bd
parentcb8b3359eb9c606421a42f3968c12211d6462906
scsi: target: tcmu: clean the nl_cmd of the udev when nl send fails

If the userspace process crashes while we send the nl msg, it is possible
that the cmd in curr_nl_cmd of tcmu_dev never gets reset to 0, and and
returns busy for other commands after the userspace process is restartd.

More details below:

/backstores/user:file/file> set attribute dev_size=2048
Cannot set attribute dev_size: [Errno 3] No such process
/backstores/user:file/file> set attribute dev_size=2048
Cannot set attribute dev_size: [Errno 16] Device or resource busy

with following kernel messages:
[173605.747169] Unable to reconfigure device
[173616.686674] tcmu daemon: command reply support 1.
[173623.866978] netlink cmd 3 already executing on file
[173623.866984] Unable to reconfigure device

Also, it is not safe to leave the nl_cmd in the list, and not get deleted.

This patch removes the nl_cmd from the list, and clear its data if it is
not sent successfully.

Signed-off-by: Li Zhong <lizhongfs@gmail.com>
Acked-by: Mike Christie <mchristi@redhat.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/target_core_user.c