Commit 7e29f077 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull SCSI fixes from James Bottomley:
 "One target driver fix and one scsi-generic one. The latter is 10 lines
  because the problem lock has to be dropped and re-taken around the
  call causing the sleep in atomic"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
  scsi: sg: Do not sleep in atomic context
  scsi: target: tcm_loop: Fix segfault in tcm_loop_tpg_address_show()
parents ebd97545 90449f2d
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -2208,9 +2208,17 @@ sg_remove_sfp_usercontext(struct work_struct *work)
	write_lock_irqsave(&sfp->rq_list_lock, iflags);
	while (!list_empty(&sfp->rq_list)) {
		srp = list_first_entry(&sfp->rq_list, Sg_request, entry);
		sg_finish_rem_req(srp);
		list_del(&srp->entry);
		write_unlock_irqrestore(&sfp->rq_list_lock, iflags);

		sg_finish_rem_req(srp);
		/*
		 * sg_rq_end_io() uses srp->parentfp. Hence, only clear
		 * srp->parentfp after blk_mq_free_request() has been called.
		 */
		srp->parentfp = NULL;

		write_lock_irqsave(&sfp->rq_list_lock, iflags);
	}
	write_unlock_irqrestore(&sfp->rq_list_lock, iflags);

+3 −0
Original line number Diff line number Diff line
@@ -894,6 +894,9 @@ static ssize_t tcm_loop_tpg_address_show(struct config_item *item,
			struct tcm_loop_tpg, tl_se_tpg);
	struct tcm_loop_hba *tl_hba = tl_tpg->tl_hba;

	if (!tl_hba->sh)
		return -ENODEV;

	return snprintf(page, PAGE_SIZE, "%d:0:%d\n",
			tl_hba->sh->host_no, tl_tpg->tl_tpgt);
}