mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
Pull SCSI target updates from Nicholas Bellinger:
"It's been usually busy for summer, with most of the efforts centered
around TCMU developments and various target-core + fabric driver bug
fixing activities. Not particularly large in terms of LoC, but lots of
smaller patches from many different folks.
The highlights include:
- ibmvscsis logical partition manager support (Michael Cyr + Bryant
Ly)
- Convert target/iblock WRITE_SAME to blkdev_issue_zeroout (hch +
nab)
- Add support for TMR percpu LUN reference counting (nab)
- Fix a potential deadlock between EXTENDED_COPY and iscsi shutdown
(Bart)
- Fix COMPARE_AND_WRITE caw_sem leak during se_cmd quiesce (Jiang Yi)
- Fix TMCU module removal (Xiubo Li)
- Fix iser-target OOPs during login failure (Andrea Righi + Sagi)
- Breakup target-core free_device backend driver callback (mnc)
- Perform TCMU add/delete/reconfig synchronously (mnc)
- Fix TCMU multiple UIO open/close sequences (mnc)
- Fix TCMU CHECK_CONDITION sense handling (mnc)
- Fix target-core SAM_STAT_BUSY + TASK_SET_FULL handling (mnc + nab)
- Introduce TYPE_ZBC support in PSCSI (Damien Le Moal)
- Fix possible TCMU memory leak + OOPs when recalculating cmd base
size (Xiubo Li + Bryant Ly + Damien Le Moal + mnc)
- Add login_keys_workaround attribute for non RFC initiators (Robert
LeBlanc + Arun Easi + nab)"
* 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (68 commits)
iscsi-target: Add login_keys_workaround attribute for non RFC initiators
Revert "qla2xxx: Fix incorrect tcm_qla2xxx_free_cmd use during TMR ABORT"
tcmu: clean up the code and with one small fix
tcmu: Fix possbile memory leak / OOPs when recalculating cmd base size
target: export lio pgr/alua support as device attr
target: Fix return sense reason in target_scsi3_emulate_pr_out
target: Fix cmd size for PR-OUT in passthrough_parse_cdb
tcmu: Fix dev_config_store
target: pscsi: Introduce TYPE_ZBC support
target: Use macro for WRITE_VERIFY_32 operation codes
target: fix SAM_STAT_BUSY/TASK_SET_FULL handling
target: remove transport_complete
pscsi: finish cmd processing from pscsi_req_done
tcmu: fix sense handling during completion
target: add helper to copy sense to se_cmd buffer
target: do not require a transport_complete for SCF_TRANSPORT_TASK_SENSE
target: make device_mutex and device_list static
tcmu: Fix flushing cmd entry dcache page
tcmu: fix multiple uio open/close sequences
tcmu: drop configured check in destroy
...
This commit is contained in:
commit
48ea2cedde
45 changed files with 1356 additions and 698 deletions
|
|
@ -134,11 +134,8 @@ struct vscsibk_pend {
|
|||
struct page *pages[VSCSI_MAX_GRANTS];
|
||||
|
||||
struct se_cmd se_cmd;
|
||||
};
|
||||
|
||||
struct scsiback_tmr {
|
||||
atomic_t tmr_complete;
|
||||
wait_queue_head_t tmr_wait;
|
||||
struct completion tmr_done;
|
||||
};
|
||||
|
||||
#define VSCSI_DEFAULT_SESSION_TAGS 128
|
||||
|
|
@ -599,36 +596,28 @@ static void scsiback_device_action(struct vscsibk_pend *pending_req,
|
|||
struct scsiback_tpg *tpg = pending_req->v2p->tpg;
|
||||
struct scsiback_nexus *nexus = tpg->tpg_nexus;
|
||||
struct se_cmd *se_cmd = &pending_req->se_cmd;
|
||||
struct scsiback_tmr *tmr;
|
||||
u64 unpacked_lun = pending_req->v2p->lun;
|
||||
int rc, err = FAILED;
|
||||
|
||||
tmr = kzalloc(sizeof(struct scsiback_tmr), GFP_KERNEL);
|
||||
if (!tmr) {
|
||||
target_put_sess_cmd(se_cmd);
|
||||
goto err;
|
||||
}
|
||||
|
||||
init_waitqueue_head(&tmr->tmr_wait);
|
||||
init_completion(&pending_req->tmr_done);
|
||||
|
||||
rc = target_submit_tmr(&pending_req->se_cmd, nexus->tvn_se_sess,
|
||||
&pending_req->sense_buffer[0],
|
||||
unpacked_lun, tmr, act, GFP_KERNEL,
|
||||
unpacked_lun, NULL, act, GFP_KERNEL,
|
||||
tag, TARGET_SCF_ACK_KREF);
|
||||
if (rc)
|
||||
goto err;
|
||||
|
||||
wait_event(tmr->tmr_wait, atomic_read(&tmr->tmr_complete));
|
||||
wait_for_completion(&pending_req->tmr_done);
|
||||
|
||||
err = (se_cmd->se_tmr_req->response == TMR_FUNCTION_COMPLETE) ?
|
||||
SUCCESS : FAILED;
|
||||
|
||||
scsiback_do_resp_with_sense(NULL, err, 0, pending_req);
|
||||
transport_generic_free_cmd(&pending_req->se_cmd, 1);
|
||||
transport_generic_free_cmd(&pending_req->se_cmd, 0);
|
||||
return;
|
||||
|
||||
err:
|
||||
if (tmr)
|
||||
kfree(tmr);
|
||||
scsiback_do_resp_with_sense(NULL, err, 0, pending_req);
|
||||
}
|
||||
|
||||
|
|
@ -1389,12 +1378,6 @@ static int scsiback_check_stop_free(struct se_cmd *se_cmd)
|
|||
static void scsiback_release_cmd(struct se_cmd *se_cmd)
|
||||
{
|
||||
struct se_session *se_sess = se_cmd->se_sess;
|
||||
struct se_tmr_req *se_tmr = se_cmd->se_tmr_req;
|
||||
|
||||
if (se_tmr && se_cmd->se_cmd_flags & SCF_SCSI_TMR_CDB) {
|
||||
struct scsiback_tmr *tmr = se_tmr->fabric_tmr_ptr;
|
||||
kfree(tmr);
|
||||
}
|
||||
|
||||
percpu_ida_free(&se_sess->sess_tag_pool, se_cmd->map_tag);
|
||||
}
|
||||
|
|
@ -1455,11 +1438,10 @@ static int scsiback_queue_status(struct se_cmd *se_cmd)
|
|||
|
||||
static void scsiback_queue_tm_rsp(struct se_cmd *se_cmd)
|
||||
{
|
||||
struct se_tmr_req *se_tmr = se_cmd->se_tmr_req;
|
||||
struct scsiback_tmr *tmr = se_tmr->fabric_tmr_ptr;
|
||||
struct vscsibk_pend *pending_req = container_of(se_cmd,
|
||||
struct vscsibk_pend, se_cmd);
|
||||
|
||||
atomic_set(&tmr->tmr_complete, 1);
|
||||
wake_up(&tmr->tmr_wait);
|
||||
complete(&pending_req->tmr_done);
|
||||
}
|
||||
|
||||
static void scsiback_aborted_task(struct se_cmd *se_cmd)
|
||||
|
|
|
|||
Loading…
Reference in a new issue