On Tue, 22 Mar 2011, Roger Quadros wrote: > I have a question here. > > The host can request us to send less or more than the actual TOC size, since it > has no clue how big it is. > e.g. Linux host requests us to send only 12 bytes even though our formatted TOC > length is 20. In this case should we return fsg->data_size_from_cmnd instead of > actual TOC length? No. Always return the actual TOC length. > e.g. Mac requests us to send 65534 bytes but our RAW TOC length is 37. > The file storage driver seems to be zero padding our data response. So we > respond with 65534 bytes, 37 of TOC and remaining zero padded. > > Can we do something like this to avoid unnecessary zero padded transfers? > > ret = fsg_get_toc(curlun, msf, format, buf); > if (ret < 0) { > curlun->sense_data = SS_INVALID_FIELD_IN_CDB; > return -EINVAL; > } else if (ret > fsg->data_size_from_cmnd) { > ret = fsg->data_size_from_cmnd; > } else { > fsg->residue = ret; > } > return ret; Not needed (and not correct). The code at the end of do_scsi_command() already does this: reply = min((u32) reply, fsg->data_size_from_cmnd); ... fsg->residue -= reply; Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html