Bart, On 2019/10/28 21:38, Bart Van Assche wrote: > On 10/28/19 3:57 AM, Damien Le Moal wrote: >> struct scsi_cmnd cmd->req.resid_len which is returned and set >> respectively by the helper functions scsi_get_resid() and >> scsi_set_resid() is an unsigned int. Reflect this fact in the interface >> of these helper functions. >> [ ... ] >> -static inline void scsi_set_resid(struct scsi_cmnd *cmd, int resid) >> +static inline void scsi_set_resid(struct scsi_cmnd *cmd, unsigned int resid) >> { >> cmd->req.resid_len = resid; >> } >> >> -static inline int scsi_get_resid(struct scsi_cmnd *cmd) >> +static inline unsigned int scsi_get_resid(struct scsi_cmnd *cmd) >> { >> return cmd->req.resid_len; >> } > > From the iSCSI RFC: > > SCSI-Presented Data Transfer Length (SPDTL) is the term this document > uses (see Section 1.1 for definition) to represent the aggregate data > length that the target SCSI layer attempts to transfer using the > local iSCSI layer for a task. Expected Data Transfer Length (EDTL) > is the iSCSI term that represents the length of data that the iSCSI > layer expects to transfer for a task. EDTL is specified in the SCSI > Command PDU. > > When SPDTL = EDTL for a task, the target iSCSI layer completes the > task with no residuals. Whenever SPDTL differs from EDTL for a task, > that task is said to have a residual. > > If SPDTL > EDTL for a task, iSCSI Overflow MUST be signaled in the > SCSI Response PDU as specified in [RFC3720]. The Residual Count MUST > be set to the numerical value of (SPDTL - EDTL). > > If SPDTL < EDTL for a task, iSCSI Underflow MUST be signaled in the > SCSI Response PDU as specified in [RFC3720]. The Residual Count MUST > be set to the numerical value of (EDTL - SPDTL). > > Note that the Overflow and Underflow scenarios are independent of > Data-In and Data-Out. Either scenario is logically possible in > either direction of data transfer. > > If the residual is changed from signed into unsigned, how is a SCSI LLD > expected to report the difference between residual overflow and residual > underflow to the SCSI core? As mentioned in the commit message, cmd->req.resid_len where the resid is stored is an unsigned int. And it has been an unsigned int forever as far as I know. So I think changing the interface to unsigned int makes sense in that context. Also, unless I am reading this wrong, the above definition you quote always lead to resid >= 0, so I do not see what problem you are worried about. Could you elaborate your concerns please ? > > Thanks, > > Bart. > -- Damien Le Moal Western Digital Research