diff options
author | Matthew Wilcox <willy@infradead.org> | 2018-06-12 15:05:43 -0400 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2018-06-19 22:02:25 -0400 |
commit | 83c2b54b9295a5fc0d9c8f1751aaf8099d1760f6 (patch) | |
tree | b93af98e7faa42e779d5af7dfa7ec3d030e9a250 | |
parent | ba80917d9932da022d2e74eae66e44139dd65136 (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.c | 4 | ||||
-rw-r--r-- | drivers/target/iscsi/iscsi_target_util.c | 2 | ||||
-rw-r--r-- | drivers/target/sbp/sbp_target.c | 2 | ||||
-rw-r--r-- | drivers/target/tcm_fc/tfc_cmd.c | 4 | ||||
-rw-r--r-- | drivers/usb/gadget/function/f_tcm.c | 2 | ||||
-rw-r--r-- | drivers/vhost/scsi.c | 2 | ||||
-rw-r--r-- | drivers/xen/xen-scsiback.c | 4 | ||||
-rw-r--r-- | include/target/target_core_base.h | 5 |
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 | } |
3788 | EXPORT_SYMBOL(qlt_free_cmd); | 3788 | EXPORT_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 | } |
716 | EXPORT_SYMBOL(iscsit_release_cmd); | 716 | EXPORT_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 | ||
1466 | static void sbp_mgt_agent_process(struct work_struct *work) | 1466 | static 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 | ||
1294 | static u32 usbg_sess_get_index(struct se_session *se_sess) | 1294 | static 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 | ||
330 | static u32 vhost_scsi_sess_get_index(struct se_session *se_sess) | 330 | static 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 | ||
1378 | static void scsiback_release_cmd(struct se_cmd *se_cmd) | 1378 | static 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 | ||
1385 | static u32 scsiback_sess_get_index(struct se_session *se_sess) | 1383 | static 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 | ||
937 | static 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 */ |