This function is bugged since the beginning, but it never hit because
its variable doesn't allow. However, since commit
a77e1f0f81 it happen now.
First, it assume that ds_len will always equal to real user requested
size. So it being used for sector count calculation. This is no longer
true, and will fail if attempt to read last few sectors. Use
bp->bio_length instead.
Second, this being a loop is pointless because nsegs will never be > 1
as specified at bus_dma_tag_create() call. And all it doing is to
repeat very same command again but with different ds_addr. Since
bio_driver2 tag ident pointer are being reused, the result will be
discarded at ps3disk_intr().
Signed-off-by: Chattrapat Sangmanee <aomsin27@hotmail.co.th>
Reviewed by: imp,mav
Pull Request: https://github.com/freebsd/freebsd-src/pull/1414