summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wilcox <willy@infradead.org>2018-06-12 15:05:43 -0400
committerMartin K. Petersen <martin.petersen@oracle.com>2018-06-19 22:02:25 -0400
commit83c2b54b9295a5fc0d9c8f1751aaf8099d1760f6 (patch)
treeb93af98e7faa42e779d5af7dfa7ec3d030e9a250
parentba80917d9932da022d2e74eae66e44139dd65136 (diff)
scsi: target: Abstract tag freeing
Introduce target_free_tag() and convert all drivers to use it. Signed-off-by: Matthew Wilcox <willy@infradead.org> Reviewed-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-rw-r--r--drivers/scsi/qla2xxx/qla_target.c4
-rw-r--r--drivers/target/iscsi/iscsi_target_util.c2
-rw-r--r--drivers/target/sbp/sbp_target.c2
-rw-r--r--drivers/target/tcm_fc/tfc_cmd.c4
-rw-r--r--drivers/usb/gadget/function/f_tcm.c2
-rw-r--r--drivers/vhost/scsi.c2
-rw-r--r--drivers/xen/xen-scsiback.c4
-rw-r--r--include/target/target_core_base.h5
8 files changed, 14 insertions, 11 deletions
diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index 0fea2e2326be..11274317118a 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -3783,7 +3783,7 @@ void qlt_free_cmd(struct qla_tgt_cmd *cmd)
3783 return; 3783 return;
3784 } 3784 }
3785 cmd->jiffies_at_free = get_jiffies_64(); 3785 cmd->jiffies_at_free = get_jiffies_64();
3786 percpu_ida_free(&sess->se_sess->sess_tag_pool, cmd->se_cmd.map_tag); 3786 target_free_tag(sess->se_sess, &cmd->se_cmd);
3787} 3787}
3788EXPORT_SYMBOL(qlt_free_cmd); 3788EXPORT_SYMBOL(qlt_free_cmd);
3789 3789
@@ -4146,7 +4146,7 @@ out_term:
4146 qlt_send_term_exchange(qpair, NULL, &cmd->atio, 1, 0); 4146 qlt_send_term_exchange(qpair, NULL, &cmd->atio, 1, 0);
4147 4147
4148 qlt_decr_num_pend_cmds(vha); 4148 qlt_decr_num_pend_cmds(vha);
4149 percpu_ida_free(&sess->se_sess->sess_tag_pool, cmd->se_cmd.map_tag); 4149 target_free_tag(sess->se_sess, &cmd->se_cmd);
4150 spin_unlock_irqrestore(qpair->qp_lock_ptr, flags); 4150 spin_unlock_irqrestore(qpair->qp_lock_ptr, flags);
4151 4151
4152 spin_lock_irqsave(&ha->tgt.sess_lock, flags); 4152 spin_lock_irqsave(&ha->tgt.sess_lock, flags);
diff --git a/drivers/target/iscsi/iscsi_target_util.c b/drivers/target/iscsi/iscsi_target_util.c
index 4435bf374d2d..7e98697cfb8e 100644
--- a/drivers/target/iscsi/iscsi_target_util.c
+++ b/drivers/target/iscsi/iscsi_target_util.c
@@ -711,7 +711,7 @@ void iscsit_release_cmd(struct iscsi_cmd *cmd)
711 kfree(cmd->iov_data); 711 kfree(cmd->iov_data);
712 kfree(cmd->text_in_ptr); 712 kfree(cmd->text_in_ptr);
713 713
714 percpu_ida_free(&sess->se_sess->sess_tag_pool, se_cmd->map_tag); 714 target_free_tag(sess->se_sess, se_cmd);
715} 715}
716EXPORT_SYMBOL(iscsit_release_cmd); 716EXPORT_SYMBOL(iscsit_release_cmd);
717 717
diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c
index fb1003921d85..679ae29d25ab 100644
--- a/drivers/target/sbp/sbp_target.c
+++ b/drivers/target/sbp/sbp_target.c
@@ -1460,7 +1460,7 @@ static void sbp_free_request(struct sbp_target_request *req)
1460 kfree(req->pg_tbl); 1460 kfree(req->pg_tbl);
1461 kfree(req->cmd_buf); 1461 kfree(req->cmd_buf);
1462 1462
1463 percpu_ida_free(&se_sess->sess_tag_pool, se_cmd->map_tag); 1463 target_free_tag(se_sess, se_cmd);
1464} 1464}
1465 1465
1466static void sbp_mgt_agent_process(struct work_struct *work) 1466static void sbp_mgt_agent_process(struct work_struct *work)
diff --git a/drivers/target/tcm_fc/tfc_cmd.c b/drivers/target/tcm_fc/tfc_cmd.c
index ec372860106f..13e4efbe1ce7 100644
--- a/drivers/target/tcm_fc/tfc_cmd.c
+++ b/drivers/target/tcm_fc/tfc_cmd.c
@@ -92,7 +92,7 @@ static void ft_free_cmd(struct ft_cmd *cmd)
92 if (fr_seq(fp)) 92 if (fr_seq(fp))
93 fc_seq_release(fr_seq(fp)); 93 fc_seq_release(fr_seq(fp));
94 fc_frame_free(fp); 94 fc_frame_free(fp);
95 percpu_ida_free(&sess->se_sess->sess_tag_pool, cmd->se_cmd.map_tag); 95 target_free_tag(sess->se_sess, &cmd->se_cmd);
96 ft_sess_put(sess); /* undo get from lookup at recv */ 96 ft_sess_put(sess); /* undo get from lookup at recv */
97} 97}
98 98
@@ -461,7 +461,7 @@ static void ft_recv_cmd(struct ft_sess *sess, struct fc_frame *fp)
461 cmd->sess = sess; 461 cmd->sess = sess;
462 cmd->seq = fc_seq_assign(lport, fp); 462 cmd->seq = fc_seq_assign(lport, fp);
463 if (!cmd->seq) { 463 if (!cmd->seq) {
464 percpu_ida_free(&se_sess->sess_tag_pool, tag); 464 target_free_tag(se_sess, &cmd->se_cmd);
465 goto busy; 465 goto busy;
466 } 466 }
467 cmd->req_frame = fp; /* hold frame during cmd */ 467 cmd->req_frame = fp; /* hold frame during cmd */
diff --git a/drivers/usb/gadget/function/f_tcm.c b/drivers/usb/gadget/function/f_tcm.c
index d78dbb73bde8..9f670d9224b9 100644
--- a/drivers/usb/gadget/function/f_tcm.c
+++ b/drivers/usb/gadget/function/f_tcm.c
@@ -1288,7 +1288,7 @@ static void usbg_release_cmd(struct se_cmd *se_cmd)
1288 struct se_session *se_sess = se_cmd->se_sess; 1288 struct se_session *se_sess = se_cmd->se_sess;
1289 1289
1290 kfree(cmd->data_buf); 1290 kfree(cmd->data_buf);
1291 percpu_ida_free(&se_sess->sess_tag_pool, se_cmd->map_tag); 1291 target_free_tag(se_sess, se_cmd);
1292} 1292}
1293 1293
1294static u32 usbg_sess_get_index(struct se_session *se_sess) 1294static u32 usbg_sess_get_index(struct se_session *se_sess)
diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c
index 17fcd3b2e686..7aaf0e5512ed 100644
--- a/drivers/vhost/scsi.c
+++ b/drivers/vhost/scsi.c
@@ -324,7 +324,7 @@ static void vhost_scsi_release_cmd(struct se_cmd *se_cmd)
324 } 324 }
325 325
326 vhost_scsi_put_inflight(tv_cmd->inflight); 326 vhost_scsi_put_inflight(tv_cmd->inflight);
327 percpu_ida_free(&se_sess->sess_tag_pool, se_cmd->map_tag); 327 target_free_tag(se_sess, se_cmd);
328} 328}
329 329
330static u32 vhost_scsi_sess_get_index(struct se_session *se_sess) 330static u32 vhost_scsi_sess_get_index(struct se_session *se_sess)
diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c
index 7bc88fd43cfc..ec6635258ed8 100644
--- a/drivers/xen/xen-scsiback.c
+++ b/drivers/xen/xen-scsiback.c
@@ -1377,9 +1377,7 @@ static int scsiback_check_stop_free(struct se_cmd *se_cmd)
1377 1377
1378static void scsiback_release_cmd(struct se_cmd *se_cmd) 1378static void scsiback_release_cmd(struct se_cmd *se_cmd)
1379{ 1379{
1380 struct se_session *se_sess = se_cmd->se_sess; 1380 target_free_tag(se_cmd->se_sess, se_cmd);
1381
1382 percpu_ida_free(&se_sess->sess_tag_pool, se_cmd->map_tag);
1383} 1381}
1384 1382
1385static u32 scsiback_sess_get_index(struct se_session *se_sess) 1383static u32 scsiback_sess_get_index(struct se_session *se_sess)
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
index 922a39f45abc..260c2f3e9460 100644
--- a/include/target/target_core_base.h
+++ b/include/target/target_core_base.h
@@ -934,4 +934,9 @@ static inline void atomic_dec_mb(atomic_t *v)
934 smp_mb__after_atomic(); 934 smp_mb__after_atomic();
935} 935}
936 936
937static inline void target_free_tag(struct se_session *sess, struct se_cmd *cmd)
938{
939 percpu_ida_free(&sess->sess_tag_pool, cmd->map_tag);
940}
941
937#endif /* TARGET_CORE_BASE_H */ 942#endif /* TARGET_CORE_BASE_H */