diff options
author | Nicholas Bellinger <nab@linux-iscsi.org> | 2013-11-07 00:03:43 -0500 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2013-11-07 17:24:52 -0500 |
commit | 5277797dc4ed873d067477d84e910b39d113f649 (patch) | |
tree | 5e2aa87dec2cbcb5bbdfadd697c92e86b0e5aa11 /drivers/target/target_core_internal.h | |
parent | c9e8d128fe316751230ee0c53478740c64f58436 (diff) |
target: Add percpu refcounting for se_lun access
This patch adds percpu refcounting for se_lun access that allows the
association of an se_lun + se_cmd in transport_lookup_cmd_lun() to
occur without an extra list_head for tracking outstanding I/O during
se_lun shutdown.
This effectively changes se_lun shutdown logic to wait for outstanding
I/O percpu references to complete in transport_lun_remove_cmd() using
se_lun->lun_ref_comp, instead of explicitly draining the per se_lun
command list and waiting for individual se_cmd descriptor processing
to complete.
Cc: Kent Overstreet <kmo@daterainc.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/target/target_core_internal.h')
-rw-r--r-- | drivers/target/target_core_internal.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/target/target_core_internal.h b/drivers/target/target_core_internal.h index 889af4df8562..47b63b094cdc 100644 --- a/drivers/target/target_core_internal.h +++ b/drivers/target/target_core_internal.h | |||
@@ -100,7 +100,7 @@ int transport_dump_vpd_assoc(struct t10_vpd *, unsigned char *, int); | |||
100 | int transport_dump_vpd_ident_type(struct t10_vpd *, unsigned char *, int); | 100 | int transport_dump_vpd_ident_type(struct t10_vpd *, unsigned char *, int); |
101 | int transport_dump_vpd_ident(struct t10_vpd *, unsigned char *, int); | 101 | int transport_dump_vpd_ident(struct t10_vpd *, unsigned char *, int); |
102 | bool target_stop_cmd(struct se_cmd *cmd, unsigned long *flags); | 102 | bool target_stop_cmd(struct se_cmd *cmd, unsigned long *flags); |
103 | int transport_clear_lun_from_sessions(struct se_lun *); | 103 | int transport_clear_lun_ref(struct se_lun *); |
104 | void transport_send_task_abort(struct se_cmd *); | 104 | void transport_send_task_abort(struct se_cmd *); |
105 | sense_reason_t target_cmd_size_check(struct se_cmd *cmd, unsigned int size); | 105 | sense_reason_t target_cmd_size_check(struct se_cmd *cmd, unsigned int size); |
106 | void target_qf_do_work(struct work_struct *work); | 106 | void target_qf_do_work(struct work_struct *work); |