Re: [PATCH 01/15] qla2xxx: Combine Active command arrays.

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

 



On Wed, 2017-06-07 at 14:43 -0700, Himanshu Madhani wrote:
> +enum {
> +	TYPE_SRB,
> +	TYPE_TGT_CMD,
> +};
> +
>  typedef struct srb {
> +	/*
> +	 * Do not move cmd_type field, it needs to
> +	 * line up with qla_tgt_cmd->cmd_type
> +	 */
> +	uint8_t cmd_type;
> +	uint8_t pad[3];
>  	atomic_t ref_count;
>  	struct fc_port *fcport;
>  	struct scsi_qla_host *vha;

[ ... ]
 
>  struct qla_tgt_cmd {
> +	/*
> +	 * Do not move cmd_type field. it needs to line up with srb->cmd_type
> +	 */
> +	uint8_t cmd_type;
> +	uint8_t pad[7];
>  	struct se_cmd se_cmd;
>  	struct fc_port *sess;
>  	int state;

Hello Quinn and Himanshu,

Sorry but this is really inelegant. Have you considered the following?
- Keep the existing srb and qla_tgt_cmd data structures.
- Introduce a new data structure with enum cmd_type as the first member and
  a union of struct srb and struct qla_tgt_cmd as the second member.
- Use __attribute__((aligned(...))) to express alignment requirements instead
  of explicitly inserting padding bytes.

With that approach no casts are needed to convert a pointer to the new data
structure into a struct srb or struct qla_tgt_cmd pointer - all that will be
needed is to take the address of the appropriate member of the union.

Thanks,

Bart.



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux