Hi James, On Sun, Jan 03, 2021 at 09:11:25AM -0800, James Smart wrote: > +struct efct_io { > + struct list_head list_entry; > + struct list_head io_pending_link; > + /* reference counter and callback function */ > + struct kref ref; > + void (*release)(struct kref *arg); > + /* pointer back to efct */ > + struct efct *efct; > + /* unique instance index value */ > + u32 instance_index; > + /* display name */ > + const char *display_name; > + /* pointer to node */ > + struct efct_node *node; > + /* (io_pool->io_free_list) free list link */ > + /* initiator task tag (OX_ID) for back-end and SCSI logging */ > + u32 init_task_tag; > + /* target task tag (RX_ID) - for back-end and SCSI logging */ > + u32 tgt_task_tag; > + /* HW layer unique IO id - for back-end and SCSI logging */ > + u32 hw_tag; > + /* unique IO identifier */ > + u32 tag; > + /* SGL */ > + struct efct_scsi_sgl *sgl; > + /* Number of allocated SGEs */ > + u32 sgl_allocated; > + /* Number of SGEs in this SGL */ > + u32 sgl_count; > + /* backend target private IO data */ > + struct efct_scsi_tgt_io tgt_io; > + /* expected data transfer length, based on FC header */ > + u32 exp_xfer_len; > + > + /* Declarations private to HW/SLI */ > + void *hw_priv; > + > + /* indicates what this struct efct_io structure is used for */ > + enum efct_io_type io_type; > + struct efct_hw_io *hio; > + size_t transferred; > + > + /* set if auto_trsp was set */ > + bool auto_resp; > + /* set if low latency request */ > + bool low_latency; > + /* selected WQ steering request */ > + u8 wq_steering; > + /* selected WQ class if steering is class */ > + u8 wq_class; > + /* transfer size for current request */ > + u64 xfer_req; > + /* target callback function */ > + efct_scsi_io_cb_t scsi_tgt_cb; > + /* target callback function argument */ > + void *scsi_tgt_cb_arg; > + /* abort callback function */ > + efct_scsi_io_cb_t abort_cb; > + /* abort callback function argument */ > + void *abort_cb_arg; > + /* BLS callback function */ > + efct_scsi_io_cb_t bls_cb; > + /* BLS callback function argument */ > + void *bls_cb_arg; > + /* TMF command being processed */ > + enum efct_scsi_tmf_cmd tmf_cmd; > + /* rx_id from the ABTS that initiated the command abort */ > + u16 abort_rx_id; > + > + /* True if this is a Target command */ > + bool cmd_tgt; > + /* when aborting, indicates ABTS is to be sent */ > + bool send_abts; > + /* True if this is an Initiator command */ > + bool cmd_ini; > + /* True if local node has sequence initiative */ > + bool seq_init; > + /* iparams for hw io send call */ > + union efct_hw_io_param_u iparam; > + /* HW IO type */ > + enum efct_hw_io_type hio_type; > + /* wire length */ > + u64 wire_len; > + /* saved HW callback */ > + void *hw_cb; > + > + /* for abort handling */ > + /* pointer to IO to abort */ > + struct efct_io *io_to_abort; > + > + /* SCSI Response buffer */ > + struct efc_dma rspbuf; > + /* Timeout value in seconds for this IO */ > + u32 timeout; > + /* CS_CTL priority for this IO */ > + u8 cs_ctl; > + /* Is io object in freelist > */ > + u8 io_free; > + u32 app_id; > +}; These comments should be in kernel doc format. > + > +struct efct_io_cb_arg { > + int status; /* completion status */ > + int ext_status; /* extended completion status */ > + void *app; /* application argument */ > +}; > + These here too. Thanks, Daniel