Re: [PATCH 1/2] Convert target drivers to use sbitmap
From: Bart Van Assche <hidden>
Date: 2018-06-12 16:32:16
Also in:
kvm, linux-scsi, linux-usb, lkml, target-devel, virtualization
On Tue, 2018-06-12 at 09:15 -0700, Matthew Wilcox wrote:
On Tue, Jun 12, 2018 at 03:22:42PM +0000, Bart Van Assche wrote:quoted
On Tue, 2018-05-15 at 09:00 -0700, Matthew Wilcox wrote:quoted
diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 025dc2d3f3de..cdf671c2af61 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c@@ -3719,7 +3719,8 @@ void qlt_free_cmd(struct qla_tgt_cmd *cmd) return; } cmd->jiffies_at_free = get_jiffies_64(); - percpu_ida_free(&sess->se_sess->sess_tag_pool, cmd->se_cmd.map_tag); + sbitmap_queue_clear(&sess->se_sess->sess_tag_pool, cmd->se_cmd.map_tag, + cmd->se_cmd.map_cpu); } EXPORT_SYMBOL(qlt_free_cmd);Please introduce functions in the target core for allocating and freeing a tag instead of spreading the knowledge of how to allocate and free tags over all target drivers.I can't without doing an unreasonably large amount of work on drivers that I have no way to test. Some of the drivers have the se_cmd already; some of them don't. I'd be happy to introduce a common function for freeing a tag.
Which target drivers are you referring to? If you are referring to the sbp driver: I think that driver is dead and can be removed from the kernel tree. I even don't know whether that driver ever has had any users other than the developer of that driver.
quoted
This looks weird to me. Shouldn't target code ignore signals instead of causing tag allocation to fail if a signal is received?It's what the current code did: - if (signal_pending_state(state, current)) { - tag = -ERESTARTSYS; - break; - } and the current callers literally indicate that they want signals: drivers/infiniband/ulp/isert/ib_isert.c: cmd = iscsit_allocate_cmd(conn, TASK_INTERRUPTIBLE); drivers/target/iscsi/iscsi_target.c: cmd = iscsit_allocate_cmd(conn, TASK_INTERRUPTIBLE);
Right, the iSCSI target driver uses signals to wake up threads (see also the send_sig() calls in the iSCSI target code). Bart.