Re: [PATCH 32/42] target/iscsi: Inline params from map_sg into set_iovec_ptrs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2011-05-27 at 12:07 -0700, Andy Grover wrote:
> Remove struct se_map_sg and pass members as params to set_iovec_ptrs.
> 
> Signed-off-by: Andy Grover <agrover@xxxxxxxxxx>
> ---

Committed as 0e13b0276fa

Thanks,

--nab

>  drivers/target/iscsi/iscsi_target.c      |   92 +++++++++--------------------
>  drivers/target/iscsi/iscsi_target_util.h |    9 ---
>  2 files changed, 29 insertions(+), 72 deletions(-)
> 
> diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
> index 9e07dca..ea9981f 100644
> --- a/drivers/target/iscsi/iscsi_target.c
> +++ b/drivers/target/iscsi/iscsi_target.c
> @@ -825,22 +825,24 @@ static int iscsit_get_offset(
>  }
>  
>  static int iscsit_set_iovec_ptrs(
> -	struct se_map_sg *map_sg,
> +	struct iscsi_cmd *cmd,
> +	struct kvec *iov,
> +	u32 data_offset,
> +	u32 data_length,
> +	int sg_kmap_active,
>  	struct se_unmap_sg *unmap_sg)
>  {
> -	u32 i = 0 /* For iovecs */, j = 0 /* For scatterlists */;
> -	struct se_cmd *cmd = map_sg->se_cmd;
> -	struct iscsi_cmd *i_cmd = container_of(cmd, struct iscsi_cmd, se_cmd);
> +	u32 i = 0; /* For iovecs */
> +	u32 j = 0; /* For scatterlists */
> +	struct se_cmd *se_cmd = &cmd->se_cmd;
>  	struct se_offset_map *lmap = &unmap_sg->lmap;
> -	struct kvec *iov = map_sg->iov;
>  
>  	/*
>  	 * Used for non scatterlist operations, assume a single iovec.
>  	 */
> -	if (!cmd->t_tasks_se_num) {
> -		iov[0].iov_base = (unsigned char *) cmd->t_task_buf +
> -							map_sg->data_offset;
> -		iov[0].iov_len  = map_sg->data_length;
> +	if (!se_cmd->t_tasks_se_num) {
> +		iov[0].iov_base = se_cmd->t_task_buf + data_offset;
> +		iov[0].iov_len  = data_length;
>  		return 1;
>  	}
>  
> @@ -854,23 +856,23 @@ static int iscsit_set_iovec_ptrs(
>  	 * Get a pointer to the first used scatterlist based on the passed
>  	 * offset. Also set the rest of the needed values in iscsi_linux_map_t.
>  	 */
> -	lmap->iscsi_offset = map_sg->data_offset;
> -	if (map_sg->sg_kmap_active) {
> -		unmap_sg->se_cmd = map_sg->se_cmd;
> +	lmap->iscsi_offset = data_offset;
> +	if (sg_kmap_active) {
> +		unmap_sg->se_cmd = se_cmd;
>  		iscsit_get_offset(lmap, unmap_sg);
> -		unmap_sg->data_length = map_sg->data_length;
> +		unmap_sg->data_length = data_length;
>  	} else {
>  		lmap->current_offset = lmap->orig_offset;
>  	}
>  	lmap->map_se_mem = lmap->map_orig_se_mem;
>  
> -	while (map_sg->data_length) {
> +	while (data_length) {
>  		/*
>  		 * Time to get the virtual address for use with iovec pointers.
>  		 * This function will return the expected iovec_base address
>  		 * and iovec_length.
>  		 */
> -		iscsit_calculate_map_segment(&map_sg->data_length, lmap);
> +		iscsit_calculate_map_segment(&data_length, lmap);
>  
>  		/*
>  		 * Set the iov.iov_base and iov.iov_len from the current values
> @@ -886,13 +888,13 @@ static int iscsit_set_iovec_ptrs(
>  		 * overflow the iovecs allocated for this command in the next
>  		 * pass.
>  		 */
> -		map_sg->data_length -= iov[i].iov_len;
> +		data_length -= iov[i].iov_len;
>  		lmap->sg_length -= iov[i].iov_len;
>  
> -		if ((++i + 1) > i_cmd->orig_iov_data_count) {
> +		if ((++i + 1) > cmd->orig_iov_data_count) {
>  			printk(KERN_ERR "Current iovec count %u is greater than"
>  				" struct se_cmd->orig_data_iov_count %u, cannot"
> -				" continue.\n", i+1, i_cmd->orig_iov_data_count);
> +				" continue.\n", i+1, cmd->orig_iov_data_count);
>  			return -1;
>  		}
>  
> @@ -900,7 +902,7 @@ static int iscsit_set_iovec_ptrs(
>  		 * All done mapping this scatterlist's pages, move on to
>  		 * the next scatterlist by setting lmap.map_reset = 1;
>  		 */
> -		if (!lmap->sg_length || !map_sg->data_length) {
> +		if (!lmap->sg_length || !data_length) {
>  			list_for_each_entry(lmap->map_se_mem,
>  					&lmap->map_se_mem->se_list, se_list)
>  				break;
> @@ -1453,7 +1455,6 @@ static int iscsit_handle_data_out(struct iscsi_conn *conn, unsigned char *buf)
>  	u32 rx_size = 0, payload_length;
>  	struct iscsi_cmd *cmd = NULL;
>  	struct se_cmd *se_cmd;
> -	struct se_map_sg map_sg;
>  	struct se_unmap_sg unmap_sg;
>  	struct iscsi_data *hdr;
>  	struct kvec *iov;
> @@ -1625,18 +1626,11 @@ static int iscsit_handle_data_out(struct iscsi_conn *conn, unsigned char *buf)
>  	rx_size += payload_length;
>  	iov = &cmd->iov_data[0];
>  
> -	memset(&map_sg, 0, sizeof(struct se_map_sg));
>  	memset(&unmap_sg, 0, sizeof(struct se_unmap_sg));
> -	map_sg.fabric_cmd = (void *)cmd;
> -	map_sg.se_cmd = SE_CMD(cmd);
> -	map_sg.iov = iov;
> -	map_sg.sg_kmap_active = 1;
> -	map_sg.data_length = payload_length;
> -	map_sg.data_offset = hdr->offset;
>  	unmap_sg.fabric_cmd = (void *)cmd;
>  	unmap_sg.se_cmd = SE_CMD(cmd);
>  
> -	iov_ret = iscsit_set_iovec_ptrs(&map_sg, &unmap_sg);
> +	iov_ret = iscsit_set_iovec_ptrs(cmd, iov, hdr->offset, payload_length, 1, &unmap_sg);
>  	if (iov_ret < 0)
>  		return -1;
>  
> @@ -1668,19 +1662,13 @@ static int iscsit_handle_data_out(struct iscsi_conn *conn, unsigned char *buf)
>  	if (conn->conn_ops->DataDigest) {
>  		u32 counter = payload_length, data_crc = 0;
>  		struct kvec *iov_ptr = &cmd->iov_data[0];
> +
>  		/*
>  		 * Thanks to the IP stack shitting on passed iovecs,  we have to
>  		 * call set_iovec_data_ptrs() again in order to have a iMD/PSCSI
>  		 * agnostic way of doing datadigests computations.
>  		 */
> -		memset(&map_sg, 0, sizeof(struct se_map_sg));
> -		map_sg.fabric_cmd = (void *)cmd;
> -		map_sg.se_cmd = SE_CMD(cmd);
> -		map_sg.iov = iov_ptr;
> -		map_sg.data_length = payload_length;
> -		map_sg.data_offset = hdr->offset;
> -
> -		if (iscsit_set_iovec_ptrs(&map_sg, &unmap_sg) < 0)
> +		if (iscsit_set_iovec_ptrs(cmd, iov_ptr, hdr->offset, payload_length, 0, &unmap_sg) < 0)
>  			return -1;
>  
>  		iscsit_do_crypto_hash_iovec(&conn->conn_rx_hash,
> @@ -2547,22 +2535,15 @@ static int iscsit_handle_immediate_data(
>  	int iov_ret, rx_got = 0, rx_size = 0;
>  	u32 checksum, iov_count = 0, padding = 0, pad_bytes = 0;
>  	struct iscsi_conn *conn = cmd->conn;
> -	struct se_map_sg map_sg;
>  	struct se_unmap_sg unmap_sg;
>  	struct kvec *iov;
>  
> -	memset(&map_sg, 0, sizeof(struct se_map_sg));
>  	memset(&unmap_sg, 0, sizeof(struct se_unmap_sg));
> -	map_sg.fabric_cmd = (void *)cmd;
> -	map_sg.se_cmd = SE_CMD(cmd);
> -	map_sg.sg_kmap_active = 1;
> -	map_sg.iov = &cmd->iov_data[0];
> -	map_sg.data_length = length;
> -	map_sg.data_offset = cmd->write_data_done;
>  	unmap_sg.fabric_cmd = (void *)cmd;
>  	unmap_sg.se_cmd = SE_CMD(cmd);
>  
> -	iov_ret = iscsit_set_iovec_ptrs(&map_sg, &unmap_sg);
> +	iov_ret = iscsit_set_iovec_ptrs(cmd, cmd->iov_data, cmd->write_data_done,
> +					length, 1, &unmap_sg);
>  	if (iov_ret < 0)
>  		return IMMEDIATE_DATA_CANNOT_RECOVER;
>  
> @@ -2602,14 +2583,7 @@ static int iscsit_handle_immediate_data(
>  		 * call set_iovec_data_ptrs again in order to have a iMD/PSCSI
>  		 * agnostic way of doing datadigests computations.
>  		 */
> -		memset(&map_sg, 0, sizeof(struct se_map_sg));
> -		map_sg.fabric_cmd = (void *)cmd;
> -		map_sg.se_cmd = SE_CMD(cmd);
> -		map_sg.iov = iov_ptr;
> -		map_sg.data_length = length;
> -		map_sg.data_offset = cmd->write_data_done;
> -
> -		if (iscsit_set_iovec_ptrs(&map_sg, &unmap_sg) < 0)
> +		if (iscsit_set_iovec_ptrs(cmd, iov_ptr, cmd->write_data_done, length, 0, &unmap_sg) < 0)
>  			return IMMEDIATE_DATA_CANNOT_RECOVER;
>  
>  		iscsit_do_crypto_hash_iovec(&conn->conn_rx_hash, iov_ptr,
> @@ -2862,7 +2836,6 @@ static int iscsit_send_data_in(
>  	u32 iov_count = 0, tx_size = 0;
>  	struct iscsi_datain datain;
>  	struct iscsi_datain_req *dr;
> -	struct se_map_sg map_sg;
>  	struct iscsi_data_rsp *hdr;
>  	struct kvec *iov;
>  
> @@ -2961,15 +2934,8 @@ static int iscsit_send_data_in(
>  			" for DataIN PDU 0x%08x\n", *header_digest);
>  	}
>  
> -	memset(&map_sg, 0, sizeof(struct se_map_sg));
> -	map_sg.fabric_cmd = (void *)cmd;
> -	map_sg.se_cmd = SE_CMD(cmd);
> -	map_sg.sg_kmap_active = 1;
> -	map_sg.iov = &cmd->iov_data[1];
> -	map_sg.data_length = datain.length;
> -	map_sg.data_offset = datain.offset;
> -
> -	iov_ret = iscsit_set_iovec_ptrs(&map_sg, unmap_sg);
> +	iov_ret = iscsit_set_iovec_ptrs(cmd, &cmd->iov_data[iov_count], datain.offset,
> +					datain.length, 1, unmap_sg);
>  	if (iov_ret < 0)
>  		return -1;
>  
> diff --git a/drivers/target/iscsi/iscsi_target_util.h b/drivers/target/iscsi/iscsi_target_util.h
> index 885ca6f..9bd5cc0 100644
> --- a/drivers/target/iscsi/iscsi_target_util.h
> +++ b/drivers/target/iscsi/iscsi_target_util.h
> @@ -20,15 +20,6 @@ struct se_offset_map {
>  	void			*iovec_base;
>  };
>  
> -struct se_map_sg {
> -	int			sg_kmap_active:1;
> -	u32			data_length;
> -	u32			data_offset;
> -	void			*fabric_cmd;
> -	struct se_cmd		*se_cmd;
> -	struct kvec		*iov;
> -};
> -
>  struct se_unmap_sg {
>  	u32			data_length;
>  	u32			sg_count;
> -- 
> 1.7.1
> 

--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux