diff options
| -rw-r--r-- | drivers/target/iscsi/iscsi_target.c | 11 | ||||
| -rw-r--r-- | drivers/target/sbp/sbp_target.c | 2 | ||||
| -rw-r--r-- | drivers/target/target_core_file.c | 2 | ||||
| -rw-r--r-- | drivers/target/target_core_iblock.c | 2 | ||||
| -rw-r--r-- | drivers/target/target_core_pscsi.c | 9 | 
5 files changed, 15 insertions, 11 deletions
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c index 9435a3d369a..7ea246a0773 100644 --- a/drivers/target/iscsi/iscsi_target.c +++ b/drivers/target/iscsi/iscsi_target.c @@ -3584,6 +3584,10 @@ check_rsp_state:  				spin_lock_bh(&cmd->istate_lock);  				cmd->i_state = ISTATE_SENT_STATUS;  				spin_unlock_bh(&cmd->istate_lock); + +				if (atomic_read(&conn->check_immediate_queue)) +					return 1; +  				continue;  			} else if (ret == 2) {  				/* Still must send status, @@ -3673,7 +3677,7 @@ check_rsp_state:  		}  		if (atomic_read(&conn->check_immediate_queue)) -			break; +			return 1;  	}  	return 0; @@ -3717,12 +3721,15 @@ restart:  		     signal_pending(current))  			goto transport_err; +get_immediate:  		ret = handle_immediate_queue(conn);  		if (ret < 0)  			goto transport_err;  		ret = handle_response_queue(conn); -		if (ret == -EAGAIN) +		if (ret == 1) +			goto get_immediate; +		else if (ret == -EAGAIN)  			goto restart;  		else if (ret < 0)  			goto transport_err; diff --git a/drivers/target/sbp/sbp_target.c b/drivers/target/sbp/sbp_target.c index 6917a9e938e..d3536f57444 100644 --- a/drivers/target/sbp/sbp_target.c +++ b/drivers/target/sbp/sbp_target.c @@ -2598,7 +2598,7 @@ static int __init sbp_init(void)  	return 0;  }; -static void sbp_exit(void) +static void __exit sbp_exit(void)  {  	sbp_deregister_configfs();  }; diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c index d226c10a985..17a6acbc3ab 100644 --- a/drivers/target/target_core_file.c +++ b/drivers/target/target_core_file.c @@ -631,7 +631,7 @@ static int __init fileio_module_init(void)  	return transport_subsystem_register(&fileio_template);  } -static void fileio_module_exit(void) +static void __exit fileio_module_exit(void)  {  	transport_subsystem_release(&fileio_template);  } diff --git a/drivers/target/target_core_iblock.c b/drivers/target/target_core_iblock.c index c73f4a950e2..8bcc514ec8b 100644 --- a/drivers/target/target_core_iblock.c +++ b/drivers/target/target_core_iblock.c @@ -821,7 +821,7 @@ static int __init iblock_module_init(void)  	return transport_subsystem_register(&iblock_template);  } -static void iblock_module_exit(void) +static void __exit iblock_module_exit(void)  {  	transport_subsystem_release(&iblock_template);  } diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c index 2bcfd79cf59..82e78d72fdb 100644 --- a/drivers/target/target_core_pscsi.c +++ b/drivers/target/target_core_pscsi.c @@ -840,14 +840,14 @@ static void pscsi_bi_endio(struct bio *bio, int error)  	bio_put(bio);  } -static inline struct bio *pscsi_get_bio(int sg_num) +static inline struct bio *pscsi_get_bio(int nr_vecs)  {  	struct bio *bio;  	/*  	 * Use bio_malloc() following the comment in for bio -> struct request  	 * in block/blk-core.c:blk_make_request()  	 */ -	bio = bio_kmalloc(GFP_KERNEL, sg_num); +	bio = bio_kmalloc(GFP_KERNEL, nr_vecs);  	if (!bio) {  		pr_err("PSCSI: bio_kmalloc() failed\n");  		return NULL; @@ -940,7 +940,6 @@ pscsi_map_sg(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,  				bio = NULL;  			} -			page++;  			len -= bytes;  			data_len -= bytes;  			off = 0; @@ -952,7 +951,6 @@ fail:  	while (*hbio) {  		bio = *hbio;  		*hbio = (*hbio)->bi_next; -		bio->bi_next = NULL;  		bio_endio(bio, 0);	/* XXX: should be error */  	}  	return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; @@ -1092,7 +1090,6 @@ fail_free_bio:  	while (hbio) {  		struct bio *bio = hbio;  		hbio = hbio->bi_next; -		bio->bi_next = NULL;  		bio_endio(bio, 0);	/* XXX: should be error */  	}  	ret = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; @@ -1178,7 +1175,7 @@ static int __init pscsi_module_init(void)  	return transport_subsystem_register(&pscsi_template);  } -static void pscsi_module_exit(void) +static void __exit pscsi_module_exit(void)  {  	transport_subsystem_release(&pscsi_template);  }  |